@agentuity/cli 0.1.8 → 0.1.10
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.
- package/README.md +2 -2
- package/bin/cli.ts +8 -0
- package/dist/cache/index.d.ts +2 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +2 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/resource-region.d.ts +46 -0
- package/dist/cache/resource-region.d.ts.map +1 -0
- package/dist/cache/resource-region.js +115 -0
- package/dist/cache/resource-region.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +44 -18
- package/dist/cli.js.map +1 -1
- package/dist/cmd/ai/capabilities/show.d.ts.map +1 -1
- package/dist/cmd/ai/capabilities/show.js +12 -15
- package/dist/cmd/ai/capabilities/show.js.map +1 -1
- package/dist/cmd/ai/prompt/llm.js +5 -5
- package/dist/cmd/ai/prompt/llm.js.map +1 -1
- package/dist/cmd/ai/skills/generator.d.ts.map +1 -1
- package/dist/cmd/ai/skills/generator.js +9 -1
- package/dist/cmd/ai/skills/generator.js.map +1 -1
- package/dist/cmd/auth/logout.d.ts.map +1 -1
- package/dist/cmd/auth/logout.js +5 -2
- package/dist/cmd/auth/logout.js.map +1 -1
- package/dist/cmd/build/ast.d.ts.map +1 -1
- package/dist/cmd/build/ast.js +87 -1
- package/dist/cmd/build/ast.js.map +1 -1
- package/dist/cmd/build/vite/metadata-generator.js +1 -1
- package/dist/cmd/build/vite/metadata-generator.js.map +1 -1
- package/dist/cmd/build/vite/vite-asset-server-config.d.ts.map +1 -1
- package/dist/cmd/build/vite/vite-asset-server-config.js +8 -3
- package/dist/cmd/build/vite/vite-asset-server-config.js.map +1 -1
- package/dist/cmd/build/vite/vite-asset-server.d.ts.map +1 -1
- package/dist/cmd/build/vite/vite-asset-server.js +5 -3
- package/dist/cmd/build/vite/vite-asset-server.js.map +1 -1
- package/dist/cmd/cloud/db/delete.d.ts.map +1 -1
- package/dist/cmd/cloud/db/delete.js +69 -11
- package/dist/cmd/cloud/db/delete.js.map +1 -1
- package/dist/cmd/cloud/db/get.d.ts.map +1 -1
- package/dist/cmd/cloud/db/get.js +23 -7
- package/dist/cmd/cloud/db/get.js.map +1 -1
- package/dist/cmd/cloud/db/list.d.ts.map +1 -1
- package/dist/cmd/cloud/db/list.js +15 -7
- package/dist/cmd/cloud/db/list.js.map +1 -1
- package/dist/cmd/cloud/db/logs.d.ts.map +1 -1
- package/dist/cmd/cloud/db/logs.js +24 -4
- package/dist/cmd/cloud/db/logs.js.map +1 -1
- package/dist/cmd/cloud/deploy.d.ts.map +1 -1
- package/dist/cmd/cloud/deploy.js +50 -1
- package/dist/cmd/cloud/deploy.js.map +1 -1
- package/dist/cmd/cloud/env/delete.d.ts.map +1 -1
- package/dist/cmd/cloud/env/delete.js +30 -13
- package/dist/cmd/cloud/env/delete.js.map +1 -1
- package/dist/cmd/cloud/env/get.d.ts.map +1 -1
- package/dist/cmd/cloud/env/get.js +27 -30
- package/dist/cmd/cloud/env/get.js.map +1 -1
- package/dist/cmd/cloud/env/import.d.ts.map +1 -1
- package/dist/cmd/cloud/env/import.js +41 -48
- package/dist/cmd/cloud/env/import.js.map +1 -1
- package/dist/cmd/cloud/env/index.d.ts.map +1 -1
- package/dist/cmd/cloud/env/index.js +6 -2
- package/dist/cmd/cloud/env/index.js.map +1 -1
- package/dist/cmd/cloud/env/list.d.ts.map +1 -1
- package/dist/cmd/cloud/env/list.js +51 -28
- package/dist/cmd/cloud/env/list.js.map +1 -1
- package/dist/cmd/cloud/env/pull.d.ts.map +1 -1
- package/dist/cmd/cloud/env/pull.js +3 -3
- package/dist/cmd/cloud/env/pull.js.map +1 -1
- package/dist/cmd/cloud/env/push.d.ts.map +1 -1
- package/dist/cmd/cloud/env/push.js +31 -11
- package/dist/cmd/cloud/env/push.js.map +1 -1
- package/dist/cmd/cloud/env/set.d.ts.map +1 -1
- package/dist/cmd/cloud/env/set.js +41 -26
- package/dist/cmd/cloud/env/set.js.map +1 -1
- package/dist/cmd/cloud/index.d.ts.map +1 -1
- package/dist/cmd/cloud/index.js +0 -2
- package/dist/cmd/cloud/index.js.map +1 -1
- package/dist/cmd/cloud/region-lookup.d.ts +18 -0
- package/dist/cmd/cloud/region-lookup.d.ts.map +1 -0
- package/dist/cmd/cloud/region-lookup.js +64 -0
- package/dist/cmd/cloud/region-lookup.js.map +1 -0
- package/dist/cmd/cloud/sandbox/cp.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/cp.js +5 -3
- package/dist/cmd/cloud/sandbox/cp.js.map +1 -1
- package/dist/cmd/cloud/sandbox/create.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/create.js +54 -2
- package/dist/cmd/cloud/sandbox/create.js.map +1 -1
- package/dist/cmd/cloud/sandbox/delete.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/delete.js +5 -3
- package/dist/cmd/cloud/sandbox/delete.js.map +1 -1
- package/dist/cmd/cloud/sandbox/download.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/download.js +4 -3
- package/dist/cmd/cloud/sandbox/download.js.map +1 -1
- package/dist/cmd/cloud/sandbox/env.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/env.js +4 -3
- package/dist/cmd/cloud/sandbox/env.js.map +1 -1
- package/dist/cmd/cloud/sandbox/exec.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/exec.js +4 -3
- package/dist/cmd/cloud/sandbox/exec.js.map +1 -1
- package/dist/cmd/cloud/sandbox/execution/get.js +4 -4
- package/dist/cmd/cloud/sandbox/execution/get.js.map +1 -1
- package/dist/cmd/cloud/sandbox/execution/index.js +1 -1
- package/dist/cmd/cloud/sandbox/execution/index.js.map +1 -1
- package/dist/cmd/cloud/sandbox/execution/list.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/execution/list.js +4 -3
- package/dist/cmd/cloud/sandbox/execution/list.js.map +1 -1
- package/dist/cmd/cloud/sandbox/get.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/get.js +26 -4
- package/dist/cmd/cloud/sandbox/get.js.map +1 -1
- package/dist/cmd/cloud/sandbox/index.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/index.js +3 -1
- package/dist/cmd/cloud/sandbox/index.js.map +1 -1
- package/dist/cmd/cloud/sandbox/list.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/list.js +16 -9
- package/dist/cmd/cloud/sandbox/list.js.map +1 -1
- package/dist/cmd/cloud/sandbox/ls.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/ls.js +4 -3
- package/dist/cmd/cloud/sandbox/ls.js.map +1 -1
- package/dist/cmd/cloud/sandbox/mkdir.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/mkdir.js +4 -3
- package/dist/cmd/cloud/sandbox/mkdir.js.map +1 -1
- package/dist/cmd/cloud/sandbox/rm.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/rm.js +4 -3
- package/dist/cmd/cloud/sandbox/rm.js.map +1 -1
- package/dist/cmd/cloud/sandbox/rmdir.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/rmdir.js +4 -3
- package/dist/cmd/cloud/sandbox/rmdir.js.map +1 -1
- package/dist/cmd/cloud/sandbox/run.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/run.js +51 -2
- package/dist/cmd/cloud/sandbox/run.js.map +1 -1
- package/dist/cmd/cloud/sandbox/runtime/index.d.ts +3 -0
- package/dist/cmd/cloud/sandbox/runtime/index.d.ts.map +1 -0
- package/dist/cmd/cloud/sandbox/runtime/index.js +19 -0
- package/dist/cmd/cloud/sandbox/runtime/index.js.map +1 -0
- package/dist/cmd/cloud/sandbox/runtime/list.d.ts +3 -0
- package/dist/cmd/cloud/sandbox/runtime/list.d.ts.map +1 -0
- package/dist/cmd/cloud/sandbox/runtime/list.js +68 -0
- package/dist/cmd/cloud/sandbox/runtime/list.js.map +1 -0
- package/dist/cmd/cloud/sandbox/snapshot/create.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/snapshot/create.js +41 -8
- package/dist/cmd/cloud/sandbox/snapshot/create.js.map +1 -1
- package/dist/cmd/cloud/sandbox/snapshot/delete.js +4 -4
- package/dist/cmd/cloud/sandbox/snapshot/delete.js.map +1 -1
- package/dist/cmd/cloud/sandbox/snapshot/get.js +5 -5
- package/dist/cmd/cloud/sandbox/snapshot/get.js.map +1 -1
- package/dist/cmd/cloud/sandbox/snapshot/index.js +1 -1
- package/dist/cmd/cloud/sandbox/snapshot/index.js.map +1 -1
- package/dist/cmd/cloud/sandbox/snapshot/list.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/snapshot/list.js +8 -4
- package/dist/cmd/cloud/sandbox/snapshot/list.js.map +1 -1
- package/dist/cmd/cloud/sandbox/snapshot/tag.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/snapshot/tag.js +14 -4
- package/dist/cmd/cloud/sandbox/snapshot/tag.js.map +1 -1
- package/dist/cmd/cloud/sandbox/upload.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/upload.js +4 -3
- package/dist/cmd/cloud/sandbox/upload.js.map +1 -1
- package/dist/cmd/cloud/sandbox/util.d.ts +13 -0
- package/dist/cmd/cloud/sandbox/util.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/util.js +40 -1
- package/dist/cmd/cloud/sandbox/util.js.map +1 -1
- package/dist/cmd/cloud/scp/download.d.ts.map +1 -1
- package/dist/cmd/cloud/scp/download.js +6 -2
- package/dist/cmd/cloud/scp/download.js.map +1 -1
- package/dist/cmd/cloud/scp/upload.d.ts.map +1 -1
- package/dist/cmd/cloud/scp/upload.js +6 -2
- package/dist/cmd/cloud/scp/upload.js.map +1 -1
- package/dist/cmd/cloud/session/get.js +4 -4
- package/dist/cmd/cloud/session/get.js.map +1 -1
- package/dist/cmd/cloud/session/list.js +4 -4
- package/dist/cmd/cloud/session/list.js.map +1 -1
- package/dist/cmd/cloud/ssh.d.ts.map +1 -1
- package/dist/cmd/cloud/ssh.js +7 -2
- package/dist/cmd/cloud/ssh.js.map +1 -1
- package/dist/cmd/cloud/storage/delete.d.ts.map +1 -1
- package/dist/cmd/cloud/storage/delete.js +46 -10
- package/dist/cmd/cloud/storage/delete.js.map +1 -1
- package/dist/cmd/cloud/storage/download.d.ts.map +1 -1
- package/dist/cmd/cloud/storage/download.js +19 -6
- package/dist/cmd/cloud/storage/download.js.map +1 -1
- package/dist/cmd/cloud/storage/get.d.ts.map +1 -1
- package/dist/cmd/cloud/storage/get.js +19 -6
- package/dist/cmd/cloud/storage/get.js.map +1 -1
- package/dist/cmd/cloud/storage/list.d.ts.map +1 -1
- package/dist/cmd/cloud/storage/list.js +17 -7
- package/dist/cmd/cloud/storage/list.js.map +1 -1
- package/dist/cmd/cloud/storage/upload.d.ts.map +1 -1
- package/dist/cmd/cloud/storage/upload.js +19 -6
- package/dist/cmd/cloud/storage/upload.js.map +1 -1
- package/dist/cmd/cloud/thread/delete.js +4 -4
- package/dist/cmd/cloud/thread/delete.js.map +1 -1
- package/dist/cmd/cloud/thread/get.js +4 -4
- package/dist/cmd/cloud/thread/get.js.map +1 -1
- package/dist/cmd/cloud/thread/list.js +4 -4
- package/dist/cmd/cloud/thread/list.js.map +1 -1
- package/dist/cmd/project/auth/init.d.ts.map +1 -1
- package/dist/cmd/project/auth/init.js +6 -3
- package/dist/cmd/project/auth/init.js.map +1 -1
- package/dist/cmd/project/auth/shared.d.ts +6 -2
- package/dist/cmd/project/auth/shared.d.ts.map +1 -1
- package/dist/cmd/project/auth/shared.js +40 -12
- package/dist/cmd/project/auth/shared.js.map +1 -1
- package/dist/config.d.ts +37 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +61 -8
- package/dist/config.js.map +1 -1
- package/dist/env-util.d.ts +25 -2
- package/dist/env-util.d.ts.map +1 -1
- package/dist/env-util.js +44 -4
- package/dist/env-util.js.map +1 -1
- package/dist/utils/apt-validator.d.ts +20 -0
- package/dist/utils/apt-validator.d.ts.map +1 -0
- package/dist/utils/apt-validator.js +157 -0
- package/dist/utils/apt-validator.js.map +1 -0
- package/package.json +6 -6
- package/src/cache/index.ts +11 -0
- package/src/cache/resource-region.ts +183 -0
- package/src/cli.ts +51 -17
- package/src/cmd/ai/capabilities/show.ts +12 -15
- package/src/cmd/ai/prompt/llm.ts +5 -5
- package/src/cmd/ai/skills/generator.ts +9 -1
- package/src/cmd/auth/logout.ts +5 -2
- package/src/cmd/build/ast.ts +160 -1
- package/src/cmd/build/vite/metadata-generator.ts +1 -1
- package/src/cmd/build/vite/vite-asset-server-config.ts +7 -3
- package/src/cmd/build/vite/vite-asset-server.ts +6 -3
- package/src/cmd/cloud/db/delete.ts +83 -11
- package/src/cmd/cloud/db/get.ts +29 -7
- package/src/cmd/cloud/db/list.ts +16 -7
- package/src/cmd/cloud/db/logs.ts +33 -4
- package/src/cmd/cloud/deploy.ts +63 -0
- package/src/cmd/cloud/env/delete.ts +36 -12
- package/src/cmd/cloud/env/get.ts +28 -27
- package/src/cmd/cloud/env/import.ts +43 -56
- package/src/cmd/cloud/env/index.ts +6 -2
- package/src/cmd/cloud/env/list.ts +57 -30
- package/src/cmd/cloud/env/pull.ts +9 -3
- package/src/cmd/cloud/env/push.ts +44 -11
- package/src/cmd/cloud/env/set.ts +49 -30
- package/src/cmd/cloud/index.ts +0 -2
- package/src/cmd/cloud/region-lookup.ts +89 -0
- package/src/cmd/cloud/sandbox/cp.ts +5 -3
- package/src/cmd/cloud/sandbox/create.ts +61 -2
- package/src/cmd/cloud/sandbox/delete.ts +6 -3
- package/src/cmd/cloud/sandbox/download.ts +4 -3
- package/src/cmd/cloud/sandbox/env.ts +4 -3
- package/src/cmd/cloud/sandbox/exec.ts +4 -3
- package/src/cmd/cloud/sandbox/execution/get.ts +4 -4
- package/src/cmd/cloud/sandbox/execution/index.ts +1 -1
- package/src/cmd/cloud/sandbox/execution/list.ts +4 -3
- package/src/cmd/cloud/sandbox/get.ts +27 -4
- package/src/cmd/cloud/sandbox/index.ts +3 -1
- package/src/cmd/cloud/sandbox/list.ts +16 -9
- package/src/cmd/cloud/sandbox/ls.ts +4 -3
- package/src/cmd/cloud/sandbox/mkdir.ts +4 -3
- package/src/cmd/cloud/sandbox/rm.ts +4 -3
- package/src/cmd/cloud/sandbox/rmdir.ts +4 -3
- package/src/cmd/cloud/sandbox/run.ts +58 -2
- package/src/cmd/cloud/sandbox/runtime/index.ts +20 -0
- package/src/cmd/cloud/sandbox/runtime/list.ts +75 -0
- package/src/cmd/cloud/sandbox/snapshot/create.ts +53 -8
- package/src/cmd/cloud/sandbox/snapshot/delete.ts +4 -4
- package/src/cmd/cloud/sandbox/snapshot/get.ts +5 -5
- package/src/cmd/cloud/sandbox/snapshot/index.ts +1 -1
- package/src/cmd/cloud/sandbox/snapshot/list.ts +8 -4
- package/src/cmd/cloud/sandbox/snapshot/tag.ts +20 -4
- package/src/cmd/cloud/sandbox/upload.ts +4 -3
- package/src/cmd/cloud/sandbox/util.ts +60 -1
- package/src/cmd/cloud/scp/download.ts +14 -2
- package/src/cmd/cloud/scp/upload.ts +14 -2
- package/src/cmd/cloud/session/get.ts +4 -4
- package/src/cmd/cloud/session/list.ts +4 -4
- package/src/cmd/cloud/ssh.ts +15 -2
- package/src/cmd/cloud/storage/delete.ts +61 -10
- package/src/cmd/cloud/storage/download.ts +31 -6
- package/src/cmd/cloud/storage/get.ts +31 -6
- package/src/cmd/cloud/storage/list.ts +18 -7
- package/src/cmd/cloud/storage/upload.ts +31 -6
- package/src/cmd/cloud/thread/delete.ts +4 -4
- package/src/cmd/cloud/thread/get.ts +4 -4
- package/src/cmd/cloud/thread/list.ts +4 -4
- package/src/cmd/project/auth/init.ts +7 -3
- package/src/cmd/project/auth/shared.ts +52 -13
- package/src/config.ts +74 -8
- package/src/env-util.ts +50 -5
- package/src/utils/apt-validator.ts +215 -0
- package/dist/cmd/cloud/secret/delete.d.ts +0 -2
- package/dist/cmd/cloud/secret/delete.d.ts.map +0 -1
- package/dist/cmd/cloud/secret/delete.js +0 -53
- package/dist/cmd/cloud/secret/delete.js.map +0 -1
- package/dist/cmd/cloud/secret/get.d.ts +0 -2
- package/dist/cmd/cloud/secret/get.d.ts.map +0 -1
- package/dist/cmd/cloud/secret/get.js +0 -73
- package/dist/cmd/cloud/secret/get.js.map +0 -1
- package/dist/cmd/cloud/secret/import.d.ts +0 -2
- package/dist/cmd/cloud/secret/import.d.ts.map +0 -1
- package/dist/cmd/cloud/secret/import.js +0 -91
- package/dist/cmd/cloud/secret/import.js.map +0 -1
- package/dist/cmd/cloud/secret/index.d.ts +0 -3
- package/dist/cmd/cloud/secret/index.d.ts.map +0 -1
- package/dist/cmd/cloud/secret/index.js +0 -33
- package/dist/cmd/cloud/secret/index.js.map +0 -1
- package/dist/cmd/cloud/secret/list.d.ts +0 -2
- package/dist/cmd/cloud/secret/list.d.ts.map +0 -1
- package/dist/cmd/cloud/secret/list.js +0 -65
- package/dist/cmd/cloud/secret/list.js.map +0 -1
- package/dist/cmd/cloud/secret/pull.d.ts +0 -2
- package/dist/cmd/cloud/secret/pull.d.ts.map +0 -1
- package/dist/cmd/cloud/secret/pull.js +0 -82
- package/dist/cmd/cloud/secret/pull.js.map +0 -1
- package/dist/cmd/cloud/secret/push.d.ts +0 -2
- package/dist/cmd/cloud/secret/push.d.ts.map +0 -1
- package/dist/cmd/cloud/secret/push.js +0 -61
- package/dist/cmd/cloud/secret/push.js.map +0 -1
- package/dist/cmd/cloud/secret/set.d.ts +0 -2
- package/dist/cmd/cloud/secret/set.d.ts.map +0 -1
- package/dist/cmd/cloud/secret/set.js +0 -63
- package/dist/cmd/cloud/secret/set.js.map +0 -1
- package/src/cmd/cloud/secret/delete.ts +0 -65
- package/src/cmd/cloud/secret/get.ts +0 -77
- package/src/cmd/cloud/secret/import.ts +0 -110
- package/src/cmd/cloud/secret/index.ts +0 -33
- package/src/cmd/cloud/secret/list.ts +0 -70
- package/src/cmd/cloud/secret/pull.ts +0 -92
- package/src/cmd/cloud/secret/push.ts +0 -69
- package/src/cmd/cloud/secret/set.ts +0 -76
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { createCommand } from '../../../../types';
|
|
3
3
|
import * as tui from '../../../../tui';
|
|
4
|
-
import { createSandboxClient } from '../util';
|
|
4
|
+
import { getSandboxRegion, createSandboxClient } from '../util';
|
|
5
5
|
import { getCommand } from '../../../../command-prefix';
|
|
6
6
|
import { executionList } from '@agentuity/server';
|
|
7
7
|
|
|
@@ -25,7 +25,7 @@ export const listSubcommand = createCommand({
|
|
|
25
25
|
aliases: ['ls'],
|
|
26
26
|
description: 'List executions for a sandbox',
|
|
27
27
|
tags: ['read-only', 'fast', 'requires-auth'],
|
|
28
|
-
requires: { auth: true,
|
|
28
|
+
requires: { auth: true, org: true },
|
|
29
29
|
idempotent: true,
|
|
30
30
|
examples: [
|
|
31
31
|
{
|
|
@@ -48,7 +48,8 @@ export const listSubcommand = createCommand({
|
|
|
48
48
|
},
|
|
49
49
|
|
|
50
50
|
async handler(ctx) {
|
|
51
|
-
const { args, opts, options, auth,
|
|
51
|
+
const { args, opts, options, auth, logger, orgId, config } = ctx;
|
|
52
|
+
const region = await getSandboxRegion(logger, auth, config?.name, args.sandboxId, orgId);
|
|
52
53
|
const client = createSandboxClient(logger, auth, region);
|
|
53
54
|
|
|
54
55
|
const result = await executionList(client, {
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { createCommand } from '../../../types';
|
|
3
3
|
import * as tui from '../../../tui';
|
|
4
|
-
import {
|
|
4
|
+
import { cacheSandboxRegion } from './util';
|
|
5
5
|
import { getCommand } from '../../../command-prefix';
|
|
6
6
|
import { sandboxGet } from '@agentuity/server';
|
|
7
|
+
import { getGlobalCatalystAPIClient } from '../../../config';
|
|
7
8
|
|
|
8
9
|
const SandboxResourcesSchema = z.object({
|
|
9
10
|
memory: z.string().optional().describe('Memory limit (e.g., "512Mi", "1Gi")'),
|
|
@@ -13,9 +14,13 @@ const SandboxResourcesSchema = z.object({
|
|
|
13
14
|
|
|
14
15
|
const SandboxGetResponseSchema = z.object({
|
|
15
16
|
sandboxId: z.string().describe('Sandbox ID'),
|
|
17
|
+
name: z.string().optional().describe('Sandbox name'),
|
|
18
|
+
description: z.string().optional().describe('Sandbox description'),
|
|
16
19
|
status: z.string().describe('Current status'),
|
|
17
20
|
createdAt: z.string().describe('Creation timestamp'),
|
|
18
21
|
region: z.string().optional().describe('Region where sandbox is running'),
|
|
22
|
+
runtimeId: z.string().optional().describe('Runtime ID'),
|
|
23
|
+
runtimeName: z.string().optional().describe('Runtime name'),
|
|
19
24
|
snapshotId: z.string().optional().describe('Snapshot ID sandbox was created from'),
|
|
20
25
|
snapshotTag: z.string().optional().describe('Snapshot tag sandbox was created from'),
|
|
21
26
|
executions: z.number().describe('Number of executions'),
|
|
@@ -31,7 +36,7 @@ export const getSubcommand = createCommand({
|
|
|
31
36
|
aliases: ['info', 'show'],
|
|
32
37
|
description: 'Get information about a sandbox',
|
|
33
38
|
tags: ['read-only', 'fast', 'requires-auth'],
|
|
34
|
-
requires: { auth: true,
|
|
39
|
+
requires: { auth: true, org: true },
|
|
35
40
|
idempotent: true,
|
|
36
41
|
examples: [
|
|
37
42
|
{
|
|
@@ -47,11 +52,16 @@ export const getSubcommand = createCommand({
|
|
|
47
52
|
},
|
|
48
53
|
|
|
49
54
|
async handler(ctx) {
|
|
50
|
-
const { args, options, auth,
|
|
51
|
-
const client =
|
|
55
|
+
const { args, options, auth, logger, orgId, config } = ctx;
|
|
56
|
+
const client = await getGlobalCatalystAPIClient(logger, auth, config?.name);
|
|
52
57
|
|
|
53
58
|
const result = await sandboxGet(client, { sandboxId: args.sandboxId, orgId });
|
|
54
59
|
|
|
60
|
+
// Cache the region for future lookups
|
|
61
|
+
if (result.region) {
|
|
62
|
+
await cacheSandboxRegion(config?.name, args.sandboxId, result.region);
|
|
63
|
+
}
|
|
64
|
+
|
|
55
65
|
if (!options.json) {
|
|
56
66
|
const statusColor =
|
|
57
67
|
result.status === 'running'
|
|
@@ -63,8 +73,17 @@ export const getSubcommand = createCommand({
|
|
|
63
73
|
: tui.colorMuted;
|
|
64
74
|
|
|
65
75
|
console.log(`${tui.muted('Sandbox:')} ${tui.bold(result.sandboxId)}`);
|
|
76
|
+
if (result.name) {
|
|
77
|
+
console.log(`${tui.muted('Name:')} ${result.name}`);
|
|
78
|
+
}
|
|
79
|
+
if (result.description) {
|
|
80
|
+
console.log(`${tui.muted('Description:')} ${result.description}`);
|
|
81
|
+
}
|
|
66
82
|
console.log(`${tui.muted('Status:')} ${statusColor(result.status)}`);
|
|
67
83
|
console.log(`${tui.muted('Created:')} ${result.createdAt}`);
|
|
84
|
+
if (result.runtimeName) {
|
|
85
|
+
console.log(`${tui.muted('Runtime:')} ${result.runtimeName}`);
|
|
86
|
+
}
|
|
68
87
|
if (result.region) {
|
|
69
88
|
console.log(`${tui.muted('Region:')} ${result.region}`);
|
|
70
89
|
}
|
|
@@ -108,9 +127,13 @@ export const getSubcommand = createCommand({
|
|
|
108
127
|
|
|
109
128
|
return {
|
|
110
129
|
sandboxId: result.sandboxId,
|
|
130
|
+
name: result.name,
|
|
131
|
+
description: result.description,
|
|
111
132
|
status: result.status,
|
|
112
133
|
createdAt: result.createdAt,
|
|
113
134
|
region: result.region,
|
|
135
|
+
runtimeId: result.runtimeId,
|
|
136
|
+
runtimeName: result.runtimeName,
|
|
114
137
|
snapshotId: result.snapshotId,
|
|
115
138
|
snapshotTag: result.snapshotTag,
|
|
116
139
|
executions: result.executions,
|
|
@@ -6,6 +6,7 @@ import { listSubcommand } from './list';
|
|
|
6
6
|
import { getSubcommand } from './get';
|
|
7
7
|
import { deleteSubcommand } from './delete';
|
|
8
8
|
import { snapshotCommand } from './snapshot';
|
|
9
|
+
import { runtimeCommand } from './runtime';
|
|
9
10
|
import { cpSubcommand } from './cp';
|
|
10
11
|
import { command as executionCommand } from './execution';
|
|
11
12
|
import { mkdirSubcommand } from './mkdir';
|
|
@@ -44,6 +45,7 @@ export const command = createCommand({
|
|
|
44
45
|
getSubcommand,
|
|
45
46
|
deleteSubcommand,
|
|
46
47
|
snapshotCommand,
|
|
48
|
+
runtimeCommand,
|
|
47
49
|
cpSubcommand,
|
|
48
50
|
executionCommand,
|
|
49
51
|
mkdirSubcommand,
|
|
@@ -54,7 +56,7 @@ export const command = createCommand({
|
|
|
54
56
|
uploadSubcommand,
|
|
55
57
|
envSubcommand,
|
|
56
58
|
],
|
|
57
|
-
requires: { auth: true,
|
|
59
|
+
requires: { auth: true, org: true },
|
|
58
60
|
});
|
|
59
61
|
|
|
60
62
|
export default command;
|
|
@@ -3,14 +3,18 @@ import { createCommand } from '../../../types';
|
|
|
3
3
|
import * as tui from '../../../tui';
|
|
4
4
|
import { getCommand } from '../../../command-prefix';
|
|
5
5
|
import { sandboxList } from '@agentuity/server';
|
|
6
|
-
import {
|
|
6
|
+
import { getGlobalCatalystAPIClient } from '../../../config';
|
|
7
7
|
import type { SandboxStatus } from '@agentuity/core';
|
|
8
8
|
|
|
9
9
|
const SandboxInfoSchema = z.object({
|
|
10
10
|
sandboxId: z.string().describe('Sandbox ID'),
|
|
11
|
+
name: z.string().optional().describe('Sandbox name'),
|
|
12
|
+
description: z.string().optional().describe('Sandbox description'),
|
|
11
13
|
status: z.string().describe('Current status'),
|
|
12
14
|
createdAt: z.string().describe('Creation timestamp'),
|
|
13
15
|
region: z.string().optional().describe('Region where sandbox is running'),
|
|
16
|
+
runtimeId: z.string().optional().describe('Runtime ID'),
|
|
17
|
+
runtimeName: z.string().optional().describe('Runtime name'),
|
|
14
18
|
snapshotId: z.string().optional().describe('Snapshot ID sandbox was created from'),
|
|
15
19
|
snapshotTag: z.string().optional().describe('Snapshot tag sandbox was created from'),
|
|
16
20
|
executions: z.number().describe('Number of executions'),
|
|
@@ -26,7 +30,7 @@ export const listSubcommand = createCommand({
|
|
|
26
30
|
aliases: ['ls'],
|
|
27
31
|
description: 'List sandboxes with optional filtering',
|
|
28
32
|
tags: ['read-only', 'slow', 'requires-auth'],
|
|
29
|
-
requires: { auth: true,
|
|
33
|
+
requires: { auth: true, org: true },
|
|
30
34
|
optional: { project: true },
|
|
31
35
|
idempotent: true,
|
|
32
36
|
pagination: {
|
|
@@ -70,8 +74,8 @@ export const listSubcommand = createCommand({
|
|
|
70
74
|
},
|
|
71
75
|
|
|
72
76
|
async handler(ctx) {
|
|
73
|
-
const { opts, options, auth, project,
|
|
74
|
-
const client =
|
|
77
|
+
const { opts, options, auth, project, logger, orgId, config } = ctx;
|
|
78
|
+
const client = await getGlobalCatalystAPIClient(logger, auth, config?.name);
|
|
75
79
|
|
|
76
80
|
const projectId = opts.projectId || project?.projectId;
|
|
77
81
|
|
|
@@ -88,22 +92,21 @@ export const listSubcommand = createCommand({
|
|
|
88
92
|
tui.info('No sandboxes found');
|
|
89
93
|
} else {
|
|
90
94
|
const tableData = result.sandboxes.map((sandbox) => {
|
|
91
|
-
const snapshotDisplay = sandbox.snapshotTag
|
|
92
|
-
? `${sandbox.snapshotTag} (${sandbox.snapshotId})`
|
|
93
|
-
: sandbox.snapshotId || '-';
|
|
94
95
|
return {
|
|
95
96
|
ID: sandbox.sandboxId,
|
|
97
|
+
Name: sandbox.name || '-',
|
|
98
|
+
Runtime: sandbox.runtimeName || '-',
|
|
96
99
|
Status: sandbox.status,
|
|
97
100
|
'Created At': sandbox.createdAt,
|
|
98
|
-
Snapshot: snapshotDisplay,
|
|
99
101
|
Executions: sandbox.executions,
|
|
100
102
|
};
|
|
101
103
|
});
|
|
102
104
|
tui.table(tableData, [
|
|
103
105
|
{ name: 'ID', alignment: 'left' },
|
|
106
|
+
{ name: 'Name', alignment: 'left' },
|
|
107
|
+
{ name: 'Runtime', alignment: 'left' },
|
|
104
108
|
{ name: 'Status', alignment: 'left' },
|
|
105
109
|
{ name: 'Created At', alignment: 'left' },
|
|
106
|
-
{ name: 'Snapshot', alignment: 'left' },
|
|
107
110
|
{ name: 'Executions', alignment: 'right' },
|
|
108
111
|
]);
|
|
109
112
|
|
|
@@ -114,9 +117,13 @@ export const listSubcommand = createCommand({
|
|
|
114
117
|
return {
|
|
115
118
|
sandboxes: result.sandboxes.map((s) => ({
|
|
116
119
|
sandboxId: s.sandboxId,
|
|
120
|
+
name: s.name,
|
|
121
|
+
description: s.description,
|
|
117
122
|
status: s.status,
|
|
118
123
|
createdAt: s.createdAt,
|
|
119
124
|
region: s.region,
|
|
125
|
+
runtimeId: s.runtimeId,
|
|
126
|
+
runtimeName: s.runtimeName,
|
|
120
127
|
snapshotId: s.snapshotId,
|
|
121
128
|
snapshotTag: s.snapshotTag,
|
|
122
129
|
executions: s.executions,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { createCommand } from '../../../types';
|
|
3
3
|
import * as tui from '../../../tui';
|
|
4
|
-
import { createSandboxClient } from './util';
|
|
4
|
+
import { getSandboxRegion, createSandboxClient } from './util';
|
|
5
5
|
import { getCommand } from '../../../command-prefix';
|
|
6
6
|
import { sandboxListFiles } from '@agentuity/server';
|
|
7
7
|
|
|
@@ -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,
|
|
26
|
+
requires: { auth: true, org: true },
|
|
27
27
|
examples: [
|
|
28
28
|
{
|
|
29
29
|
command: getCommand('cloud sandbox files sbx_abc123'),
|
|
@@ -61,7 +61,8 @@ export const lsSubcommand = createCommand({
|
|
|
61
61
|
},
|
|
62
62
|
|
|
63
63
|
async handler(ctx) {
|
|
64
|
-
const { args, opts, options, auth,
|
|
64
|
+
const { args, opts, options, auth, config, logger, orgId } = ctx;
|
|
65
|
+
const region = await getSandboxRegion(logger, auth, config?.name, args.sandboxId, orgId);
|
|
65
66
|
const client = createSandboxClient(logger, auth, region);
|
|
66
67
|
|
|
67
68
|
const result = await sandboxListFiles(client, {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { createCommand } from '../../../types';
|
|
3
3
|
import * as tui from '../../../tui';
|
|
4
|
-
import { createSandboxClient } from './util';
|
|
4
|
+
import { createSandboxClient, getSandboxRegion } from './util';
|
|
5
5
|
import { getCommand } from '../../../command-prefix';
|
|
6
6
|
import { sandboxMkDir } from '@agentuity/server';
|
|
7
7
|
|
|
@@ -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,
|
|
17
|
+
requires: { auth: true, org: true },
|
|
18
18
|
examples: [
|
|
19
19
|
{
|
|
20
20
|
command: getCommand('cloud sandbox mkdir sbx_abc123 /path/to/dir'),
|
|
@@ -44,7 +44,8 @@ export const mkdirSubcommand = createCommand({
|
|
|
44
44
|
},
|
|
45
45
|
|
|
46
46
|
async handler(ctx) {
|
|
47
|
-
const { args, opts, options, auth,
|
|
47
|
+
const { args, opts, options, auth, logger, orgId, config } = ctx;
|
|
48
|
+
const region = await getSandboxRegion(logger, auth, config?.name, args.sandboxId, orgId);
|
|
48
49
|
const client = createSandboxClient(logger, auth, region);
|
|
49
50
|
|
|
50
51
|
await sandboxMkDir(client, {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { createCommand } from '../../../types';
|
|
3
3
|
import * as tui from '../../../tui';
|
|
4
|
-
import { createSandboxClient } from './util';
|
|
4
|
+
import { getSandboxRegion, createSandboxClient } from './util';
|
|
5
5
|
import { getCommand } from '../../../command-prefix';
|
|
6
6
|
import { sandboxRmFile } from '@agentuity/server';
|
|
7
7
|
|
|
@@ -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,
|
|
17
|
+
requires: { auth: true, org: true },
|
|
18
18
|
examples: [
|
|
19
19
|
{
|
|
20
20
|
command: getCommand('cloud sandbox rm sbx_abc123 /path/to/file.txt'),
|
|
@@ -31,7 +31,8 @@ export const rmSubcommand = createCommand({
|
|
|
31
31
|
},
|
|
32
32
|
|
|
33
33
|
async handler(ctx) {
|
|
34
|
-
const { args, options, auth,
|
|
34
|
+
const { args, options, auth, logger, orgId, config } = ctx;
|
|
35
|
+
const region = await getSandboxRegion(logger, auth, config?.name, args.sandboxId, orgId);
|
|
35
36
|
const client = createSandboxClient(logger, auth, region);
|
|
36
37
|
|
|
37
38
|
await sandboxRmFile(client, {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { createCommand } from '../../../types';
|
|
3
3
|
import * as tui from '../../../tui';
|
|
4
|
-
import { createSandboxClient } from './util';
|
|
4
|
+
import { createSandboxClient, getSandboxRegion } from './util';
|
|
5
5
|
import { getCommand } from '../../../command-prefix';
|
|
6
6
|
import { sandboxRmDir } from '@agentuity/server';
|
|
7
7
|
|
|
@@ -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,
|
|
17
|
+
requires: { auth: true, org: true },
|
|
18
18
|
examples: [
|
|
19
19
|
{
|
|
20
20
|
command: getCommand('cloud sandbox rmdir sbx_abc123 /path/to/dir'),
|
|
@@ -44,7 +44,8 @@ export const rmdirSubcommand = createCommand({
|
|
|
44
44
|
},
|
|
45
45
|
|
|
46
46
|
async handler(ctx) {
|
|
47
|
-
const { args, opts, options, auth,
|
|
47
|
+
const { args, opts, options, auth, logger, orgId, config } = ctx;
|
|
48
|
+
const region = await getSandboxRegion(logger, auth, config?.name, args.sandboxId, orgId);
|
|
48
49
|
const client = createSandboxClient(logger, auth, region);
|
|
49
50
|
|
|
50
51
|
await sandboxRmDir(client, {
|
|
@@ -2,9 +2,11 @@ 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 { createSandboxClient, parseFileArgs } from './util';
|
|
5
|
+
import { createSandboxClient, parseFileArgs, cacheSandboxRegion } from './util';
|
|
6
6
|
import { getCommand } from '../../../command-prefix';
|
|
7
7
|
import { sandboxRun } from '@agentuity/server';
|
|
8
|
+
import { validateAptDependencies } from '../../../utils/apt-validator';
|
|
9
|
+
import { ErrorCode } from '../../../errors';
|
|
8
10
|
|
|
9
11
|
const SandboxRunResponseSchema = z.object({
|
|
10
12
|
sandboxId: z.string().describe('Sandbox ID'),
|
|
@@ -37,6 +39,10 @@ export const runSubcommand = createCommand({
|
|
|
37
39
|
command: z.array(z.string()).describe('Command and arguments to execute'),
|
|
38
40
|
}),
|
|
39
41
|
options: z.object({
|
|
42
|
+
runtime: z.string().optional().describe('Runtime name (e.g., "bun:1", "python:3.14")'),
|
|
43
|
+
runtimeId: z.string().optional().describe('Runtime ID (e.g., "srt_xxx")'),
|
|
44
|
+
name: z.string().optional().describe('Sandbox name'),
|
|
45
|
+
description: z.string().optional().describe('Sandbox description'),
|
|
40
46
|
memory: z.string().optional().describe('Memory limit (e.g., "500Mi", "1Gi")'),
|
|
41
47
|
cpu: z.string().optional().describe('CPU limit in millicores (e.g., "500m", "1000m")'),
|
|
42
48
|
disk: z.string().optional().describe('Disk limit (e.g., "500Mi", "1Gi")'),
|
|
@@ -62,10 +68,53 @@ export const runSubcommand = createCommand({
|
|
|
62
68
|
},
|
|
63
69
|
|
|
64
70
|
async handler(ctx) {
|
|
65
|
-
const { args, opts, options, auth, region, logger, orgId } = ctx;
|
|
71
|
+
const { args, opts, options, auth, region, config, logger, orgId } = ctx;
|
|
66
72
|
const client = createSandboxClient(logger, auth, region);
|
|
67
73
|
const started = Date.now();
|
|
68
74
|
|
|
75
|
+
// Validate apt dependencies before running sandbox
|
|
76
|
+
if (opts.dependency && opts.dependency.length > 0) {
|
|
77
|
+
const aptValidation = await tui.spinner({
|
|
78
|
+
message: 'Validating apt dependencies...',
|
|
79
|
+
type: 'simple',
|
|
80
|
+
callback: async () => {
|
|
81
|
+
return await validateAptDependencies(opts.dependency!, region, config, logger);
|
|
82
|
+
},
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
if (aptValidation.invalid.length > 0) {
|
|
86
|
+
if (options.json) {
|
|
87
|
+
return {
|
|
88
|
+
sandboxId: '',
|
|
89
|
+
exitCode: 1,
|
|
90
|
+
durationMs: 0,
|
|
91
|
+
errors: aptValidation.invalid.map((pkg) => ({
|
|
92
|
+
type: 'invalid-apt-dependency',
|
|
93
|
+
package: pkg.package,
|
|
94
|
+
error: pkg.error,
|
|
95
|
+
searchUrl: pkg.searchUrl,
|
|
96
|
+
availableVersions: pkg.availableVersions,
|
|
97
|
+
})),
|
|
98
|
+
} as never;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
tui.error('Invalid apt dependencies:');
|
|
102
|
+
tui.newline();
|
|
103
|
+
for (const pkg of aptValidation.invalid) {
|
|
104
|
+
tui.bullet(`${tui.bold(pkg.package)}: ${pkg.error}`);
|
|
105
|
+
if (pkg.availableVersions && pkg.availableVersions.length > 0) {
|
|
106
|
+
tui.muted(` Available versions: ${pkg.availableVersions.join(', ')}`);
|
|
107
|
+
}
|
|
108
|
+
tui.muted(` Search: ${tui.link(pkg.searchUrl)}`);
|
|
109
|
+
}
|
|
110
|
+
tui.newline();
|
|
111
|
+
tui.fatal(
|
|
112
|
+
'Fix the apt dependencies and try again. Search for valid packages at: https://packages.debian.org/stable/',
|
|
113
|
+
ErrorCode.CONFIG_INVALID
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
69
118
|
const envMap: Record<string, string> = {};
|
|
70
119
|
if (opts.env) {
|
|
71
120
|
for (const e of opts.env) {
|
|
@@ -102,6 +151,10 @@ export const runSubcommand = createCommand({
|
|
|
102
151
|
try {
|
|
103
152
|
const result = await sandboxRun(client, {
|
|
104
153
|
options: {
|
|
154
|
+
runtime: opts.runtime,
|
|
155
|
+
runtimeId: opts.runtimeId,
|
|
156
|
+
name: opts.name,
|
|
157
|
+
description: opts.description,
|
|
105
158
|
command: {
|
|
106
159
|
exec: args.command,
|
|
107
160
|
files: hasFiles ? files : undefined,
|
|
@@ -131,6 +184,9 @@ export const runSubcommand = createCommand({
|
|
|
131
184
|
logger,
|
|
132
185
|
});
|
|
133
186
|
|
|
187
|
+
// Cache the region for future lookups (sandbox is destroyed after run but cache helps with lookups during execution)
|
|
188
|
+
await cacheSandboxRegion(config?.name, result.sandboxId, region);
|
|
189
|
+
|
|
134
190
|
const duration = Date.now() - started;
|
|
135
191
|
const output = outputChunks.join('');
|
|
136
192
|
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { createCommand } from '../../../../types';
|
|
2
|
+
import { listSubcommand } from './list';
|
|
3
|
+
import { getCommand } from '../../../../command-prefix';
|
|
4
|
+
|
|
5
|
+
export const runtimeCommand = createCommand({
|
|
6
|
+
name: 'runtime',
|
|
7
|
+
aliases: ['rt'],
|
|
8
|
+
description: 'Manage sandbox runtimes',
|
|
9
|
+
tags: ['slow', 'requires-auth'],
|
|
10
|
+
examples: [
|
|
11
|
+
{
|
|
12
|
+
command: getCommand('cloud sandbox runtime list'),
|
|
13
|
+
description: 'List all available runtimes',
|
|
14
|
+
},
|
|
15
|
+
],
|
|
16
|
+
subcommands: [listSubcommand],
|
|
17
|
+
requires: { auth: true, org: true },
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
export default runtimeCommand;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { createCommand } from '../../../../types';
|
|
3
|
+
import * as tui from '../../../../tui';
|
|
4
|
+
import { getCommand } from '../../../../command-prefix';
|
|
5
|
+
import { runtimeList } from '@agentuity/server';
|
|
6
|
+
import { getGlobalCatalystAPIClient } from '../../../../config';
|
|
7
|
+
|
|
8
|
+
const RuntimeInfoSchema = z.object({
|
|
9
|
+
id: z.string().describe('Runtime ID'),
|
|
10
|
+
name: z.string().describe('Runtime name'),
|
|
11
|
+
description: z.string().optional().describe('Runtime description'),
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
const RuntimeListResponseSchema = z.object({
|
|
15
|
+
runtimes: z.array(RuntimeInfoSchema).describe('List of runtimes'),
|
|
16
|
+
total: z.number().describe('Total number of runtimes'),
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
export const listSubcommand = createCommand({
|
|
20
|
+
name: 'list',
|
|
21
|
+
aliases: ['ls'],
|
|
22
|
+
description: 'List available sandbox runtimes',
|
|
23
|
+
tags: ['read-only', 'slow', 'requires-auth'],
|
|
24
|
+
requires: { auth: true, org: true },
|
|
25
|
+
idempotent: true,
|
|
26
|
+
examples: [
|
|
27
|
+
{
|
|
28
|
+
command: getCommand('cloud sandbox runtime list'),
|
|
29
|
+
description: 'List all available runtimes',
|
|
30
|
+
},
|
|
31
|
+
],
|
|
32
|
+
schema: {
|
|
33
|
+
options: z.object({
|
|
34
|
+
limit: z.number().optional().describe('Maximum number of results'),
|
|
35
|
+
offset: z.number().optional().describe('Offset for pagination'),
|
|
36
|
+
}),
|
|
37
|
+
response: RuntimeListResponseSchema,
|
|
38
|
+
},
|
|
39
|
+
|
|
40
|
+
async handler(ctx) {
|
|
41
|
+
const { opts, options, auth, logger, orgId, config } = ctx;
|
|
42
|
+
const client = await getGlobalCatalystAPIClient(logger, auth, config?.name);
|
|
43
|
+
|
|
44
|
+
const result = await runtimeList(client, {
|
|
45
|
+
orgId,
|
|
46
|
+
limit: opts.limit,
|
|
47
|
+
offset: opts.offset,
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
if (!options.json) {
|
|
51
|
+
if (result.runtimes.length === 0) {
|
|
52
|
+
tui.info('No runtimes available');
|
|
53
|
+
} else {
|
|
54
|
+
const tableData = result.runtimes.map((runtime) => {
|
|
55
|
+
return {
|
|
56
|
+
ID: runtime.id,
|
|
57
|
+
Name: runtime.name,
|
|
58
|
+
Description: runtime.description ?? '-',
|
|
59
|
+
};
|
|
60
|
+
});
|
|
61
|
+
tui.table(tableData, [
|
|
62
|
+
{ name: 'ID', alignment: 'left' },
|
|
63
|
+
{ name: 'Name', alignment: 'left' },
|
|
64
|
+
{ name: 'Description', alignment: 'left' },
|
|
65
|
+
]);
|
|
66
|
+
|
|
67
|
+
tui.info(`Total: ${result.total} ${tui.plural(result.total, 'runtime', 'runtimes')}`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return result;
|
|
72
|
+
},
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
export default listSubcommand;
|
|
@@ -1,13 +1,19 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { createCommand } from '../../../../types';
|
|
3
3
|
import * as tui from '../../../../tui';
|
|
4
|
-
import { createSandboxClient } from '../util';
|
|
4
|
+
import { getSandboxRegion, createSandboxClient } from '../util';
|
|
5
5
|
import { getCommand } from '../../../../command-prefix';
|
|
6
6
|
import { snapshotCreate } from '@agentuity/server';
|
|
7
7
|
|
|
8
|
+
const SNAPSHOT_NAME_REGEX = /^[a-zA-Z0-9_-]+$/;
|
|
9
|
+
const SNAPSHOT_TAG_REGEX = /^[a-zA-Z0-9][a-zA-Z0-9._-]*$/;
|
|
10
|
+
const MAX_SNAPSHOT_TAG_LENGTH = 128;
|
|
11
|
+
|
|
8
12
|
const SnapshotCreateResponseSchema = z.object({
|
|
9
13
|
snapshotId: z.string().describe('Snapshot ID'),
|
|
10
|
-
|
|
14
|
+
name: z.string().describe('Snapshot display name'),
|
|
15
|
+
description: z.string().optional().nullable().describe('Snapshot description'),
|
|
16
|
+
tag: z.string().optional().nullable().describe('Snapshot tag (defaults to "latest")'),
|
|
11
17
|
sizeBytes: z.number().describe('Snapshot size in bytes'),
|
|
12
18
|
fileCount: z.number().describe('Number of files in snapshot'),
|
|
13
19
|
createdAt: z.string().describe('Snapshot creation timestamp'),
|
|
@@ -17,7 +23,7 @@ export const createSubcommand = createCommand({
|
|
|
17
23
|
name: 'create',
|
|
18
24
|
description: 'Create a snapshot from a sandbox',
|
|
19
25
|
tags: ['slow', 'requires-auth'],
|
|
20
|
-
requires: { auth: true,
|
|
26
|
+
requires: { auth: true, org: true },
|
|
21
27
|
examples: [
|
|
22
28
|
{
|
|
23
29
|
command: getCommand('cloud sandbox snapshot create sbx_abc123'),
|
|
@@ -27,37 +33,76 @@ export const createSubcommand = createCommand({
|
|
|
27
33
|
command: getCommand('cloud sandbox snapshot create sbx_abc123 --tag latest'),
|
|
28
34
|
description: 'Create a tagged snapshot',
|
|
29
35
|
},
|
|
36
|
+
{
|
|
37
|
+
command: getCommand(
|
|
38
|
+
'cloud sandbox snapshot create sbx_abc123 --name "My Snapshot" --description "Initial setup"'
|
|
39
|
+
),
|
|
40
|
+
description: 'Create a named snapshot with description',
|
|
41
|
+
},
|
|
30
42
|
],
|
|
31
43
|
schema: {
|
|
32
44
|
args: z.object({
|
|
33
45
|
sandboxId: z.string().describe('Sandbox ID to snapshot'),
|
|
34
46
|
}),
|
|
35
47
|
options: z.object({
|
|
36
|
-
|
|
48
|
+
name: z
|
|
49
|
+
.string()
|
|
50
|
+
.optional()
|
|
51
|
+
.describe('Display name for the snapshot (letters, numbers, underscores, dashes only)'),
|
|
52
|
+
description: z.string().optional().describe('Description of the snapshot'),
|
|
53
|
+
tag: z.string().optional().describe('Tag for the snapshot (defaults to "latest")'),
|
|
37
54
|
}),
|
|
38
55
|
response: SnapshotCreateResponseSchema,
|
|
39
56
|
},
|
|
40
57
|
|
|
41
58
|
async handler(ctx) {
|
|
42
|
-
const { args, opts, options, auth,
|
|
59
|
+
const { args, opts, options, auth, logger, orgId, config } = ctx;
|
|
60
|
+
|
|
61
|
+
if (opts.name && !SNAPSHOT_NAME_REGEX.test(opts.name)) {
|
|
62
|
+
logger.fatal(
|
|
63
|
+
'Invalid snapshot name: must only contain letters, numbers, underscores, and dashes'
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
if (opts.tag) {
|
|
68
|
+
if (opts.tag.length > MAX_SNAPSHOT_TAG_LENGTH) {
|
|
69
|
+
logger.fatal(
|
|
70
|
+
`Invalid snapshot tag: must be at most ${MAX_SNAPSHOT_TAG_LENGTH} characters`
|
|
71
|
+
);
|
|
72
|
+
}
|
|
73
|
+
if (!SNAPSHOT_TAG_REGEX.test(opts.tag)) {
|
|
74
|
+
logger.fatal(
|
|
75
|
+
'Invalid snapshot tag: must only contain letters, numbers, dashes, underscores, and dots, and cannot start with a period or dash'
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const profileName = config?.name;
|
|
81
|
+
const region = await getSandboxRegion(logger, auth, profileName, args.sandboxId, orgId);
|
|
43
82
|
const client = createSandboxClient(logger, auth, region);
|
|
44
83
|
|
|
45
84
|
const snapshot = await snapshotCreate(client, {
|
|
46
85
|
sandboxId: args.sandboxId,
|
|
86
|
+
name: opts.name,
|
|
87
|
+
description: opts.description,
|
|
47
88
|
tag: opts.tag,
|
|
48
89
|
orgId,
|
|
49
90
|
});
|
|
50
91
|
|
|
51
92
|
if (!options.json) {
|
|
52
93
|
tui.success(`created snapshot ${tui.bold(snapshot.snapshotId)}`);
|
|
53
|
-
tui.info(`
|
|
54
|
-
if (snapshot.
|
|
55
|
-
tui.info(`
|
|
94
|
+
tui.info(`Name: ${snapshot.name}`);
|
|
95
|
+
if (snapshot.description) {
|
|
96
|
+
tui.info(`Description: ${snapshot.description}`);
|
|
56
97
|
}
|
|
98
|
+
tui.info(`Size: ${tui.formatBytes(snapshot.sizeBytes)}, Files: ${snapshot.fileCount}`);
|
|
99
|
+
tui.info(`Tag: ${snapshot.tag ?? 'latest'}`);
|
|
57
100
|
}
|
|
58
101
|
|
|
59
102
|
return {
|
|
60
103
|
snapshotId: snapshot.snapshotId,
|
|
104
|
+
name: snapshot.name,
|
|
105
|
+
description: snapshot.description ?? undefined,
|
|
61
106
|
tag: snapshot.tag ?? undefined,
|
|
62
107
|
sizeBytes: snapshot.sizeBytes,
|
|
63
108
|
fileCount: snapshot.fileCount,
|
|
@@ -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 } from '../util';
|
|
5
4
|
import { getCommand } from '../../../../command-prefix';
|
|
6
5
|
import { snapshotDelete } from '@agentuity/server';
|
|
6
|
+
import { getGlobalCatalystAPIClient } from '../../../../config';
|
|
7
7
|
|
|
8
8
|
const SnapshotDeleteResponseSchema = z.object({
|
|
9
9
|
success: z.boolean().describe('Whether the operation succeeded'),
|
|
@@ -16,7 +16,7 @@ export const deleteSubcommand = createCommand({
|
|
|
16
16
|
aliases: ['del', 'rm', 'remove'],
|
|
17
17
|
description: 'Delete a snapshot',
|
|
18
18
|
tags: ['destructive', 'deletes-resource', 'slow', 'requires-auth'],
|
|
19
|
-
requires: { auth: true,
|
|
19
|
+
requires: { auth: true, org: true },
|
|
20
20
|
idempotent: true,
|
|
21
21
|
examples: [
|
|
22
22
|
{
|
|
@@ -39,7 +39,7 @@ export const deleteSubcommand = createCommand({
|
|
|
39
39
|
},
|
|
40
40
|
|
|
41
41
|
async handler(ctx) {
|
|
42
|
-
const { args, options, opts, auth,
|
|
42
|
+
const { args, options, opts, auth, logger, orgId, config } = ctx;
|
|
43
43
|
|
|
44
44
|
if (!opts.confirm) {
|
|
45
45
|
const confirmed = await tui.confirm(`Delete snapshot "${args.snapshotId}"?`, false);
|
|
@@ -53,7 +53,7 @@ export const deleteSubcommand = createCommand({
|
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
-
const client =
|
|
56
|
+
const client = await getGlobalCatalystAPIClient(logger, auth, config?.name);
|
|
57
57
|
|
|
58
58
|
await snapshotDelete(client, {
|
|
59
59
|
snapshotId: args.snapshotId,
|