@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
|
@@ -3,15 +3,21 @@ import { createSubcommand } from '../../../types';
|
|
|
3
3
|
import * as tui from '../../../tui';
|
|
4
4
|
import { projectGet } from '@agentuity/server';
|
|
5
5
|
import { getCommand } from '../../../command-prefix';
|
|
6
|
-
const
|
|
6
|
+
const EnvItemSchema = z.object({
|
|
7
|
+
value: z.string().describe('Variable value'),
|
|
8
|
+
secret: z.boolean().describe('Whether this is a secret'),
|
|
9
|
+
});
|
|
10
|
+
const EnvListResponseSchema = z.record(z.string(), EnvItemSchema);
|
|
7
11
|
export const listSubcommand = createSubcommand({
|
|
8
12
|
name: 'list',
|
|
9
13
|
aliases: ['ls'],
|
|
10
|
-
description: 'List all environment variables',
|
|
14
|
+
description: 'List all environment variables and secrets',
|
|
11
15
|
tags: ['read-only', 'fast', 'requires-auth', 'requires-project'],
|
|
12
16
|
examples: [
|
|
13
|
-
{ command: getCommand('env list'), description: 'List
|
|
14
|
-
{ command: getCommand('env list --mask'), description: '
|
|
17
|
+
{ command: getCommand('env list'), description: 'List all variables' },
|
|
18
|
+
{ command: getCommand('env list --no-mask'), description: 'Show unmasked values' },
|
|
19
|
+
{ command: getCommand('env list --secrets'), description: 'List only secrets' },
|
|
20
|
+
{ command: getCommand('env list --env-only'), description: 'List only env vars' },
|
|
15
21
|
],
|
|
16
22
|
requires: { auth: true, project: true, apiClient: true },
|
|
17
23
|
idempotent: true,
|
|
@@ -19,47 +25,64 @@ export const listSubcommand = createSubcommand({
|
|
|
19
25
|
options: z.object({
|
|
20
26
|
mask: z
|
|
21
27
|
.boolean()
|
|
22
|
-
.default(
|
|
23
|
-
.describe('mask
|
|
28
|
+
.default(true)
|
|
29
|
+
.describe('mask secret values in output (use --no-mask to show values)'),
|
|
30
|
+
secrets: z.boolean().default(false).describe('list only secrets'),
|
|
31
|
+
'env-only': z.boolean().default(false).describe('list only environment variables'),
|
|
24
32
|
}),
|
|
25
33
|
response: EnvListResponseSchema,
|
|
26
34
|
},
|
|
27
35
|
webUrl: (ctx) => `/projects/${encodeURIComponent(ctx.project.projectId)}/settings`,
|
|
28
36
|
async handler(ctx) {
|
|
29
37
|
const { opts, apiClient, project, options } = ctx;
|
|
30
|
-
// Fetch project with unmasked
|
|
31
|
-
const projectData = await tui.spinner('Fetching
|
|
38
|
+
// Fetch project with unmasked values
|
|
39
|
+
const projectData = await tui.spinner('Fetching variables', () => {
|
|
32
40
|
return projectGet(apiClient, { id: project.projectId, mask: false });
|
|
33
41
|
});
|
|
34
42
|
const env = projectData.env || {};
|
|
43
|
+
const secrets = projectData.secrets || {};
|
|
44
|
+
// Build combined result with type info
|
|
45
|
+
const result = {};
|
|
46
|
+
// Filter based on options
|
|
47
|
+
const showEnv = !opts?.secrets;
|
|
48
|
+
const showSecrets = !opts?.['env-only'];
|
|
49
|
+
if (showEnv) {
|
|
50
|
+
for (const [key, value] of Object.entries(env)) {
|
|
51
|
+
result[key] = { value, secret: false };
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if (showSecrets) {
|
|
55
|
+
for (const [key, value] of Object.entries(secrets)) {
|
|
56
|
+
result[key] = { value, secret: true };
|
|
57
|
+
}
|
|
58
|
+
}
|
|
35
59
|
// Skip TUI output in JSON mode
|
|
36
60
|
if (!options.json) {
|
|
37
|
-
if (Object.keys(
|
|
38
|
-
tui.info('No
|
|
61
|
+
if (Object.keys(result).length === 0) {
|
|
62
|
+
tui.info('No variables found');
|
|
39
63
|
}
|
|
40
64
|
else {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
65
|
+
tui.newline();
|
|
66
|
+
const envCount = showEnv ? Object.keys(env).length : 0;
|
|
67
|
+
const secretCount = showSecrets ? Object.keys(secrets).length : 0;
|
|
68
|
+
const parts = [];
|
|
69
|
+
if (envCount > 0)
|
|
70
|
+
parts.push(`${envCount} env`);
|
|
71
|
+
if (secretCount > 0)
|
|
72
|
+
parts.push(`${secretCount} secret${secretCount !== 1 ? 's' : ''}`);
|
|
73
|
+
tui.info(`Variables (${parts.join(', ')}):`);
|
|
74
|
+
tui.newline();
|
|
75
|
+
const sortedKeys = Object.keys(result).sort();
|
|
76
|
+
const shouldMask = opts?.mask !== false;
|
|
50
77
|
for (const key of sortedKeys) {
|
|
51
|
-
const value =
|
|
52
|
-
const displayValue = shouldMask ? tui.maskSecret(value) : value;
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
}
|
|
56
|
-
else {
|
|
57
|
-
console.log(`${key}=${displayValue}`);
|
|
58
|
-
}
|
|
78
|
+
const { value, secret } = result[key];
|
|
79
|
+
const displayValue = shouldMask && secret ? tui.maskSecret(value) : value;
|
|
80
|
+
const typeIndicator = secret ? ' [secret]' : '';
|
|
81
|
+
console.log(`${tui.bold(key)}=${displayValue}${tui.muted(typeIndicator)}`);
|
|
59
82
|
}
|
|
60
83
|
}
|
|
61
84
|
}
|
|
62
|
-
return
|
|
85
|
+
return result;
|
|
63
86
|
},
|
|
64
87
|
});
|
|
65
88
|
//# sourceMappingURL=list.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../src/cmd/cloud/env/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,MAAM,
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../src/cmd/cloud/env/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../../../src/cmd/cloud/env/pull.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../../../src/cmd/cloud/env/pull.ts"],"names":[],"mappings":"AAqBA,eAAO,MAAM,cAAc,yCA8EzB,CAAC"}
|
|
@@ -3,7 +3,7 @@ import { join } from 'node:path';
|
|
|
3
3
|
import { createSubcommand } from '../../../types';
|
|
4
4
|
import * as tui from '../../../tui';
|
|
5
5
|
import { projectGet } from '@agentuity/server';
|
|
6
|
-
import { findExistingEnvFile, readEnvFile, writeEnvFile, mergeEnvVars } from '../../../env-util';
|
|
6
|
+
import { findExistingEnvFile, readEnvFile, writeEnvFile, mergeEnvVars, isReservedAgentuityKey, } from '../../../env-util';
|
|
7
7
|
import { getCommand } from '../../../command-prefix';
|
|
8
8
|
const EnvPullResponseSchema = z.object({
|
|
9
9
|
success: z.boolean().describe('Whether pull succeeded'),
|
|
@@ -48,9 +48,9 @@ export const pullSubcommand = createSubcommand({
|
|
|
48
48
|
// Local values take priority (only add new keys from cloud)
|
|
49
49
|
mergedEnv = mergeEnvVars(cloudEnv, localEnv);
|
|
50
50
|
}
|
|
51
|
-
// Write to .env (skip AGENTUITY_ keys)
|
|
51
|
+
// Write to .env (skip reserved AGENTUITY_ keys, except AGENTUITY_PUBLIC_)
|
|
52
52
|
await writeEnvFile(targetEnvPath, mergedEnv, {
|
|
53
|
-
skipKeys: Object.keys(mergedEnv).filter(
|
|
53
|
+
skipKeys: Object.keys(mergedEnv).filter(isReservedAgentuityKey),
|
|
54
54
|
});
|
|
55
55
|
// Write AGENTUITY_SDK_KEY to .env if present and missing locally
|
|
56
56
|
if (projectData.api_key) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../../../src/cmd/cloud/env/pull.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,
|
|
1
|
+
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../../../src/cmd/cloud/env/pull.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../../../src/cmd/cloud/env/push.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../../../src/cmd/cloud/env/push.ts"],"names":[],"mappings":"AAqBA,eAAO,MAAM,cAAc,yCAgFzB,CAAC"}
|
|
@@ -2,16 +2,18 @@ import { z } from 'zod';
|
|
|
2
2
|
import { createSubcommand } from '../../../types';
|
|
3
3
|
import * as tui from '../../../tui';
|
|
4
4
|
import { projectEnvUpdate } from '@agentuity/server';
|
|
5
|
-
import { findExistingEnvFile, readEnvFile, filterAgentuitySdkKeys } from '../../../env-util';
|
|
5
|
+
import { findExistingEnvFile, readEnvFile, filterAgentuitySdkKeys, splitEnvAndSecrets, validateNoPublicSecrets, } from '../../../env-util';
|
|
6
6
|
import { getCommand } from '../../../command-prefix';
|
|
7
7
|
const EnvPushResponseSchema = z.object({
|
|
8
8
|
success: z.boolean().describe('Whether push succeeded'),
|
|
9
9
|
pushed: z.number().describe('Number of items pushed'),
|
|
10
|
+
envCount: z.number().describe('Number of env vars pushed'),
|
|
11
|
+
secretCount: z.number().describe('Number of secrets pushed'),
|
|
10
12
|
source: z.string().describe('Source file path'),
|
|
11
13
|
});
|
|
12
14
|
export const pushSubcommand = createSubcommand({
|
|
13
15
|
name: 'push',
|
|
14
|
-
description: 'Push environment variables from local .env file to cloud',
|
|
16
|
+
description: 'Push environment variables and secrets from local .env file to cloud',
|
|
15
17
|
tags: [
|
|
16
18
|
'mutating',
|
|
17
19
|
'updates-resource',
|
|
@@ -21,7 +23,7 @@ export const pushSubcommand = createSubcommand({
|
|
|
21
23
|
'requires-project',
|
|
22
24
|
],
|
|
23
25
|
idempotent: true,
|
|
24
|
-
examples: [{ command: getCommand('env push'), description: '
|
|
26
|
+
examples: [{ command: getCommand('env push'), description: 'Push all variables to cloud' }],
|
|
25
27
|
requires: { auth: true, project: true, apiClient: true },
|
|
26
28
|
prerequisites: ['env set'],
|
|
27
29
|
schema: {
|
|
@@ -29,31 +31,49 @@ export const pushSubcommand = createSubcommand({
|
|
|
29
31
|
},
|
|
30
32
|
async handler(ctx) {
|
|
31
33
|
const { apiClient, project, projectDir } = ctx;
|
|
32
|
-
// Read local env file
|
|
34
|
+
// Read local env file
|
|
33
35
|
const envFilePath = await findExistingEnvFile(projectDir);
|
|
34
36
|
const localEnv = await readEnvFile(envFilePath);
|
|
35
|
-
// Filter out AGENTUITY_ prefixed keys
|
|
37
|
+
// Filter out reserved AGENTUITY_ prefixed keys
|
|
36
38
|
const filteredEnv = filterAgentuitySdkKeys(localEnv);
|
|
37
39
|
if (Object.keys(filteredEnv).length === 0) {
|
|
38
|
-
tui.warning('No
|
|
40
|
+
tui.warning('No variables to push');
|
|
39
41
|
return {
|
|
40
42
|
success: false,
|
|
41
43
|
pushed: 0,
|
|
44
|
+
envCount: 0,
|
|
45
|
+
secretCount: 0,
|
|
42
46
|
source: envFilePath,
|
|
43
47
|
};
|
|
44
48
|
}
|
|
49
|
+
// Split into env and secrets based on key naming conventions
|
|
50
|
+
const { env, secrets } = splitEnvAndSecrets(filteredEnv);
|
|
51
|
+
// Check for any public vars that would have been treated as secrets
|
|
52
|
+
const publicSecretKeys = validateNoPublicSecrets(secrets);
|
|
53
|
+
if (publicSecretKeys.length > 0) {
|
|
54
|
+
tui.warning(`Moving public variables to env: ${publicSecretKeys.join(', ')} (these are exposed to the frontend)`);
|
|
55
|
+
for (const key of publicSecretKeys) {
|
|
56
|
+
delete secrets[key];
|
|
57
|
+
env[key] = filteredEnv[key];
|
|
58
|
+
}
|
|
59
|
+
}
|
|
45
60
|
// Push to cloud
|
|
46
|
-
await tui.spinner('Pushing
|
|
61
|
+
await tui.spinner('Pushing variables to cloud', () => {
|
|
47
62
|
return projectEnvUpdate(apiClient, {
|
|
48
63
|
id: project.projectId,
|
|
49
|
-
env
|
|
64
|
+
env,
|
|
65
|
+
secrets,
|
|
50
66
|
});
|
|
51
67
|
});
|
|
52
|
-
const
|
|
53
|
-
|
|
68
|
+
const envCount = Object.keys(env).length;
|
|
69
|
+
const secretCount = Object.keys(secrets).length;
|
|
70
|
+
const totalCount = envCount + secretCount;
|
|
71
|
+
tui.success(`Pushed ${totalCount} variable${totalCount !== 1 ? 's' : ''} to cloud (${envCount} env, ${secretCount} secret${secretCount !== 1 ? 's' : ''})`);
|
|
54
72
|
return {
|
|
55
73
|
success: true,
|
|
56
|
-
pushed:
|
|
74
|
+
pushed: totalCount,
|
|
75
|
+
envCount,
|
|
76
|
+
secretCount,
|
|
57
77
|
source: envFilePath,
|
|
58
78
|
};
|
|
59
79
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"push.js","sourceRoot":"","sources":["../../../../src/cmd/cloud/env/push.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,
|
|
1
|
+
{"version":3,"file":"push.js","sourceRoot":"","sources":["../../../../src/cmd/cloud/env/push.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"set.d.ts","sourceRoot":"","sources":["../../../../src/cmd/cloud/env/set.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"set.d.ts","sourceRoot":"","sources":["../../../../src/cmd/cloud/env/set.ts"],"names":[],"mappings":"AAuBA,eAAO,MAAM,aAAa,yCA0FxB,CAAC"}
|
|
@@ -2,58 +2,72 @@ import { z } from 'zod';
|
|
|
2
2
|
import { createSubcommand } from '../../../types';
|
|
3
3
|
import * as tui from '../../../tui';
|
|
4
4
|
import { projectEnvUpdate } from '@agentuity/server';
|
|
5
|
-
import { findExistingEnvFile, readEnvFile, writeEnvFile, filterAgentuitySdkKeys, looksLikeSecret, } from '../../../env-util';
|
|
5
|
+
import { findExistingEnvFile, readEnvFile, writeEnvFile, filterAgentuitySdkKeys, looksLikeSecret, isReservedAgentuityKey, isPublicVarKey, PUBLIC_VAR_PREFIXES, } from '../../../env-util';
|
|
6
6
|
import { getCommand } from '../../../command-prefix';
|
|
7
7
|
const EnvSetResponseSchema = z.object({
|
|
8
8
|
success: z.boolean().describe('Whether the operation succeeded'),
|
|
9
9
|
key: z.string().describe('Environment variable key'),
|
|
10
10
|
path: z.string().describe('Local file path where env var was saved'),
|
|
11
|
+
secret: z.boolean().describe('Whether the value was stored as a secret'),
|
|
11
12
|
});
|
|
12
13
|
export const setSubcommand = createSubcommand({
|
|
13
14
|
name: 'set',
|
|
14
|
-
description: 'Set an environment variable',
|
|
15
|
+
description: 'Set an environment variable or secret',
|
|
15
16
|
tags: ['mutating', 'updates-resource', 'slow', 'requires-auth', 'requires-project'],
|
|
16
17
|
idempotent: true,
|
|
17
18
|
requires: { auth: true, project: true, apiClient: true },
|
|
18
19
|
examples: [
|
|
19
|
-
{
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
{
|
|
21
|
+
command: getCommand('env set NODE_ENV production'),
|
|
22
|
+
description: 'Set environment variable',
|
|
23
|
+
},
|
|
24
|
+
{ command: getCommand('env set PORT 3000'), description: 'Set port number' },
|
|
25
|
+
{
|
|
26
|
+
command: getCommand('env set API_KEY "sk_..." --secret'),
|
|
27
|
+
description: 'Set a secret value',
|
|
28
|
+
},
|
|
22
29
|
],
|
|
23
30
|
schema: {
|
|
24
31
|
args: z.object({
|
|
25
32
|
key: z.string().describe('the environment variable key'),
|
|
26
33
|
value: z.string().describe('the environment variable value'),
|
|
27
34
|
}),
|
|
35
|
+
options: z.object({
|
|
36
|
+
secret: z
|
|
37
|
+
.boolean()
|
|
38
|
+
.default(false)
|
|
39
|
+
.describe('store as a secret (encrypted and masked in UI)'),
|
|
40
|
+
}),
|
|
28
41
|
response: EnvSetResponseSchema,
|
|
29
42
|
},
|
|
30
43
|
async handler(ctx) {
|
|
31
|
-
const { args, apiClient, project, projectDir } = ctx;
|
|
32
|
-
|
|
33
|
-
|
|
44
|
+
const { args, opts, apiClient, project, projectDir } = ctx;
|
|
45
|
+
let isSecret = opts?.secret ?? false;
|
|
46
|
+
const isPublic = isPublicVarKey(args.key);
|
|
47
|
+
// Validate key doesn't start with reserved AGENTUITY_ prefix (except AGENTUITY_PUBLIC_)
|
|
48
|
+
if (isReservedAgentuityKey(args.key)) {
|
|
34
49
|
tui.fatal('Cannot set AGENTUITY_ prefixed variables. These are reserved for system use.');
|
|
35
50
|
}
|
|
36
|
-
//
|
|
37
|
-
if (
|
|
51
|
+
// Validate public vars cannot be secrets
|
|
52
|
+
if (isSecret && isPublic) {
|
|
53
|
+
tui.fatal(`Cannot set public variables as secrets. Keys with prefixes (${PUBLIC_VAR_PREFIXES.join(', ')}) are exposed to the frontend.`);
|
|
54
|
+
}
|
|
55
|
+
// Auto-detect if this looks like a secret and offer to store as secret
|
|
56
|
+
// Skip auto-detect for public vars since they can never be secrets
|
|
57
|
+
if (!isSecret && !isPublic && looksLikeSecret(args.key, args.value)) {
|
|
38
58
|
tui.warning(`The variable '${args.key}' looks like it should be a secret.`);
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
if (!response) {
|
|
43
|
-
tui.info(`Cancelled. Use "${getCommand('secret set')}" to store this as a secret instead.`);
|
|
44
|
-
return {
|
|
45
|
-
success: false,
|
|
46
|
-
key: args.key,
|
|
47
|
-
path: '',
|
|
48
|
-
};
|
|
59
|
+
const storeAsSecret = await tui.confirm('Store as a secret instead?', true);
|
|
60
|
+
if (storeAsSecret) {
|
|
61
|
+
isSecret = true;
|
|
49
62
|
}
|
|
50
63
|
}
|
|
51
64
|
// Set in cloud
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
65
|
+
const updatePayload = isSecret
|
|
66
|
+
? { id: project.projectId, secrets: { [args.key]: args.value } }
|
|
67
|
+
: { id: project.projectId, env: { [args.key]: args.value } };
|
|
68
|
+
const label = isSecret ? 'secret' : 'environment variable';
|
|
69
|
+
await tui.spinner(`Setting ${label} in cloud`, () => {
|
|
70
|
+
return projectEnvUpdate(apiClient, updatePayload);
|
|
57
71
|
});
|
|
58
72
|
// Update local .env file
|
|
59
73
|
const envFilePath = await findExistingEnvFile(projectDir);
|
|
@@ -62,11 +76,12 @@ export const setSubcommand = createSubcommand({
|
|
|
62
76
|
// Filter out AGENTUITY_ keys before writing
|
|
63
77
|
const filteredEnv = filterAgentuitySdkKeys(currentEnv);
|
|
64
78
|
await writeEnvFile(envFilePath, filteredEnv);
|
|
65
|
-
tui.success(
|
|
79
|
+
tui.success(`${isSecret ? 'Secret' : 'Environment variable'} '${args.key}' set successfully (cloud + ${envFilePath})`);
|
|
66
80
|
return {
|
|
67
81
|
success: true,
|
|
68
82
|
key: args.key,
|
|
69
83
|
path: envFilePath,
|
|
84
|
+
secret: isSecret,
|
|
70
85
|
};
|
|
71
86
|
},
|
|
72
87
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"set.js","sourceRoot":"","sources":["../../../../src/cmd/cloud/env/set.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EACN,mBAAmB,EACnB,WAAW,EACX,YAAY,EACZ,sBAAsB,EACtB,eAAe,
|
|
1
|
+
{"version":3,"file":"set.js","sourceRoot":"","sources":["../../../../src/cmd/cloud/env/set.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cmd/cloud/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cmd/cloud/index.ts"],"names":[],"mappings":"AAmBA,eAAO,MAAM,OAAO,mCA0BlB,CAAC"}
|
package/dist/cmd/cloud/index.js
CHANGED
|
@@ -11,7 +11,6 @@ import { deploymentCommand } from './deployment';
|
|
|
11
11
|
import keyvalueCommand from './keyvalue';
|
|
12
12
|
import { agentCommand } from './agent';
|
|
13
13
|
import envCommand from './env';
|
|
14
|
-
import secretCommand from './secret';
|
|
15
14
|
import apikeyCommand from './apikey';
|
|
16
15
|
import streamCommand from './stream';
|
|
17
16
|
import vectorCommand from './vector';
|
|
@@ -33,7 +32,6 @@ export const command = createCommand({
|
|
|
33
32
|
vectorCommand,
|
|
34
33
|
sandboxCommand,
|
|
35
34
|
envCommand,
|
|
36
|
-
secretCommand,
|
|
37
35
|
deploySubcommand,
|
|
38
36
|
dbCommand,
|
|
39
37
|
redisCommand,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cmd/cloud/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,eAAe,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,UAAU,MAAM,OAAO,CAAC;AAC/B,OAAO,aAAa,MAAM,UAAU,CAAC;AACrC,OAAO,aAAa,MAAM,UAAU,CAAC;AACrC,OAAO,aAAa,MAAM,UAAU,CAAC;AACrC,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cmd/cloud/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,eAAe,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,UAAU,MAAM,OAAO,CAAC;AAC/B,OAAO,aAAa,MAAM,UAAU,CAAC;AACrC,OAAO,aAAa,MAAM,UAAU,CAAC;AACrC,OAAO,aAAa,MAAM,UAAU,CAAC;AACrC,OAAO,cAAc,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,MAAM,CAAC,MAAM,OAAO,GAAG,aAAa,CAAC;IACpC,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,wBAAwB;IACrC,IAAI,EAAE,CAAC,MAAM,EAAE,eAAe,CAAC;IAC/B,QAAQ,EAAE;QACT,EAAE,OAAO,EAAE,UAAU,CAAC,cAAc,CAAC,EAAE,WAAW,EAAE,gCAAgC,EAAE;QACtF,EAAE,OAAO,EAAE,UAAU,CAAC,uBAAuB,CAAC,EAAE,WAAW,EAAE,sBAAsB,EAAE;KACrF;IACD,WAAW,EAAE;QACZ,aAAa;QACb,eAAe;QACf,YAAY;QACZ,aAAa;QACb,aAAa;QACb,cAAc;QACd,UAAU;QACV,gBAAgB;QAChB,SAAS;QACT,YAAY;QACZ,cAAc;QACd,cAAc;QACd,aAAa;QACb,aAAa;QACb,aAAa;QACb,iBAAiB;KACjB;CACD,CAAC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Logger } from '@agentuity/core';
|
|
2
|
+
import { type APIClient } from '@agentuity/server';
|
|
3
|
+
import type { AuthData } from '../../types';
|
|
4
|
+
export type IdentifierType = 'project' | 'deployment' | 'sandbox';
|
|
5
|
+
/**
|
|
6
|
+
* Determine the type of identifier based on its prefix
|
|
7
|
+
*/
|
|
8
|
+
export declare function getIdentifierType(identifier: string): IdentifierType;
|
|
9
|
+
/**
|
|
10
|
+
* Look up the region for a project, deployment, or sandbox identifier.
|
|
11
|
+
* Uses cache-first strategy with API fallback.
|
|
12
|
+
*/
|
|
13
|
+
export declare function getIdentifierRegion(logger: Logger, auth: AuthData, apiClient: APIClient, profileName: string | undefined, identifier: string, orgId?: string): Promise<string>;
|
|
14
|
+
/**
|
|
15
|
+
* Cache the region for a project after creation
|
|
16
|
+
*/
|
|
17
|
+
export declare function cacheProjectRegion(profileName: string | undefined, projectId: string, region: string): Promise<void>;
|
|
18
|
+
//# sourceMappingURL=region-lookup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"region-lookup.d.ts","sourceRoot":"","sources":["../../../src/cmd/cloud/region-lookup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAyC,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAG1F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAI5C,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,YAAY,GAAG,SAAS,CAAC;AAElE;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,CAYpE;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACxC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,SAAS,EACpB,WAAW,oBAAe,EAC1B,UAAU,EAAE,MAAM,EAClB,KAAK,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC,CAuCjB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACvC,WAAW,oBAAe,EAC1B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAEf"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { projectGet, sandboxGet, deploymentGet } from '@agentuity/server';
|
|
2
|
+
import { getResourceRegion, setResourceRegion } from '../../cache';
|
|
3
|
+
import { getGlobalCatalystAPIClient } from '../../config';
|
|
4
|
+
import * as tui from '../../tui';
|
|
5
|
+
import { ErrorCode } from '../../errors';
|
|
6
|
+
/**
|
|
7
|
+
* Determine the type of identifier based on its prefix
|
|
8
|
+
*/
|
|
9
|
+
export function getIdentifierType(identifier) {
|
|
10
|
+
if (identifier.startsWith('proj_')) {
|
|
11
|
+
return 'project';
|
|
12
|
+
}
|
|
13
|
+
if (identifier.startsWith('deploy_')) {
|
|
14
|
+
return 'deployment';
|
|
15
|
+
}
|
|
16
|
+
if (identifier.startsWith('sbx_')) {
|
|
17
|
+
return 'sandbox';
|
|
18
|
+
}
|
|
19
|
+
// Default to project for unknown prefixes
|
|
20
|
+
return 'project';
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Look up the region for a project, deployment, or sandbox identifier.
|
|
24
|
+
* Uses cache-first strategy with API fallback.
|
|
25
|
+
*/
|
|
26
|
+
export async function getIdentifierRegion(logger, auth, apiClient, profileName = 'production', identifier, orgId) {
|
|
27
|
+
const identifierType = getIdentifierType(identifier);
|
|
28
|
+
// For project, deployment, and sandbox, check cache first
|
|
29
|
+
const cachedRegion = await getResourceRegion(identifierType, profileName, identifier);
|
|
30
|
+
if (cachedRegion) {
|
|
31
|
+
logger.trace(`[region-lookup] Found cached region for ${identifier}: ${cachedRegion}`);
|
|
32
|
+
return cachedRegion;
|
|
33
|
+
}
|
|
34
|
+
logger.trace(`[region-lookup] Cache miss for ${identifier}, fetching from API`);
|
|
35
|
+
let region = null;
|
|
36
|
+
if (identifierType === 'project') {
|
|
37
|
+
const project = await projectGet(apiClient, { id: identifier, mask: true, keys: false });
|
|
38
|
+
region = project.cloudRegion ?? null;
|
|
39
|
+
}
|
|
40
|
+
else if (identifierType === 'deployment') {
|
|
41
|
+
const deployment = await deploymentGet(apiClient, identifier);
|
|
42
|
+
region = deployment.cloudRegion ?? null;
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
// sandbox
|
|
46
|
+
const globalClient = await getGlobalCatalystAPIClient(logger, auth, profileName);
|
|
47
|
+
const sandbox = await sandboxGet(globalClient, { sandboxId: identifier, orgId });
|
|
48
|
+
region = sandbox.region ?? null;
|
|
49
|
+
}
|
|
50
|
+
if (!region) {
|
|
51
|
+
tui.fatal(`Could not determine region for ${identifierType} '${identifier}'. Use --region flag to specify.`, ErrorCode.RESOURCE_NOT_FOUND);
|
|
52
|
+
}
|
|
53
|
+
// Cache the result
|
|
54
|
+
await setResourceRegion(identifierType, profileName, identifier, region);
|
|
55
|
+
logger.trace(`[region-lookup] Cached region for ${identifier}: ${region}`);
|
|
56
|
+
return region;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Cache the region for a project after creation
|
|
60
|
+
*/
|
|
61
|
+
export async function cacheProjectRegion(profileName = 'production', projectId, region) {
|
|
62
|
+
await setResourceRegion('project', profileName, projectId, region);
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=region-lookup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"region-lookup.js","sourceRoot":"","sources":["../../../src/cmd/cloud/region-lookup.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cp.d.ts","sourceRoot":"","sources":["../../../../src/cmd/cloud/sandbox/cp.ts"],"names":[],"mappings":"AA4CA,eAAO,MAAM,YAAY,
|
|
1
|
+
{"version":3,"file":"cp.d.ts","sourceRoot":"","sources":["../../../../src/cmd/cloud/sandbox/cp.ts"],"names":[],"mappings":"AA4CA,eAAO,MAAM,YAAY,sCA0FvB,CAAC;AA8YH,eAAe,YAAY,CAAC"}
|
|
@@ -3,7 +3,7 @@ import { readFileSync, writeFileSync, mkdirSync, statSync, readdirSync } from 'n
|
|
|
3
3
|
import { dirname, resolve, basename, join, relative } from 'node:path';
|
|
4
4
|
import { createCommand } from '../../../types';
|
|
5
5
|
import * as tui from '../../../tui';
|
|
6
|
-
import { createSandboxClient } from './util';
|
|
6
|
+
import { getSandboxRegion, createSandboxClient } from './util';
|
|
7
7
|
import { getCommand } from '../../../command-prefix';
|
|
8
8
|
import { sandboxWriteFiles, sandboxReadFile, sandboxExecute, executionGet, } from '@agentuity/server';
|
|
9
9
|
const POLL_INTERVAL_MS = 500;
|
|
@@ -31,7 +31,7 @@ export const cpSubcommand = createCommand({
|
|
|
31
31
|
aliases: ['copy'],
|
|
32
32
|
description: 'Copy files or directories to or from a sandbox',
|
|
33
33
|
tags: ['slow', 'requires-auth'],
|
|
34
|
-
requires: { auth: true,
|
|
34
|
+
requires: { auth: true, org: true },
|
|
35
35
|
examples: [
|
|
36
36
|
{
|
|
37
37
|
command: getCommand('cloud sandbox cp ./local-file.txt snbx_abc123:/path/to/file.txt'),
|
|
@@ -67,7 +67,7 @@ export const cpSubcommand = createCommand({
|
|
|
67
67
|
response: SandboxCpResponseSchema,
|
|
68
68
|
},
|
|
69
69
|
async handler(ctx) {
|
|
70
|
-
const { args, opts, options, auth,
|
|
70
|
+
const { args, opts, options, auth, logger, orgId, config } = ctx;
|
|
71
71
|
const source = parsePath(args.source);
|
|
72
72
|
const destination = parsePath(args.destination);
|
|
73
73
|
if (source.sandboxId && destination.sandboxId) {
|
|
@@ -76,6 +76,8 @@ export const cpSubcommand = createCommand({
|
|
|
76
76
|
if (!source.sandboxId && !destination.sandboxId) {
|
|
77
77
|
logger.fatal('At least one path must include a sandbox ID (e.g., snbx_abc123:/path/to/file)');
|
|
78
78
|
}
|
|
79
|
+
const sandboxId = source.sandboxId ?? destination.sandboxId;
|
|
80
|
+
const region = await getSandboxRegion(logger, auth, config?.name, sandboxId, orgId);
|
|
79
81
|
const client = createSandboxClient(logger, auth, region);
|
|
80
82
|
const recursive = opts.recursive ?? false;
|
|
81
83
|
if (source.sandboxId) {
|