@stateset/sandbox-cli 1.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 (53) hide show
  1. package/dist/__tests__/client.test.d.ts +2 -0
  2. package/dist/__tests__/client.test.d.ts.map +1 -0
  3. package/dist/__tests__/client.test.js +198 -0
  4. package/dist/__tests__/client.test.js.map +1 -0
  5. package/dist/__tests__/config.test.d.ts +2 -0
  6. package/dist/__tests__/config.test.d.ts.map +1 -0
  7. package/dist/__tests__/config.test.js +50 -0
  8. package/dist/__tests__/config.test.js.map +1 -0
  9. package/dist/client.d.ts +158 -0
  10. package/dist/client.d.ts.map +1 -0
  11. package/dist/client.js +89 -0
  12. package/dist/client.js.map +1 -0
  13. package/dist/commands/artifact.d.ts +3 -0
  14. package/dist/commands/artifact.d.ts.map +1 -0
  15. package/dist/commands/artifact.js +220 -0
  16. package/dist/commands/artifact.js.map +1 -0
  17. package/dist/commands/checkpoint.d.ts +3 -0
  18. package/dist/commands/checkpoint.d.ts.map +1 -0
  19. package/dist/commands/checkpoint.js +261 -0
  20. package/dist/commands/checkpoint.js.map +1 -0
  21. package/dist/commands/config.d.ts +3 -0
  22. package/dist/commands/config.d.ts.map +1 -0
  23. package/dist/commands/config.js +134 -0
  24. package/dist/commands/config.js.map +1 -0
  25. package/dist/commands/deploy.d.ts +3 -0
  26. package/dist/commands/deploy.d.ts.map +1 -0
  27. package/dist/commands/deploy.js +51 -0
  28. package/dist/commands/deploy.js.map +1 -0
  29. package/dist/commands/pool.d.ts +3 -0
  30. package/dist/commands/pool.d.ts.map +1 -0
  31. package/dist/commands/pool.js +114 -0
  32. package/dist/commands/pool.js.map +1 -0
  33. package/dist/commands/sandbox.d.ts +3 -0
  34. package/dist/commands/sandbox.d.ts.map +1 -0
  35. package/dist/commands/sandbox.js +324 -0
  36. package/dist/commands/sandbox.js.map +1 -0
  37. package/dist/commands/session.d.ts +3 -0
  38. package/dist/commands/session.d.ts.map +1 -0
  39. package/dist/commands/session.js +351 -0
  40. package/dist/commands/session.js.map +1 -0
  41. package/dist/commands/tunnel.d.ts +3 -0
  42. package/dist/commands/tunnel.d.ts.map +1 -0
  43. package/dist/commands/tunnel.js +103 -0
  44. package/dist/commands/tunnel.js.map +1 -0
  45. package/dist/config.d.ts +13 -0
  46. package/dist/config.d.ts.map +1 -0
  47. package/dist/config.js +31 -0
  48. package/dist/config.js.map +1 -0
  49. package/dist/index.d.ts +3 -0
  50. package/dist/index.d.ts.map +1 -0
  51. package/dist/index.js +50 -0
  52. package/dist/index.js.map +1 -0
  53. package/package.json +58 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const deployCommand: Command;
3
+ //# sourceMappingURL=deploy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgCpC,eAAO,MAAM,aAAa,SA2BtB,CAAC"}
@@ -0,0 +1,51 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import { spawnSync } from 'node:child_process';
4
+ import path from 'node:path';
5
+ import { fileURLToPath } from 'node:url';
6
+ const providers = ['aws', 'gcp', 'azure'];
7
+ function resolveRepoRoot() {
8
+ return path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../../');
9
+ }
10
+ function buildKubectlArgs(provider, options) {
11
+ const args = ['apply', '-k', `k8s/overlays/${provider}`];
12
+ if (options.kubeconfig) {
13
+ args.push('--kubeconfig', options.kubeconfig);
14
+ }
15
+ if (options.context) {
16
+ args.push('--context', options.context);
17
+ }
18
+ if (options.namespace) {
19
+ args.push('--namespace', options.namespace);
20
+ }
21
+ if (options.dryRun) {
22
+ args.push('--dry-run=server');
23
+ }
24
+ return args;
25
+ }
26
+ export const deployCommand = new Command('deploy')
27
+ .description('Deploy Kubernetes manifests using a cloud provider overlay')
28
+ .argument('<provider>', 'Cloud provider: aws, gcp, azure')
29
+ .option('--kubeconfig <path>', 'Path to kubeconfig file')
30
+ .option('--context <name>', 'Kubernetes context to use')
31
+ .option('--namespace <name>', 'Override namespace')
32
+ .option('--dry-run', 'Server-side dry run')
33
+ .action((provider, options) => {
34
+ const normalized = provider.toLowerCase();
35
+ if (!providers.includes(normalized)) {
36
+ console.error(chalk.red(`Unknown provider: ${provider}`));
37
+ console.log(chalk.gray('Available providers: aws, gcp, azure'));
38
+ process.exit(1);
39
+ }
40
+ const repoRoot = resolveRepoRoot();
41
+ const args = buildKubectlArgs(normalized, options);
42
+ console.log(chalk.gray(`Running: kubectl ${args.join(' ')}`));
43
+ const result = spawnSync('kubectl', args, {
44
+ cwd: repoRoot,
45
+ stdio: 'inherit',
46
+ });
47
+ if (result.status !== 0) {
48
+ process.exit(result.status ?? 1);
49
+ }
50
+ });
51
+ //# sourceMappingURL=deploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const poolCommand: Command;
3
+ //# sourceMappingURL=pool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../../src/commands/pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,WAAW,SACc,CAAC"}
@@ -0,0 +1,114 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import ora from 'ora';
4
+ import { getClient } from '../client.js';
5
+ export const poolCommand = new Command('pool')
6
+ .description('Manage warm pod pool');
7
+ // Get pool stats
8
+ poolCommand
9
+ .command('stats')
10
+ .description('Get warm pool statistics')
11
+ .option('--json', 'Output as JSON')
12
+ .action(async (options) => {
13
+ const spinner = ora('Fetching pool stats...').start();
14
+ try {
15
+ const client = getClient();
16
+ const stats = await client.pool.getStats();
17
+ spinner.stop();
18
+ if (options.json) {
19
+ console.log(JSON.stringify(stats, null, 2));
20
+ return;
21
+ }
22
+ console.log(chalk.bold('Warm Pool Statistics'));
23
+ console.log(chalk.gray('─'.repeat(30)));
24
+ // Create a simple bar visualization
25
+ const total = stats.total;
26
+ const barWidth = 20;
27
+ console.log();
28
+ console.log(`Total pods: ${stats.total}`);
29
+ console.log();
30
+ // Ready pods
31
+ const readyBar = createBar(stats.ready, total, barWidth, 'green');
32
+ console.log(`Ready: ${readyBar} ${stats.ready}`);
33
+ // Creating pods
34
+ const creatingBar = createBar(stats.creating, total, barWidth, 'yellow');
35
+ console.log(`Creating: ${creatingBar} ${stats.creating}`);
36
+ // Claimed pods
37
+ const claimed = stats.claimed ?? 0;
38
+ const claimedBar = createBar(claimed, total, barWidth, 'blue');
39
+ console.log(`Claimed: ${claimedBar} ${claimed}`);
40
+ console.log();
41
+ // Status summary
42
+ if (stats.ready > 0) {
43
+ console.log(chalk.green(`✓ ${stats.ready} warm pod(s) ready for fast sandbox creation`));
44
+ }
45
+ else if (stats.creating > 0) {
46
+ console.log(chalk.yellow(`○ Pool replenishing (${stats.creating} creating)`));
47
+ }
48
+ else {
49
+ console.log(chalk.red('✗ No warm pods available - sandbox creation will be slower'));
50
+ }
51
+ }
52
+ catch (error) {
53
+ spinner.fail('Failed to get pool stats');
54
+ console.error(chalk.red(error.message));
55
+ process.exit(1);
56
+ }
57
+ });
58
+ // Watch pool stats
59
+ poolCommand
60
+ .command('watch')
61
+ .description('Watch pool statistics in real-time')
62
+ .option('-i, --interval <seconds>', 'Update interval in seconds', '5')
63
+ .action(async (options) => {
64
+ const interval = parseInt(options.interval) * 1000;
65
+ console.log(chalk.gray(`Watching pool stats (updating every ${options.interval}s). Press Ctrl+C to stop.`));
66
+ console.log();
67
+ const update = async () => {
68
+ try {
69
+ const client = getClient();
70
+ const stats = await client.pool.getStats();
71
+ // Clear previous output
72
+ process.stdout.write('\x1B[2K\x1B[1A'.repeat(4));
73
+ process.stdout.write('\x1B[2K');
74
+ const claimed = stats.claimed ?? 0;
75
+ const readyBar = createBar(stats.ready, stats.total, 15, 'green');
76
+ const creatingBar = createBar(stats.creating, stats.total, 15, 'yellow');
77
+ const claimedBar = createBar(claimed, stats.total, 15, 'blue');
78
+ console.log(`Ready: ${readyBar} ${stats.ready}/${stats.total}`);
79
+ console.log(`Creating: ${creatingBar} ${stats.creating}/${stats.total}`);
80
+ console.log(`Claimed: ${claimedBar} ${claimed}/${stats.total}`);
81
+ console.log(chalk.gray(`Updated: ${new Date().toLocaleTimeString()}`));
82
+ }
83
+ catch (error) {
84
+ console.error(chalk.red(`Error: ${error.message}`));
85
+ }
86
+ };
87
+ // Initial output placeholders
88
+ console.log('Ready: loading...');
89
+ console.log('Creating: loading...');
90
+ console.log('Claimed: loading...');
91
+ console.log('Updated: ...');
92
+ await update();
93
+ const timer = setInterval(update, interval);
94
+ // Handle Ctrl+C
95
+ process.on('SIGINT', () => {
96
+ clearInterval(timer);
97
+ console.log();
98
+ console.log(chalk.gray('Stopped watching'));
99
+ process.exit(0);
100
+ });
101
+ });
102
+ // Helper function to create a progress bar
103
+ function createBar(value, total, width, color) {
104
+ if (total === 0)
105
+ return chalk.gray('░'.repeat(width));
106
+ const filled = Math.round((value / total) * width);
107
+ const empty = width - filled;
108
+ const colorFn = color === 'green' ? chalk.green :
109
+ color === 'yellow' ? chalk.yellow :
110
+ color === 'blue' ? chalk.blue :
111
+ chalk.white;
112
+ return colorFn('█'.repeat(filled)) + chalk.gray('░'.repeat(empty));
113
+ }
114
+ //# sourceMappingURL=pool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pool.js","sourceRoot":"","sources":["../../src/commands/pool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const sandboxCommand: Command;
3
+ //# sourceMappingURL=sandbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../../src/commands/sandbox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,cAAc,SACkB,CAAC"}
@@ -0,0 +1,324 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import ora from 'ora';
4
+ import { table } from 'table';
5
+ import { getClient } from '../client.js';
6
+ export const sandboxCommand = new Command('sandbox')
7
+ .description('Manage sandbox environments');
8
+ // Create sandbox
9
+ sandboxCommand
10
+ .command('create')
11
+ .description('Create a new sandbox')
12
+ .option('-t, --timeout <seconds>', 'Sandbox timeout in seconds', '300')
13
+ .option('-c, --cpus <cpus>', 'CPU limit (e.g., "0.5", "1")')
14
+ .option('-m, --memory <memory>', 'Memory limit (e.g., "512Mi", "1Gi")')
15
+ .option('-i, --isolation <isolation>', 'Isolation level (container, gvisor, microvm)')
16
+ .option('-e, --env <env...>', 'Environment variables (KEY=VALUE)')
17
+ .action(async (options) => {
18
+ const spinner = ora('Creating sandbox...').start();
19
+ try {
20
+ const client = getClient();
21
+ const env = {};
22
+ if (options.env) {
23
+ for (const e of options.env) {
24
+ const [key, ...valueParts] = e.split('=');
25
+ env[key] = valueParts.join('=');
26
+ }
27
+ }
28
+ const result = await client.sandbox.create({
29
+ timeout_seconds: parseInt(options.timeout),
30
+ cpus: options.cpus,
31
+ memory: options.memory,
32
+ isolation: options.isolation,
33
+ env: Object.keys(env).length > 0 ? env : undefined,
34
+ });
35
+ spinner.succeed('Sandbox created');
36
+ console.log();
37
+ console.log(chalk.green('Sandbox ID:'), result.sandbox_id);
38
+ console.log(chalk.gray('Session ID:'), result.session_id);
39
+ console.log(chalk.gray('Expires at:'), result.expires_at);
40
+ console.log();
41
+ console.log(chalk.gray('Run commands with:'));
42
+ console.log(chalk.cyan(` stateset sandbox exec ${result.sandbox_id} -- <command>`));
43
+ }
44
+ catch (error) {
45
+ spinner.fail('Failed to create sandbox');
46
+ console.error(chalk.red(error.message));
47
+ process.exit(1);
48
+ }
49
+ });
50
+ // List sandboxes
51
+ sandboxCommand
52
+ .command('list')
53
+ .alias('ls')
54
+ .description('List all sandboxes')
55
+ .option('--json', 'Output as JSON')
56
+ .action(async (options) => {
57
+ const spinner = ora('Fetching sandboxes...').start();
58
+ try {
59
+ const client = getClient();
60
+ const result = await client.sandbox.list();
61
+ spinner.stop();
62
+ if (options.json) {
63
+ console.log(JSON.stringify(result.sandboxes, null, 2));
64
+ return;
65
+ }
66
+ if (result.sandboxes.length === 0) {
67
+ console.log(chalk.yellow('No sandboxes found'));
68
+ return;
69
+ }
70
+ const tableData = [
71
+ ['ID', 'Status', 'Created', 'Expires', 'Extend Left', 'Session'].map(h => chalk.bold(h)),
72
+ ...result.sandboxes.map((s) => [
73
+ s.sandbox_id.substring(0, 20),
74
+ colorStatus(s.status),
75
+ formatDate(s.created_at),
76
+ formatDate(s.expires_at),
77
+ formatRemainingExtendBudget(s.remaining_extend_seconds),
78
+ s.session_id.substring(0, 12),
79
+ ]),
80
+ ];
81
+ console.log(table(tableData));
82
+ }
83
+ catch (error) {
84
+ spinner.fail('Failed to list sandboxes');
85
+ console.error(chalk.red(error.message));
86
+ process.exit(1);
87
+ }
88
+ });
89
+ // Get sandbox details
90
+ sandboxCommand
91
+ .command('get <sandbox-id>')
92
+ .description('Get sandbox details')
93
+ .option('--json', 'Output as JSON')
94
+ .action(async (sandboxId, options) => {
95
+ const spinner = ora('Fetching sandbox...').start();
96
+ try {
97
+ const client = getClient();
98
+ const result = await client.sandbox.get(sandboxId);
99
+ spinner.stop();
100
+ if (options.json) {
101
+ console.log(JSON.stringify(result, null, 2));
102
+ return;
103
+ }
104
+ console.log(chalk.bold('Sandbox Details'));
105
+ console.log(chalk.gray('─'.repeat(40)));
106
+ console.log(`ID: ${result.sandbox_id}`);
107
+ console.log(`Session: ${result.session_id}`);
108
+ console.log(`Status: ${colorStatus(result.status)}`);
109
+ if (result.pod_ip) {
110
+ console.log(`Pod IP: ${result.pod_ip}`);
111
+ }
112
+ console.log(`Created: ${result.created_at}`);
113
+ console.log(`Expires: ${result.expires_at}`);
114
+ if (result.max_expires_at) {
115
+ console.log(`Max Expires: ${result.max_expires_at}`);
116
+ }
117
+ if (typeof result.remaining_extend_seconds === 'number') {
118
+ console.log(`Extend Left: ${formatRemainingExtendBudget(result.remaining_extend_seconds)}`);
119
+ }
120
+ const lifetimeMetadata = result;
121
+ if (typeof lifetimeMetadata.lifetime_used_seconds === 'number'
122
+ && typeof lifetimeMetadata.max_lifetime_seconds === 'number') {
123
+ const usedPercent = typeof lifetimeMetadata.lifetime_used_percent === 'number'
124
+ ? lifetimeMetadata.lifetime_used_percent
125
+ : (lifetimeMetadata.max_lifetime_seconds > 0
126
+ ? (lifetimeMetadata.lifetime_used_seconds / lifetimeMetadata.max_lifetime_seconds) * 100
127
+ : 0);
128
+ console.log(`Lifetime: ${formatBudgetDuration(lifetimeMetadata.lifetime_used_seconds)} / ${formatBudgetDuration(lifetimeMetadata.max_lifetime_seconds)} (${usedPercent.toFixed(2)}%)`);
129
+ }
130
+ }
131
+ catch (error) {
132
+ spinner.fail('Failed to get sandbox');
133
+ console.error(chalk.red(error.message));
134
+ process.exit(1);
135
+ }
136
+ });
137
+ // Execute command in sandbox
138
+ sandboxCommand
139
+ .command('exec <sandbox-id>')
140
+ .description('Execute a command in a sandbox')
141
+ .option('--json', 'Output as JSON')
142
+ .argument('<command...>', 'Command to execute')
143
+ .action(async (sandboxId, command, options) => {
144
+ const spinner = ora('Executing command...').start();
145
+ try {
146
+ const client = getClient();
147
+ const result = await client.sandbox.execute(sandboxId, command);
148
+ spinner.stop();
149
+ if (options.json) {
150
+ console.log(JSON.stringify(result, null, 2));
151
+ return;
152
+ }
153
+ if (result.stdout) {
154
+ console.log(result.stdout);
155
+ }
156
+ if (result.stderr) {
157
+ console.error(chalk.yellow(result.stderr));
158
+ }
159
+ if (result.exit_code !== 0) {
160
+ console.log(chalk.red(`Exit code: ${result.exit_code}`));
161
+ process.exit(result.exit_code);
162
+ }
163
+ }
164
+ catch (error) {
165
+ spinner.fail('Failed to execute command');
166
+ console.error(chalk.red(error.message));
167
+ process.exit(1);
168
+ }
169
+ });
170
+ // Stop sandbox
171
+ sandboxCommand
172
+ .command('stop <sandbox-id>')
173
+ .description('Stop a sandbox')
174
+ .action(async (sandboxId) => {
175
+ const spinner = ora('Stopping sandbox...').start();
176
+ try {
177
+ const client = getClient();
178
+ await client.sandbox.stop(sandboxId);
179
+ spinner.succeed(`Sandbox ${sandboxId} stopped`);
180
+ }
181
+ catch (error) {
182
+ spinner.fail('Failed to stop sandbox');
183
+ console.error(chalk.red(error.message));
184
+ process.exit(1);
185
+ }
186
+ });
187
+ // Extend sandbox lifetime
188
+ sandboxCommand
189
+ .command('extend <sandbox-id>')
190
+ .description('Extend sandbox lifetime')
191
+ .option('-s, --seconds <seconds>', 'Additional lifetime in seconds', '900')
192
+ .option('--json', 'Output as JSON')
193
+ .action(async (sandboxId, options) => {
194
+ const seconds = Number.parseInt(options.seconds, 10);
195
+ if (!Number.isFinite(seconds) || seconds < 60) {
196
+ console.error(chalk.red('Invalid --seconds value. Must be an integer >= 60.'));
197
+ process.exit(1);
198
+ }
199
+ const spinner = ora('Extending sandbox lifetime...').start();
200
+ try {
201
+ const client = getClient();
202
+ const result = await client.sandbox.extend(sandboxId, seconds);
203
+ spinner.stop();
204
+ if (options.json) {
205
+ console.log(JSON.stringify(result, null, 2));
206
+ return;
207
+ }
208
+ const extensionMetadata = result;
209
+ const requestedSeconds = typeof extensionMetadata.requested_additional_seconds === 'number'
210
+ ? extensionMetadata.requested_additional_seconds
211
+ : seconds;
212
+ const appliedSeconds = typeof extensionMetadata.applied_additional_seconds === 'number'
213
+ ? extensionMetadata.applied_additional_seconds
214
+ : (typeof extensionMetadata.additional_seconds === 'number'
215
+ ? extensionMetadata.additional_seconds
216
+ : requestedSeconds);
217
+ if (appliedSeconds < requestedSeconds) {
218
+ console.log(chalk.yellow(`Sandbox ${sandboxId} extension capped at ${formatDuration(appliedSeconds)} (requested ${formatDuration(requestedSeconds)})`));
219
+ }
220
+ else {
221
+ console.log(chalk.green(`Sandbox ${sandboxId} extended by ${formatDuration(appliedSeconds)}`));
222
+ }
223
+ console.log(chalk.gray('Status:'), result.status);
224
+ console.log(chalk.gray('Expires at:'), result.expires_at);
225
+ const remainingExtendSeconds = result.remaining_extend_seconds;
226
+ if (typeof remainingExtendSeconds === 'number') {
227
+ console.log(chalk.gray('Remaining extend budget:'), formatRemainingExtendBudget(remainingExtendSeconds));
228
+ }
229
+ }
230
+ catch (error) {
231
+ spinner.fail('Failed to extend sandbox');
232
+ console.error(chalk.red(error.message));
233
+ process.exit(1);
234
+ }
235
+ });
236
+ // Write file to sandbox
237
+ sandboxCommand
238
+ .command('write <sandbox-id> <path> <content>')
239
+ .description('Write a file to a sandbox')
240
+ .action(async (sandboxId, path, content) => {
241
+ const spinner = ora('Writing file...').start();
242
+ try {
243
+ const client = getClient();
244
+ await client.sandbox.writeFile(sandboxId, path, content);
245
+ spinner.succeed(`File written to ${path}`);
246
+ }
247
+ catch (error) {
248
+ spinner.fail('Failed to write file');
249
+ console.error(chalk.red(error.message));
250
+ process.exit(1);
251
+ }
252
+ });
253
+ // Read file from sandbox
254
+ sandboxCommand
255
+ .command('read <sandbox-id> <path>')
256
+ .description('Read a file from a sandbox')
257
+ .action(async (sandboxId, path) => {
258
+ const spinner = ora('Reading file...').start();
259
+ try {
260
+ const client = getClient();
261
+ const content = await client.sandbox.readFile(sandboxId, path);
262
+ spinner.stop();
263
+ console.log(content);
264
+ }
265
+ catch (error) {
266
+ spinner.fail('Failed to read file');
267
+ console.error(chalk.red(error.message));
268
+ process.exit(1);
269
+ }
270
+ });
271
+ // Helper functions
272
+ function colorStatus(status) {
273
+ switch (status) {
274
+ case 'running':
275
+ return chalk.green(status);
276
+ case 'creating':
277
+ return chalk.yellow(status);
278
+ case 'terminated':
279
+ case 'terminating':
280
+ return chalk.gray(status);
281
+ case 'error':
282
+ return chalk.red(status);
283
+ default:
284
+ return status;
285
+ }
286
+ }
287
+ function formatDate(dateStr) {
288
+ const date = new Date(dateStr);
289
+ return date.toLocaleString();
290
+ }
291
+ function formatDuration(seconds) {
292
+ const wholeSeconds = Math.max(0, Math.floor(seconds));
293
+ if (wholeSeconds % 60 === 0) {
294
+ const minutes = wholeSeconds / 60;
295
+ return `${minutes}m`;
296
+ }
297
+ return `${wholeSeconds}s`;
298
+ }
299
+ function formatRemainingExtendBudget(remainingSeconds) {
300
+ if (typeof remainingSeconds !== 'number') {
301
+ return '-';
302
+ }
303
+ if (remainingSeconds <= 0) {
304
+ return 'maxed';
305
+ }
306
+ return formatDuration(remainingSeconds);
307
+ }
308
+ function formatBudgetDuration(seconds) {
309
+ const clampedSeconds = Math.max(0, Math.floor(seconds));
310
+ const totalMinutes = Math.floor(clampedSeconds / 60);
311
+ const hours = Math.floor(totalMinutes / 60);
312
+ const minutes = totalMinutes % 60;
313
+ if (hours > 0 && minutes > 0) {
314
+ return `${hours}h ${minutes}m`;
315
+ }
316
+ if (hours > 0) {
317
+ return `${hours}h`;
318
+ }
319
+ if (totalMinutes > 0) {
320
+ return `${totalMinutes}m`;
321
+ }
322
+ return `${clampedSeconds}s`;
323
+ }
324
+ //# sourceMappingURL=sandbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../../src/commands/sandbox.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const sessionCommand: Command;
3
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,cAAc,SACY,CAAC"}