@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,351 @@
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 sessionCommand = new Command('session')
7
+ .description('Manage agent sessions');
8
+ // List sessions
9
+ sessionCommand
10
+ .command('list')
11
+ .description('List agent sessions')
12
+ .option('-s, --status <status>', 'Filter by status (running, paused, completed, etc.)')
13
+ .option('-l, --limit <limit>', 'Max number of sessions', '20')
14
+ .action(async (options) => {
15
+ const spinner = ora('Fetching sessions...').start();
16
+ try {
17
+ const client = getClient();
18
+ const result = await client.sessions.list({
19
+ status: options.status,
20
+ limit: parseInt(options.limit, 10),
21
+ });
22
+ spinner.stop();
23
+ if (!result.sessions || result.sessions.length === 0) {
24
+ console.log(chalk.yellow('No agent sessions found.'));
25
+ return;
26
+ }
27
+ const tableData = [
28
+ [chalk.cyan('ID'), chalk.cyan('Name'), chalk.cyan('Status'), chalk.cyan('Budget'), chalk.cyan('Rotations'), chalk.cyan('Created')],
29
+ ];
30
+ for (const session of result.sessions) {
31
+ const budgetDisplay = session.budget_consumed?.cost_cents
32
+ ? `$${(session.budget_consumed.cost_cents / 100).toFixed(2)}`
33
+ : '-';
34
+ tableData.push([
35
+ session.id.slice(0, 8) + '...',
36
+ session.name || 'Unnamed',
37
+ getStatusBadge(session.status),
38
+ budgetDisplay,
39
+ String(session.rotation_count || 0),
40
+ new Date(session.created_at).toLocaleDateString(),
41
+ ]);
42
+ }
43
+ console.log(table(tableData));
44
+ console.log(chalk.gray(`\nTotal: ${result.sessions.length} sessions`));
45
+ }
46
+ catch (error) {
47
+ spinner.stop();
48
+ console.error(chalk.red(`Error: ${error.message}`));
49
+ process.exit(1);
50
+ }
51
+ });
52
+ // Create session
53
+ sessionCommand
54
+ .command('create')
55
+ .description('Create a new agent session')
56
+ .option('-n, --name <name>', 'Session name')
57
+ .option('-d, --description <description>', 'Session description')
58
+ .option('--cost-cap <cents>', 'Cost cap in cents (e.g., 500 for $5)')
59
+ .option('--iteration-limit <limit>', 'Max iterations')
60
+ .option('--duration-limit <seconds>', 'Max duration in seconds')
61
+ .option('--cpus <cpus>', 'CPU allocation (e.g., 2)', '2')
62
+ .option('--memory <memory>', 'Memory allocation (e.g., 4Gi)', '4Gi')
63
+ .option('--timeout <seconds>', 'Sandbox timeout in seconds', '3600')
64
+ .action(async (options) => {
65
+ const spinner = ora('Creating session...').start();
66
+ try {
67
+ const client = getClient();
68
+ const result = await client.sessions.create({
69
+ name: options.name,
70
+ description: options.description,
71
+ budget: {
72
+ cost_cap_cents: options.costCap ? parseInt(options.costCap, 10) : undefined,
73
+ iteration_limit: options.iterationLimit ? parseInt(options.iterationLimit, 10) : undefined,
74
+ duration_limit_seconds: options.durationLimit ? parseInt(options.durationLimit, 10) : undefined,
75
+ },
76
+ sandbox: {
77
+ cpus: options.cpus,
78
+ memory: options.memory,
79
+ timeout_seconds: parseInt(options.timeout, 10),
80
+ },
81
+ });
82
+ spinner.succeed('Session created!');
83
+ console.log();
84
+ console.log(chalk.cyan('Session ID:'), result.session.id);
85
+ console.log(chalk.cyan('Name:'), result.session.name || 'Unnamed');
86
+ console.log(chalk.cyan('Status:'), getStatusBadge(result.session.status));
87
+ console.log();
88
+ console.log(chalk.gray('To start the session, run:'));
89
+ console.log(chalk.white(` stateset session start ${result.session.id}`));
90
+ }
91
+ catch (error) {
92
+ spinner.stop();
93
+ console.error(chalk.red(`Error: ${error.message}`));
94
+ process.exit(1);
95
+ }
96
+ });
97
+ // Get session
98
+ sessionCommand
99
+ .command('get <session-id>')
100
+ .description('Get details of an agent session')
101
+ .action(async (sessionId) => {
102
+ const spinner = ora('Fetching session...').start();
103
+ try {
104
+ const client = getClient();
105
+ const result = await client.sessions.get(sessionId);
106
+ spinner.stop();
107
+ const session = result.session;
108
+ console.log();
109
+ console.log(chalk.bold('Agent Session Details'));
110
+ console.log(chalk.gray('─'.repeat(40)));
111
+ console.log(chalk.cyan('ID:'), session.id);
112
+ console.log(chalk.cyan('Name:'), session.name || 'Unnamed');
113
+ console.log(chalk.cyan('Status:'), getStatusBadge(session.status));
114
+ console.log(chalk.cyan('Sandbox:'), session.current_sandbox_id || 'None');
115
+ console.log(chalk.cyan('Rotations:'), session.rotation_count || 0);
116
+ console.log(chalk.cyan('Executions:'), session.total_exec_count || 0);
117
+ console.log();
118
+ console.log(chalk.bold('Budget'));
119
+ console.log(chalk.gray('─'.repeat(40)));
120
+ console.log(chalk.cyan('Cost:'), `$${((session.budget_consumed?.cost_cents || 0) / 100).toFixed(2)}`, session.budget_config?.cost_cap_cents
121
+ ? chalk.gray(`/ $${(session.budget_config.cost_cap_cents / 100).toFixed(2)}`)
122
+ : '');
123
+ console.log(chalk.cyan('Iterations:'), session.budget_consumed?.iterations || 0, session.budget_config?.iteration_limit
124
+ ? chalk.gray(`/ ${session.budget_config.iteration_limit}`)
125
+ : '');
126
+ console.log(chalk.cyan('Duration:'), formatDuration(session.budget_consumed?.duration_seconds || 0), session.budget_config?.duration_limit_seconds
127
+ ? chalk.gray(`/ ${formatDuration(session.budget_config.duration_limit_seconds)}`)
128
+ : '');
129
+ console.log();
130
+ console.log(chalk.bold('Timestamps'));
131
+ console.log(chalk.gray('─'.repeat(40)));
132
+ console.log(chalk.cyan('Created:'), new Date(session.created_at).toLocaleString());
133
+ if (session.started_at) {
134
+ console.log(chalk.cyan('Started:'), new Date(session.started_at).toLocaleString());
135
+ }
136
+ console.log(chalk.cyan('Last Activity:'), new Date(session.last_activity_at).toLocaleString());
137
+ if (session.error_message) {
138
+ console.log();
139
+ console.log(chalk.red('Error:'), session.error_message);
140
+ }
141
+ }
142
+ catch (error) {
143
+ spinner.stop();
144
+ console.error(chalk.red(`Error: ${error.message}`));
145
+ process.exit(1);
146
+ }
147
+ });
148
+ // Start session
149
+ sessionCommand
150
+ .command('start <session-id>')
151
+ .description('Start an agent session (creates initial sandbox)')
152
+ .action(async (sessionId) => {
153
+ const spinner = ora('Starting session...').start();
154
+ try {
155
+ const client = getClient();
156
+ const result = await client.sessions.start(sessionId);
157
+ spinner.succeed('Session started!');
158
+ console.log(chalk.cyan('Sandbox ID:'), result.session.current_sandbox_id);
159
+ }
160
+ catch (error) {
161
+ spinner.stop();
162
+ console.error(chalk.red(`Error: ${error.message}`));
163
+ process.exit(1);
164
+ }
165
+ });
166
+ // Pause session
167
+ sessionCommand
168
+ .command('pause <session-id>')
169
+ .description('Pause an agent session')
170
+ .action(async (sessionId) => {
171
+ const spinner = ora('Pausing session...').start();
172
+ try {
173
+ const client = getClient();
174
+ await client.sessions.pause(sessionId);
175
+ spinner.succeed('Session paused.');
176
+ }
177
+ catch (error) {
178
+ spinner.stop();
179
+ console.error(chalk.red(`Error: ${error.message}`));
180
+ process.exit(1);
181
+ }
182
+ });
183
+ // Resume session
184
+ sessionCommand
185
+ .command('resume <session-id>')
186
+ .description('Resume a paused agent session')
187
+ .action(async (sessionId) => {
188
+ const spinner = ora('Resuming session...').start();
189
+ try {
190
+ const client = getClient();
191
+ await client.sessions.resume(sessionId);
192
+ spinner.succeed('Session resumed.');
193
+ }
194
+ catch (error) {
195
+ spinner.stop();
196
+ console.error(chalk.red(`Error: ${error.message}`));
197
+ process.exit(1);
198
+ }
199
+ });
200
+ // Stop session
201
+ sessionCommand
202
+ .command('stop <session-id>')
203
+ .description('Stop an agent session gracefully')
204
+ .option('-r, --reason <reason>', 'Reason for stopping')
205
+ .action(async (sessionId, options) => {
206
+ const spinner = ora('Stopping session...').start();
207
+ try {
208
+ const client = getClient();
209
+ await client.sessions.stop(sessionId, options.reason);
210
+ spinner.succeed('Session stopped.');
211
+ }
212
+ catch (error) {
213
+ spinner.stop();
214
+ console.error(chalk.red(`Error: ${error.message}`));
215
+ process.exit(1);
216
+ }
217
+ });
218
+ // Cancel session
219
+ sessionCommand
220
+ .command('cancel <session-id>')
221
+ .description('Cancel an agent session immediately')
222
+ .action(async (sessionId) => {
223
+ const spinner = ora('Cancelling session...').start();
224
+ try {
225
+ const client = getClient();
226
+ await client.sessions.cancel(sessionId);
227
+ spinner.succeed('Session cancelled.');
228
+ }
229
+ catch (error) {
230
+ spinner.stop();
231
+ console.error(chalk.red(`Error: ${error.message}`));
232
+ process.exit(1);
233
+ }
234
+ });
235
+ // Execute command
236
+ sessionCommand
237
+ .command('exec <session-id> <command...>')
238
+ .description('Execute a command in an agent session')
239
+ .option('-t, --timeout <ms>', 'Command timeout in milliseconds', '60000')
240
+ .option('-d, --cwd <directory>', 'Working directory')
241
+ .action(async (sessionId, command, options) => {
242
+ const spinner = ora('Executing command...').start();
243
+ try {
244
+ const client = getClient();
245
+ const result = await client.sessions.execute(sessionId, {
246
+ command,
247
+ timeout_ms: parseInt(options.timeout, 10),
248
+ cwd: options.cwd,
249
+ });
250
+ spinner.stop();
251
+ if (result.stdout) {
252
+ process.stdout.write(result.stdout);
253
+ }
254
+ if (result.stderr) {
255
+ process.stderr.write(chalk.red(result.stderr));
256
+ }
257
+ if (result.exit_code !== 0) {
258
+ console.log(chalk.yellow(`\nExit code: ${result.exit_code}`));
259
+ }
260
+ }
261
+ catch (error) {
262
+ spinner.stop();
263
+ console.error(chalk.red(`Error: ${error.message}`));
264
+ process.exit(1);
265
+ }
266
+ });
267
+ // List events
268
+ sessionCommand
269
+ .command('events <session-id>')
270
+ .description('List events for an agent session')
271
+ .option('-l, --limit <limit>', 'Max number of events', '50')
272
+ .option('-a, --after <sequence>', 'After sequence number')
273
+ .action(async (sessionId, options) => {
274
+ const spinner = ora('Fetching events...').start();
275
+ try {
276
+ const client = getClient();
277
+ const result = await client.sessions.events(sessionId, {
278
+ limit: parseInt(options.limit, 10),
279
+ after_sequence: options.after ? parseInt(options.after, 10) : undefined,
280
+ });
281
+ spinner.stop();
282
+ if (!result.events || result.events.length === 0) {
283
+ console.log(chalk.yellow('No events found.'));
284
+ return;
285
+ }
286
+ for (const event of result.events) {
287
+ const time = new Date(event.created_at).toLocaleTimeString();
288
+ const type = event.event_type.replace(/_/g, ' ');
289
+ const icon = getEventIcon(event.event_type);
290
+ const color = event.success === false ? chalk.red : chalk.green;
291
+ console.log(`${chalk.gray(`[${event.sequence_number}]`)} ${chalk.gray(time)} ${icon} ${color(type)}`);
292
+ if (event.error_message) {
293
+ console.log(chalk.red(` Error: ${event.error_message}`));
294
+ }
295
+ }
296
+ }
297
+ catch (error) {
298
+ spinner.stop();
299
+ console.error(chalk.red(`Error: ${error.message}`));
300
+ process.exit(1);
301
+ }
302
+ });
303
+ // Helper functions
304
+ function getStatusBadge(status) {
305
+ switch (status) {
306
+ case 'running':
307
+ return chalk.green('running');
308
+ case 'rotating':
309
+ return chalk.blue('rotating');
310
+ case 'paused':
311
+ return chalk.yellow('paused');
312
+ case 'pending':
313
+ return chalk.gray('pending');
314
+ case 'completed':
315
+ return chalk.gray('completed');
316
+ case 'failed':
317
+ return chalk.red('failed');
318
+ case 'cancelled':
319
+ return chalk.gray('cancelled');
320
+ default:
321
+ return status;
322
+ }
323
+ }
324
+ function getEventIcon(eventType) {
325
+ if (eventType.includes('started'))
326
+ return chalk.green('▶');
327
+ if (eventType.includes('completed'))
328
+ return chalk.green('✓');
329
+ if (eventType.includes('failed'))
330
+ return chalk.red('✗');
331
+ if (eventType.includes('rotation'))
332
+ return chalk.blue('↻');
333
+ if (eventType.includes('exec'))
334
+ return chalk.cyan('$');
335
+ if (eventType.includes('paused'))
336
+ return chalk.yellow('⏸');
337
+ return '•';
338
+ }
339
+ function formatDuration(seconds) {
340
+ if (seconds < 60)
341
+ return `${seconds}s`;
342
+ if (seconds < 3600) {
343
+ const mins = Math.floor(seconds / 60);
344
+ const secs = seconds % 60;
345
+ return `${mins}m ${secs}s`;
346
+ }
347
+ const hours = Math.floor(seconds / 3600);
348
+ const mins = Math.floor((seconds % 3600) / 60);
349
+ return `${hours}h ${mins}m`;
350
+ }
351
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const tunnelCommand: Command;
3
+ //# sourceMappingURL=tunnel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tunnel.d.ts","sourceRoot":"","sources":["../../src/commands/tunnel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,aAAa,SACmC,CAAC"}
@@ -0,0 +1,103 @@
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 tunnelCommand = new Command('tunnel')
7
+ .description('Expose sandbox services with public tunnels');
8
+ tunnelCommand
9
+ .command('open <sandbox-id>')
10
+ .description('Create a public tunnel to a sandbox port')
11
+ .option('-p, --port <port>', 'Port to expose', '8080')
12
+ .option('--protocol <protocol>', 'Protocol (http or https)', 'http')
13
+ .option('--expires-in <seconds>', 'Tunnel TTL in seconds', '3600')
14
+ .option('--public', 'Disable token authentication for this tunnel')
15
+ .option('--json', 'Output as JSON')
16
+ .action(async (sandboxId, options) => {
17
+ const spinner = ora('Opening tunnel...').start();
18
+ try {
19
+ const client = getClient();
20
+ const result = await client.tunnels.open(sandboxId, {
21
+ port: Number.parseInt(options.port, 10),
22
+ protocol: options.protocol,
23
+ expires_in: Number.parseInt(options.expiresIn, 10),
24
+ public: Boolean(options.public),
25
+ });
26
+ spinner.succeed('Tunnel created');
27
+ if (options.json) {
28
+ console.log(JSON.stringify(result, null, 2));
29
+ return;
30
+ }
31
+ console.log();
32
+ console.log(chalk.green('Tunnel URL:'), result.url);
33
+ console.log(chalk.gray('Tunnel ID:'), result.tunnel_id);
34
+ console.log(chalk.gray('Expires at:'), result.expires_at);
35
+ if (result.token) {
36
+ console.log();
37
+ console.log(chalk.gray('Auth header:'));
38
+ console.log(chalk.cyan(` X-Stateset-Tunnel-Token: ${result.token}`));
39
+ }
40
+ }
41
+ catch (error) {
42
+ spinner.fail('Failed to open tunnel');
43
+ console.error(chalk.red(error.message));
44
+ process.exit(1);
45
+ }
46
+ });
47
+ tunnelCommand
48
+ .command('list <sandbox-id>')
49
+ .description('List active tunnels for a sandbox')
50
+ .option('--json', 'Output as JSON')
51
+ .action(async (sandboxId, options) => {
52
+ const spinner = ora('Fetching tunnels...').start();
53
+ try {
54
+ const client = getClient();
55
+ const result = await client.tunnels.list(sandboxId);
56
+ spinner.stop();
57
+ if (options.json) {
58
+ console.log(JSON.stringify(result, null, 2));
59
+ return;
60
+ }
61
+ if (result.tunnels.length === 0) {
62
+ console.log(chalk.yellow('No active tunnels'));
63
+ return;
64
+ }
65
+ const rows = [
66
+ ['ID', 'Port', 'Protocol', 'Expires', 'URL'].map((h) => chalk.bold(h)),
67
+ ...result.tunnels.map((tunnel) => [
68
+ tunnel.tunnel_id,
69
+ tunnel.port.toString(),
70
+ tunnel.protocol,
71
+ formatDate(tunnel.expires_at),
72
+ tunnel.url,
73
+ ]),
74
+ ];
75
+ console.log(table(rows));
76
+ }
77
+ catch (error) {
78
+ spinner.fail('Failed to list tunnels');
79
+ console.error(chalk.red(error.message));
80
+ process.exit(1);
81
+ }
82
+ });
83
+ tunnelCommand
84
+ .command('close <tunnel-id>')
85
+ .description('Close an active tunnel')
86
+ .action(async (tunnelId) => {
87
+ const spinner = ora('Closing tunnel...').start();
88
+ try {
89
+ const client = getClient();
90
+ await client.tunnels.close(tunnelId);
91
+ spinner.succeed(`Tunnel ${tunnelId} closed`);
92
+ }
93
+ catch (error) {
94
+ spinner.fail('Failed to close tunnel');
95
+ console.error(chalk.red(error.message));
96
+ process.exit(1);
97
+ }
98
+ });
99
+ function formatDate(dateStr) {
100
+ const date = new Date(dateStr);
101
+ return date.toLocaleString();
102
+ }
103
+ //# sourceMappingURL=tunnel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tunnel.js","sourceRoot":"","sources":["../../src/commands/tunnel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ interface Config {
2
+ apiKey?: string;
3
+ apiUrl: string;
4
+ defaultTimeout: number;
5
+ }
6
+ export declare function getConfig(): Config;
7
+ export declare function setApiKey(key: string): void;
8
+ export declare function setApiUrl(url: string): void;
9
+ export declare function setDefaultTimeout(timeout: number): void;
10
+ export declare function clearConfig(): void;
11
+ export declare function getConfigPath(): string;
12
+ export {};
13
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,UAAU,MAAM;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;CACxB;AAUD,wBAAgB,SAAS,IAAI,MAAM,CAMlC;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEvD;AAED,wBAAgB,WAAW,IAAI,IAAI,CAElC;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
package/dist/config.js ADDED
@@ -0,0 +1,31 @@
1
+ import Conf from 'conf';
2
+ const config = new Conf({
3
+ projectName: 'stateset-sandbox',
4
+ defaults: {
5
+ apiUrl: 'http://localhost:8080',
6
+ defaultTimeout: 300,
7
+ },
8
+ });
9
+ export function getConfig() {
10
+ return {
11
+ apiKey: config.get('apiKey'),
12
+ apiUrl: config.get('apiUrl'),
13
+ defaultTimeout: config.get('defaultTimeout'),
14
+ };
15
+ }
16
+ export function setApiKey(key) {
17
+ config.set('apiKey', key);
18
+ }
19
+ export function setApiUrl(url) {
20
+ config.set('apiUrl', url);
21
+ }
22
+ export function setDefaultTimeout(timeout) {
23
+ config.set('defaultTimeout', timeout);
24
+ }
25
+ export function clearConfig() {
26
+ config.clear();
27
+ }
28
+ export function getConfigPath() {
29
+ return config.path;
30
+ }
31
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAQxB,MAAM,MAAM,GAAG,IAAI,IAAI,CAAS;IAC9B,WAAW,EAAE,kBAAkB;IAC/B,QAAQ,EAAE;QACR,MAAM,EAAE,uBAAuB;QAC/B,cAAc,EAAE,GAAG;KACpB;CACF,CAAC,CAAC;AAEH,MAAM,UAAU,SAAS;IACvB,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC5B,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC5B,cAAc,EAAE,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC;KAC7C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,MAAM,CAAC,KAAK,EAAE,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,50 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import chalk from 'chalk';
4
+ import { sandboxCommand } from './commands/sandbox.js';
5
+ import { checkpointCommand } from './commands/checkpoint.js';
6
+ import { artifactCommand } from './commands/artifact.js';
7
+ import { configCommand } from './commands/config.js';
8
+ import { poolCommand } from './commands/pool.js';
9
+ import { tunnelCommand } from './commands/tunnel.js';
10
+ import { sessionCommand } from './commands/session.js';
11
+ import { deployCommand } from './commands/deploy.js';
12
+ import { getConfig } from './config.js';
13
+ const program = new Command();
14
+ program
15
+ .name('stateset')
16
+ .description('CLI for managing StateSet Sandbox environments')
17
+ .version('1.0.0');
18
+ // Check for API key
19
+ program.hook('preAction', (thisCommand) => {
20
+ const config = getConfig();
21
+ const subcommand = thisCommand.args[0];
22
+ // Skip auth check for local-only commands
23
+ if (subcommand === 'config' || subcommand === 'deploy')
24
+ return;
25
+ if (!config.apiKey) {
26
+ console.log(chalk.yellow('Warning: No API key configured.'));
27
+ console.log(chalk.gray('Run `stateset config set-key <your-api-key>` to configure.'));
28
+ console.log();
29
+ }
30
+ });
31
+ // Add commands
32
+ program.addCommand(sandboxCommand);
33
+ program.addCommand(checkpointCommand);
34
+ program.addCommand(artifactCommand);
35
+ program.addCommand(poolCommand);
36
+ program.addCommand(tunnelCommand);
37
+ program.addCommand(sessionCommand);
38
+ program.addCommand(configCommand);
39
+ program.addCommand(deployCommand);
40
+ // Global error handler
41
+ program.exitOverride((err) => {
42
+ if (err.code === 'commander.help') {
43
+ process.exit(0);
44
+ }
45
+ console.error(chalk.red(`Error: ${err.message}`));
46
+ process.exit(1);
47
+ });
48
+ // Parse and execute (parseAsync required for async action handlers in commander v14+)
49
+ program.parseAsync();
50
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CAAC,gDAAgD,CAAC;KAC7D,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,oBAAoB;AACpB,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,EAAE;IACxC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAEvC,0CAA0C;IAC1C,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,QAAQ;QAAE,OAAO;IAE/D,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,iCAAiC,CAAC,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC,CAAC;QACtF,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,eAAe;AACf,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;AACtC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAElC,uBAAuB;AACvB,OAAO,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,EAAE;IAC3B,IAAI,GAAG,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;QAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,sFAAsF;AACtF,OAAO,CAAC,UAAU,EAAE,CAAC"}