@agentuity/cli 0.0.51 → 0.0.53
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/dist/api.js +68 -0
- package/dist/api.js.map +1 -0
- package/dist/auth.js +225 -0
- package/dist/auth.js.map +1 -0
- package/dist/banner.js +35 -0
- package/dist/banner.js.map +1 -0
- package/dist/cli-logger.js +72 -0
- package/dist/cli-logger.js.map +1 -0
- package/dist/cli.js +822 -0
- package/dist/cli.js.map +1 -0
- package/dist/cmd/ai/capabilities/index.js +10 -0
- package/dist/cmd/ai/capabilities/index.js.map +1 -0
- package/dist/cmd/ai/capabilities/show.js +221 -0
- package/dist/cmd/ai/capabilities/show.js.map +1 -0
- package/dist/cmd/ai/index.js +11 -0
- package/dist/cmd/ai/index.js.map +1 -0
- package/dist/cmd/ai/prompt/index.js +10 -0
- package/dist/cmd/ai/prompt/index.js.map +1 -0
- package/dist/cmd/ai/prompt/llm.js +365 -0
- package/dist/cmd/ai/prompt/llm.js.map +1 -0
- package/dist/cmd/ai/schema/index.js +10 -0
- package/dist/cmd/ai/schema/index.js.map +1 -0
- package/dist/cmd/ai/schema/show.js +23 -0
- package/dist/cmd/ai/schema/show.js.map +1 -0
- package/dist/cmd/auth/api.js +85 -0
- package/dist/cmd/auth/api.js.map +1 -0
- package/dist/cmd/auth/index.js +13 -0
- package/dist/cmd/auth/index.js.map +1 -0
- package/dist/cmd/auth/login.js +84 -0
- package/dist/cmd/auth/login.js.map +1 -0
- package/dist/cmd/auth/logout.js +17 -0
- package/dist/cmd/auth/logout.js.map +1 -0
- package/dist/cmd/auth/signup.js +55 -0
- package/dist/cmd/auth/signup.js.map +1 -0
- package/dist/cmd/auth/ssh/add.js +239 -0
- package/dist/cmd/auth/ssh/add.js.map +1 -0
- package/dist/cmd/auth/ssh/api.js +53 -0
- package/dist/cmd/auth/ssh/api.js.map +1 -0
- package/dist/cmd/auth/ssh/delete.js +126 -0
- package/dist/cmd/auth/ssh/delete.js.map +1 -0
- package/dist/cmd/auth/ssh/index.js +11 -0
- package/dist/cmd/auth/ssh/index.js.map +1 -0
- package/dist/cmd/auth/ssh/list.js +70 -0
- package/dist/cmd/auth/ssh/list.js.map +1 -0
- package/dist/cmd/auth/whoami.js +68 -0
- package/dist/cmd/auth/whoami.js.map +1 -0
- package/dist/cmd/build/ast.js +608 -0
- package/dist/cmd/build/ast.js.map +1 -0
- package/dist/cmd/build/ast.test.js +389 -0
- package/dist/cmd/build/ast.test.js.map +1 -0
- package/dist/cmd/build/bundler.js +304 -0
- package/dist/cmd/build/bundler.js.map +1 -0
- package/dist/cmd/build/file.js +10 -0
- package/dist/cmd/build/file.js.map +1 -0
- package/dist/cmd/build/fix-duplicate-exports.js +167 -0
- package/dist/cmd/build/fix-duplicate-exports.js.map +1 -0
- package/dist/cmd/build/fix-duplicate-exports.test.js +300 -0
- package/dist/cmd/build/fix-duplicate-exports.test.js.map +1 -0
- package/dist/cmd/build/index.d.ts.map +1 -1
- package/dist/cmd/build/index.js +81 -0
- package/dist/cmd/build/index.js.map +1 -0
- package/dist/cmd/build/patch/_util.js +42 -0
- package/dist/cmd/build/patch/_util.js.map +1 -0
- package/dist/cmd/build/patch/aisdk.js +65 -0
- package/dist/cmd/build/patch/aisdk.js.map +1 -0
- package/dist/cmd/build/patch/index.js +97 -0
- package/dist/cmd/build/patch/index.js.map +1 -0
- package/dist/cmd/build/patch/llm.js +18 -0
- package/dist/cmd/build/patch/llm.js.map +1 -0
- package/dist/cmd/build/plugin.d.ts.map +1 -1
- package/dist/cmd/build/plugin.js +581 -0
- package/dist/cmd/build/plugin.js.map +1 -0
- package/dist/cmd/cloud/agents/index.js +133 -0
- package/dist/cmd/cloud/agents/index.js.map +1 -0
- package/dist/cmd/cloud/deploy.js +341 -0
- package/dist/cmd/cloud/deploy.js.map +1 -0
- package/dist/cmd/cloud/deployment/index.js +20 -0
- package/dist/cmd/cloud/deployment/index.js.map +1 -0
- package/dist/cmd/cloud/deployment/list.js +89 -0
- package/dist/cmd/cloud/deployment/list.js.map +1 -0
- package/dist/cmd/cloud/deployment/remove.js +60 -0
- package/dist/cmd/cloud/deployment/remove.js.map +1 -0
- package/dist/cmd/cloud/deployment/rollback.js +80 -0
- package/dist/cmd/cloud/deployment/rollback.js.map +1 -0
- package/dist/cmd/cloud/deployment/show.js +106 -0
- package/dist/cmd/cloud/deployment/show.js.map +1 -0
- package/dist/cmd/cloud/deployment/undeploy.js +45 -0
- package/dist/cmd/cloud/deployment/undeploy.js.map +1 -0
- package/dist/cmd/cloud/deployment/utils.js +10 -0
- package/dist/cmd/cloud/deployment/utils.js.map +1 -0
- package/dist/cmd/cloud/domain.js +77 -0
- package/dist/cmd/cloud/domain.js.map +1 -0
- package/dist/cmd/cloud/env/delete.js +50 -0
- package/dist/cmd/cloud/env/delete.js.map +1 -0
- package/dist/cmd/cloud/env/get.js +65 -0
- package/dist/cmd/cloud/env/get.js.map +1 -0
- package/dist/cmd/cloud/env/import.js +113 -0
- package/dist/cmd/cloud/env/import.js.map +1 -0
- package/dist/cmd/cloud/env/index.js +24 -0
- package/dist/cmd/cloud/env/index.js.map +1 -0
- package/dist/cmd/cloud/env/list.js +58 -0
- package/dist/cmd/cloud/env/list.js.map +1 -0
- package/dist/cmd/cloud/env/pull.js +81 -0
- package/dist/cmd/cloud/env/pull.js.map +1 -0
- package/dist/cmd/cloud/env/push.js +61 -0
- package/dist/cmd/cloud/env/push.js.map +1 -0
- package/dist/cmd/cloud/env/set.js +73 -0
- package/dist/cmd/cloud/env/set.js.map +1 -0
- package/dist/cmd/cloud/index.js +31 -0
- package/dist/cmd/cloud/index.js.map +1 -0
- package/dist/cmd/cloud/keyvalue/create-namespace.js +41 -0
- package/dist/cmd/cloud/keyvalue/create-namespace.js.map +1 -0
- package/dist/cmd/cloud/keyvalue/delete-namespace.js +64 -0
- package/dist/cmd/cloud/keyvalue/delete-namespace.js.map +1 -0
- package/dist/cmd/cloud/keyvalue/delete.js +47 -0
- package/dist/cmd/cloud/keyvalue/delete.js.map +1 -0
- package/dist/cmd/cloud/keyvalue/get.js +65 -0
- package/dist/cmd/cloud/keyvalue/get.js.map +1 -0
- package/dist/cmd/cloud/keyvalue/index.js +32 -0
- package/dist/cmd/cloud/keyvalue/index.js.map +1 -0
- package/dist/cmd/cloud/keyvalue/keys.js +50 -0
- package/dist/cmd/cloud/keyvalue/keys.js.map +1 -0
- package/dist/cmd/cloud/keyvalue/list-namespaces.js +37 -0
- package/dist/cmd/cloud/keyvalue/list-namespaces.js.map +1 -0
- package/dist/cmd/cloud/keyvalue/repl.js +277 -0
- package/dist/cmd/cloud/keyvalue/repl.js.map +1 -0
- package/dist/cmd/cloud/keyvalue/search.js +72 -0
- package/dist/cmd/cloud/keyvalue/search.js.map +1 -0
- package/dist/cmd/cloud/keyvalue/set.js +59 -0
- package/dist/cmd/cloud/keyvalue/set.js.map +1 -0
- package/dist/cmd/cloud/keyvalue/stats.js +82 -0
- package/dist/cmd/cloud/keyvalue/stats.js.map +1 -0
- package/dist/cmd/cloud/keyvalue/util.js +19 -0
- package/dist/cmd/cloud/keyvalue/util.js.map +1 -0
- package/dist/cmd/cloud/objectstore/delete-bucket.js +66 -0
- package/dist/cmd/cloud/objectstore/delete-bucket.js.map +1 -0
- package/dist/cmd/cloud/objectstore/delete.js +56 -0
- package/dist/cmd/cloud/objectstore/delete.js.map +1 -0
- package/dist/cmd/cloud/objectstore/get.js +64 -0
- package/dist/cmd/cloud/objectstore/get.js.map +1 -0
- package/dist/cmd/cloud/objectstore/index.js +28 -0
- package/dist/cmd/cloud/objectstore/index.js.map +1 -0
- package/dist/cmd/cloud/objectstore/list-buckets.js +37 -0
- package/dist/cmd/cloud/objectstore/list-buckets.js.map +1 -0
- package/dist/cmd/cloud/objectstore/list-keys.js +52 -0
- package/dist/cmd/cloud/objectstore/list-keys.js.map +1 -0
- package/dist/cmd/cloud/objectstore/put.js +57 -0
- package/dist/cmd/cloud/objectstore/put.js.map +1 -0
- package/dist/cmd/cloud/objectstore/repl.js +219 -0
- package/dist/cmd/cloud/objectstore/repl.js.map +1 -0
- package/dist/cmd/cloud/objectstore/url.js +55 -0
- package/dist/cmd/cloud/objectstore/url.js.map +1 -0
- package/dist/cmd/cloud/objectstore/util.js +18 -0
- package/dist/cmd/cloud/objectstore/util.js.map +1 -0
- package/dist/cmd/cloud/resource/add.js +70 -0
- package/dist/cmd/cloud/resource/add.js.map +1 -0
- package/dist/cmd/cloud/resource/delete.js +126 -0
- package/dist/cmd/cloud/resource/delete.js.map +1 -0
- package/dist/cmd/cloud/resource/index.js +12 -0
- package/dist/cmd/cloud/resource/index.js.map +1 -0
- package/dist/cmd/cloud/resource/list.js +89 -0
- package/dist/cmd/cloud/resource/list.js.map +1 -0
- package/dist/cmd/cloud/scp/download.js +72 -0
- package/dist/cmd/cloud/scp/download.js.map +1 -0
- package/dist/cmd/cloud/scp/index.js +10 -0
- package/dist/cmd/cloud/scp/index.js.map +1 -0
- package/dist/cmd/cloud/scp/upload.js +75 -0
- package/dist/cmd/cloud/scp/upload.js.map +1 -0
- package/dist/cmd/cloud/secret/delete.js +50 -0
- package/dist/cmd/cloud/secret/delete.js.map +1 -0
- package/dist/cmd/cloud/secret/get.js +69 -0
- package/dist/cmd/cloud/secret/get.js.map +1 -0
- package/dist/cmd/cloud/secret/import.js +88 -0
- package/dist/cmd/cloud/secret/import.js.map +1 -0
- package/dist/cmd/cloud/secret/index.js +24 -0
- package/dist/cmd/cloud/secret/index.js.map +1 -0
- package/dist/cmd/cloud/secret/list.js +58 -0
- package/dist/cmd/cloud/secret/list.js.map +1 -0
- package/dist/cmd/cloud/secret/pull.js +81 -0
- package/dist/cmd/cloud/secret/pull.js.map +1 -0
- package/dist/cmd/cloud/secret/push.js +61 -0
- package/dist/cmd/cloud/secret/push.js.map +1 -0
- package/dist/cmd/cloud/secret/set.js +57 -0
- package/dist/cmd/cloud/secret/set.js.map +1 -0
- package/dist/cmd/cloud/session/get.d.ts.map +1 -1
- package/dist/cmd/cloud/session/get.js +155 -0
- package/dist/cmd/cloud/session/get.js.map +1 -0
- package/dist/cmd/cloud/session/index.js +11 -0
- package/dist/cmd/cloud/session/index.js.map +1 -0
- package/dist/cmd/cloud/session/list.js +132 -0
- package/dist/cmd/cloud/session/list.js.map +1 -0
- package/dist/cmd/cloud/session/logs.js +56 -0
- package/dist/cmd/cloud/session/logs.js.map +1 -0
- package/dist/cmd/cloud/ssh.js +67 -0
- package/dist/cmd/cloud/ssh.js.map +1 -0
- package/dist/cmd/dev/agents.js +103 -0
- package/dist/cmd/dev/agents.js.map +1 -0
- package/dist/cmd/dev/api.js +26 -0
- package/dist/cmd/dev/api.js.map +1 -0
- package/dist/cmd/dev/download.js +77 -0
- package/dist/cmd/dev/download.js.map +1 -0
- package/dist/cmd/dev/index.js +745 -0
- package/dist/cmd/dev/index.js.map +1 -0
- package/dist/cmd/dev/sync.js +229 -0
- package/dist/cmd/dev/sync.js.map +1 -0
- package/dist/cmd/dev/templates.js +75 -0
- package/dist/cmd/dev/templates.js.map +1 -0
- package/dist/cmd/index.js +49 -0
- package/dist/cmd/index.js.map +1 -0
- package/dist/cmd/profile/create.js +89 -0
- package/dist/cmd/profile/create.js.map +1 -0
- package/dist/cmd/profile/delete.js +63 -0
- package/dist/cmd/profile/delete.js.map +1 -0
- package/dist/cmd/profile/index.js +14 -0
- package/dist/cmd/profile/index.js.map +1 -0
- package/dist/cmd/profile/list.js +28 -0
- package/dist/cmd/profile/list.js.map +1 -0
- package/dist/cmd/profile/show.js +68 -0
- package/dist/cmd/profile/show.js.map +1 -0
- package/dist/cmd/profile/use.js +37 -0
- package/dist/cmd/profile/use.js.map +1 -0
- package/dist/cmd/project/create.js +92 -0
- package/dist/cmd/project/create.js.map +1 -0
- package/dist/cmd/project/delete.js +117 -0
- package/dist/cmd/project/delete.js.map +1 -0
- package/dist/cmd/project/download.js +217 -0
- package/dist/cmd/project/download.js.map +1 -0
- package/dist/cmd/project/index.js +12 -0
- package/dist/cmd/project/index.js.map +1 -0
- package/dist/cmd/project/list.js +51 -0
- package/dist/cmd/project/list.js.map +1 -0
- package/dist/cmd/project/show.js +54 -0
- package/dist/cmd/project/show.js.map +1 -0
- package/dist/cmd/project/template-flow.js +315 -0
- package/dist/cmd/project/template-flow.js.map +1 -0
- package/dist/cmd/project/templates.js +31 -0
- package/dist/cmd/project/templates.js.map +1 -0
- package/dist/cmd/repl/index.js +444 -0
- package/dist/cmd/repl/index.js.map +1 -0
- package/dist/cmd/version/index.js +29 -0
- package/dist/cmd/version/index.js.map +1 -0
- package/dist/command-prefix.js +37 -0
- package/dist/command-prefix.js.map +1 -0
- package/dist/config.js +536 -0
- package/dist/config.js.map +1 -0
- package/dist/crypto/box.js +382 -0
- package/dist/crypto/box.js.map +1 -0
- package/dist/crypto/box.test.js +317 -0
- package/dist/crypto/box.test.js.map +1 -0
- package/dist/download.js +64 -0
- package/dist/download.js.map +1 -0
- package/dist/env-util.js +219 -0
- package/dist/env-util.js.map +1 -0
- package/dist/env-util.test.js +146 -0
- package/dist/env-util.test.js.map +1 -0
- package/dist/errors.js +177 -0
- package/dist/errors.js.map +1 -0
- package/dist/explain.js +90 -0
- package/dist/explain.js.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/json.js +29 -0
- package/dist/json.js.map +1 -0
- package/dist/legacy-check.js +104 -0
- package/dist/legacy-check.js.map +1 -0
- package/dist/output.js +207 -0
- package/dist/output.js.map +1 -0
- package/dist/repl.js +1176 -0
- package/dist/repl.js.map +1 -0
- package/dist/runtime.js +19 -0
- package/dist/runtime.js.map +1 -0
- package/dist/schema-generator.js +289 -0
- package/dist/schema-generator.js.map +1 -0
- package/dist/schema-parser.js +145 -0
- package/dist/schema-parser.js.map +1 -0
- package/dist/sound.js +44 -0
- package/dist/sound.js.map +1 -0
- package/dist/steps.js +293 -0
- package/dist/steps.js.map +1 -0
- package/dist/terminal.js +130 -0
- package/dist/terminal.js.map +1 -0
- package/dist/tui.js +1124 -0
- package/dist/tui.js.map +1 -0
- package/dist/types.js +163 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/detectSubagent.js +25 -0
- package/dist/utils/detectSubagent.js.map +1 -0
- package/dist/utils/format.js +21 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/utils/zip.js +33 -0
- package/dist/utils/zip.js.map +1 -0
- package/dist/version.js +24 -0
- package/dist/version.js.map +1 -0
- package/package.json +6 -6
- package/src/banner.ts +1 -1
- package/src/cmd/build/index.ts +18 -22
- package/src/cmd/build/plugin.ts +95 -64
- package/src/cmd/cloud/session/get.ts +20 -14
- package/src/cmd/cloud/session/list.ts +1 -1
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { createSubcommand } from '../../../types';
|
|
3
|
+
import * as tui from '../../../tui';
|
|
4
|
+
import { projectEnvUpdate } from '@agentuity/server';
|
|
5
|
+
import { findEnvFile, readEnvFile, writeEnvFile, filterAgentuitySdkKeys, mergeEnvVars, splitEnvAndSecrets, looksLikeSecret, } from '../../../env-util';
|
|
6
|
+
import { getCommand } from '../../../command-prefix';
|
|
7
|
+
const EnvImportResponseSchema = z.object({
|
|
8
|
+
success: z.boolean().describe('Whether import succeeded'),
|
|
9
|
+
imported: z.number().describe('Number of items imported'),
|
|
10
|
+
skipped: z.number().describe('Number of items skipped'),
|
|
11
|
+
path: z.string().describe('Local file path where variables were saved'),
|
|
12
|
+
file: z.string().describe('Source file path'),
|
|
13
|
+
});
|
|
14
|
+
export const importSubcommand = createSubcommand({
|
|
15
|
+
name: 'import',
|
|
16
|
+
description: 'Import environment variables from a file to cloud and local .env.production',
|
|
17
|
+
tags: [
|
|
18
|
+
'mutating',
|
|
19
|
+
'creates-resource',
|
|
20
|
+
'slow',
|
|
21
|
+
'api-intensive',
|
|
22
|
+
'requires-auth',
|
|
23
|
+
'requires-project',
|
|
24
|
+
],
|
|
25
|
+
idempotent: false,
|
|
26
|
+
requires: { auth: true, project: true, apiClient: true },
|
|
27
|
+
schema: {
|
|
28
|
+
args: z.object({
|
|
29
|
+
file: z.string().describe('path to the .env file to import'),
|
|
30
|
+
}),
|
|
31
|
+
response: EnvImportResponseSchema,
|
|
32
|
+
},
|
|
33
|
+
async handler(ctx) {
|
|
34
|
+
const { args, apiClient, project, projectDir } = ctx;
|
|
35
|
+
// Read the import file
|
|
36
|
+
const importedEnv = await readEnvFile(args.file);
|
|
37
|
+
if (Object.keys(importedEnv).length === 0) {
|
|
38
|
+
tui.warning(`No environment variables found in ${args.file}`);
|
|
39
|
+
return {
|
|
40
|
+
success: false,
|
|
41
|
+
imported: 0,
|
|
42
|
+
skipped: 0,
|
|
43
|
+
path: '',
|
|
44
|
+
file: args.file,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
// Filter out AGENTUITY_ prefixed keys
|
|
48
|
+
const filteredEnv = filterAgentuitySdkKeys(importedEnv);
|
|
49
|
+
if (Object.keys(filteredEnv).length === 0) {
|
|
50
|
+
tui.warning('No valid environment variables to import (all were AGENTUITY_ prefixed)');
|
|
51
|
+
return {
|
|
52
|
+
success: false,
|
|
53
|
+
imported: 0,
|
|
54
|
+
skipped: Object.keys(importedEnv).length,
|
|
55
|
+
path: '',
|
|
56
|
+
file: args.file,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
// Check for potential secrets in the imported variables
|
|
60
|
+
const potentialSecrets = [];
|
|
61
|
+
for (const [key, value] of Object.entries(filteredEnv)) {
|
|
62
|
+
if (looksLikeSecret(key, value)) {
|
|
63
|
+
potentialSecrets.push(key);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
if (potentialSecrets.length > 0) {
|
|
67
|
+
tui.warning(`Found ${potentialSecrets.length} variable(s) that look like they should be secrets:`);
|
|
68
|
+
for (const key of potentialSecrets) {
|
|
69
|
+
tui.info(` • ${key}`);
|
|
70
|
+
}
|
|
71
|
+
tui.info(`\nSecrets should be stored using: ${getCommand('secret import <file>')}`);
|
|
72
|
+
tui.info('This keeps them more secure and properly masked in the cloud.');
|
|
73
|
+
const response = await tui.confirm('Do you still want to import these as regular environment variables?', false);
|
|
74
|
+
if (!response) {
|
|
75
|
+
tui.info(`Cancelled. Use "${getCommand('secret import')}" to store these as secrets instead.`);
|
|
76
|
+
return {
|
|
77
|
+
success: false,
|
|
78
|
+
imported: 0,
|
|
79
|
+
skipped: Object.keys(filteredEnv).length,
|
|
80
|
+
path: '',
|
|
81
|
+
file: args.file,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// Split into env and secrets based on key naming conventions
|
|
86
|
+
const { env: normalEnv, secrets } = splitEnvAndSecrets(filteredEnv);
|
|
87
|
+
// Push to cloud
|
|
88
|
+
await tui.spinner('Importing environment variables to cloud', () => {
|
|
89
|
+
return projectEnvUpdate(apiClient, {
|
|
90
|
+
id: project.projectId,
|
|
91
|
+
env: normalEnv,
|
|
92
|
+
secrets: secrets,
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
// Merge with local .env.production file
|
|
96
|
+
const localEnvPath = await findEnvFile(projectDir);
|
|
97
|
+
const localEnv = await readEnvFile(localEnvPath);
|
|
98
|
+
const mergedEnv = mergeEnvVars(localEnv, filteredEnv);
|
|
99
|
+
await writeEnvFile(localEnvPath, mergedEnv, {
|
|
100
|
+
skipKeys: Object.keys(mergedEnv).filter((k) => k.startsWith('AGENTUITY_')),
|
|
101
|
+
});
|
|
102
|
+
const count = Object.keys(filteredEnv).length;
|
|
103
|
+
tui.success(`Imported ${count} environment variable${count !== 1 ? 's' : ''} from ${args.file} to cloud and ${localEnvPath}`);
|
|
104
|
+
return {
|
|
105
|
+
success: true,
|
|
106
|
+
imported: count,
|
|
107
|
+
skipped: Object.keys(importedEnv).length - count,
|
|
108
|
+
path: localEnvPath,
|
|
109
|
+
file: args.file,
|
|
110
|
+
};
|
|
111
|
+
},
|
|
112
|
+
});
|
|
113
|
+
//# sourceMappingURL=import.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import.js","sourceRoot":"","sources":["../../../../src/cmd/cloud/env/import.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { createCommand } from '../../../types';
|
|
2
|
+
import { pullSubcommand } from './pull';
|
|
3
|
+
import { pushSubcommand } from './push';
|
|
4
|
+
import { setSubcommand } from './set';
|
|
5
|
+
import { getSubcommand } from './get';
|
|
6
|
+
import { deleteSubcommand } from './delete';
|
|
7
|
+
import { importSubcommand } from './import';
|
|
8
|
+
import { listSubcommand } from './list';
|
|
9
|
+
export const command = createCommand({
|
|
10
|
+
name: 'env',
|
|
11
|
+
description: 'Manage environment variables for your project',
|
|
12
|
+
tags: ['fast', 'requires-auth', 'requires-project'],
|
|
13
|
+
subcommands: [
|
|
14
|
+
listSubcommand,
|
|
15
|
+
pullSubcommand,
|
|
16
|
+
pushSubcommand,
|
|
17
|
+
setSubcommand,
|
|
18
|
+
getSubcommand,
|
|
19
|
+
deleteSubcommand,
|
|
20
|
+
importSubcommand,
|
|
21
|
+
],
|
|
22
|
+
});
|
|
23
|
+
export default command;
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cmd/cloud/env/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAExC,MAAM,CAAC,MAAM,OAAO,GAAG,aAAa,CAAC;IACpC,IAAI,EAAE,KAAK;IACX,WAAW,EAAE,+CAA+C;IAC5D,IAAI,EAAE,CAAC,MAAM,EAAE,eAAe,EAAE,kBAAkB,CAAC;IACnD,WAAW,EAAE;QACZ,cAAc;QACd,cAAc;QACd,cAAc;QACd,aAAa;QACb,aAAa;QACb,gBAAgB;QAChB,gBAAgB;KAChB;CACD,CAAC,CAAC;AACH,eAAe,OAAO,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { createSubcommand } from '../../../types';
|
|
3
|
+
import * as tui from '../../../tui';
|
|
4
|
+
import { projectGet } from '@agentuity/server';
|
|
5
|
+
import { maskSecret } from '../../../env-util';
|
|
6
|
+
import { getCommand } from '../../../command-prefix';
|
|
7
|
+
const EnvListResponseSchema = z.record(z.string(), z.string().describe('Environment variable value'));
|
|
8
|
+
export const listSubcommand = createSubcommand({
|
|
9
|
+
name: 'list',
|
|
10
|
+
aliases: ['ls'],
|
|
11
|
+
description: 'List all environment variables',
|
|
12
|
+
tags: ['read-only', 'fast', 'requires-auth', 'requires-project'],
|
|
13
|
+
examples: [getCommand('env list'), getCommand('env list --mask')],
|
|
14
|
+
requires: { auth: true, project: true, apiClient: true },
|
|
15
|
+
idempotent: true,
|
|
16
|
+
schema: {
|
|
17
|
+
options: z.object({
|
|
18
|
+
mask: z
|
|
19
|
+
.boolean()
|
|
20
|
+
.default(false)
|
|
21
|
+
.describe('mask the values in output (default: false for env vars)'),
|
|
22
|
+
}),
|
|
23
|
+
response: EnvListResponseSchema,
|
|
24
|
+
},
|
|
25
|
+
async handler(ctx) {
|
|
26
|
+
const { opts, apiClient, project } = ctx;
|
|
27
|
+
// Fetch project with unmasked secrets
|
|
28
|
+
const projectData = await tui.spinner('Fetching environment variables', () => {
|
|
29
|
+
return projectGet(apiClient, { id: project.projectId, mask: false });
|
|
30
|
+
});
|
|
31
|
+
const env = projectData.env || {};
|
|
32
|
+
if (Object.keys(env).length === 0) {
|
|
33
|
+
tui.info('No environment variables found');
|
|
34
|
+
return {};
|
|
35
|
+
}
|
|
36
|
+
// Display the variables
|
|
37
|
+
if (process.stdout.isTTY) {
|
|
38
|
+
tui.newline();
|
|
39
|
+
tui.info(`Environment Variables (${Object.keys(env).length}):`);
|
|
40
|
+
tui.newline();
|
|
41
|
+
}
|
|
42
|
+
const sortedKeys = Object.keys(env).sort();
|
|
43
|
+
// For env vars, masking should be explicitly opted-in (default false)
|
|
44
|
+
const shouldMask = opts?.mask === true;
|
|
45
|
+
for (const key of sortedKeys) {
|
|
46
|
+
const value = env[key];
|
|
47
|
+
const displayValue = shouldMask ? maskSecret(value) : value;
|
|
48
|
+
if (process.stdout.isTTY) {
|
|
49
|
+
console.log(`${tui.bold(key)}=${displayValue}`);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
console.log(`${key}=${displayValue}`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return env;
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../src/cmd/cloud/env/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { createSubcommand } from '../../../types';
|
|
4
|
+
import * as tui from '../../../tui';
|
|
5
|
+
import { projectGet } from '@agentuity/server';
|
|
6
|
+
import { findEnvFile, findExistingEnvFile, readEnvFile, writeEnvFile, mergeEnvVars, } from '../../../env-util';
|
|
7
|
+
import { getCommand } from '../../../command-prefix';
|
|
8
|
+
const EnvPullResponseSchema = z.object({
|
|
9
|
+
success: z.boolean().describe('Whether pull succeeded'),
|
|
10
|
+
pulled: z.number().describe('Number of items pulled'),
|
|
11
|
+
path: z.string().describe('Local file path where variables were saved'),
|
|
12
|
+
force: z.boolean().describe('Whether force mode was used'),
|
|
13
|
+
});
|
|
14
|
+
export const pullSubcommand = createSubcommand({
|
|
15
|
+
name: 'pull',
|
|
16
|
+
description: 'Pull environment variables from cloud to local .env.production file',
|
|
17
|
+
tags: ['slow', 'requires-auth', 'requires-project'],
|
|
18
|
+
idempotent: true,
|
|
19
|
+
examples: [getCommand('env pull'), getCommand('env pull --force')],
|
|
20
|
+
requires: { auth: true, project: true, apiClient: true },
|
|
21
|
+
prerequisites: ['cloud deploy'],
|
|
22
|
+
schema: {
|
|
23
|
+
options: z.object({
|
|
24
|
+
force: z.boolean().default(false).describe('overwrite local values with cloud values'),
|
|
25
|
+
}),
|
|
26
|
+
response: EnvPullResponseSchema,
|
|
27
|
+
},
|
|
28
|
+
async handler(ctx) {
|
|
29
|
+
const { opts, apiClient, project, projectDir } = ctx;
|
|
30
|
+
// Fetch project with unmasked secrets
|
|
31
|
+
const projectData = await tui.spinner('Pulling environment variables from cloud', () => {
|
|
32
|
+
return projectGet(apiClient, { id: project.projectId, mask: false });
|
|
33
|
+
});
|
|
34
|
+
const cloudEnv = projectData.env || {};
|
|
35
|
+
// Read current local env from existing file (.env.production or .env)
|
|
36
|
+
const existingEnvPath = await findExistingEnvFile(projectDir);
|
|
37
|
+
const localEnv = await readEnvFile(existingEnvPath);
|
|
38
|
+
// Target file is always .env.production
|
|
39
|
+
const targetEnvPath = await findEnvFile(projectDir);
|
|
40
|
+
// Merge: cloud values override local if force=true, otherwise keep local
|
|
41
|
+
let mergedEnv;
|
|
42
|
+
if (opts?.force) {
|
|
43
|
+
// Cloud values take priority
|
|
44
|
+
mergedEnv = mergeEnvVars(localEnv, cloudEnv);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
// Local values take priority (only add new keys from cloud)
|
|
48
|
+
mergedEnv = mergeEnvVars(cloudEnv, localEnv);
|
|
49
|
+
}
|
|
50
|
+
// Write to .env.production (skip AGENTUITY_ keys)
|
|
51
|
+
await writeEnvFile(targetEnvPath, mergedEnv, {
|
|
52
|
+
skipKeys: Object.keys(mergedEnv).filter((k) => k.startsWith('AGENTUITY_')),
|
|
53
|
+
});
|
|
54
|
+
// Write AGENTUITY_SDK_KEY to .env if present and missing locally
|
|
55
|
+
if (projectData.api_key) {
|
|
56
|
+
const dotEnvPath = join(projectDir, '.env');
|
|
57
|
+
const dotEnv = await readEnvFile(dotEnvPath);
|
|
58
|
+
if (!dotEnv.AGENTUITY_SDK_KEY) {
|
|
59
|
+
dotEnv.AGENTUITY_SDK_KEY = projectData.api_key;
|
|
60
|
+
await writeEnvFile(dotEnvPath, dotEnv, {
|
|
61
|
+
addComment: (key) => {
|
|
62
|
+
if (key === 'AGENTUITY_SDK_KEY') {
|
|
63
|
+
return 'AGENTUITY_SDK_KEY is a sensitive value and should not be committed to version control.';
|
|
64
|
+
}
|
|
65
|
+
return null;
|
|
66
|
+
},
|
|
67
|
+
});
|
|
68
|
+
tui.info(`Wrote AGENTUITY_SDK_KEY to ${dotEnvPath}`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
const count = Object.keys(cloudEnv).length;
|
|
72
|
+
tui.success(`Pulled ${count} environment variable${count !== 1 ? 's' : ''} to ${targetEnvPath}`);
|
|
73
|
+
return {
|
|
74
|
+
success: true,
|
|
75
|
+
pulled: count,
|
|
76
|
+
path: targetEnvPath,
|
|
77
|
+
force: opts?.force ?? false,
|
|
78
|
+
};
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
//# sourceMappingURL=pull.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../../../src/cmd/cloud/env/pull.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { createSubcommand } from '../../../types';
|
|
3
|
+
import * as tui from '../../../tui';
|
|
4
|
+
import { projectEnvUpdate } from '@agentuity/server';
|
|
5
|
+
import { findExistingEnvFile, readEnvFile, filterAgentuitySdkKeys } from '../../../env-util';
|
|
6
|
+
import { getCommand } from '../../../command-prefix';
|
|
7
|
+
const EnvPushResponseSchema = z.object({
|
|
8
|
+
success: z.boolean().describe('Whether push succeeded'),
|
|
9
|
+
pushed: z.number().describe('Number of items pushed'),
|
|
10
|
+
source: z.string().describe('Source file path'),
|
|
11
|
+
});
|
|
12
|
+
export const pushSubcommand = createSubcommand({
|
|
13
|
+
name: 'push',
|
|
14
|
+
description: 'Push environment variables from local .env.production file to cloud',
|
|
15
|
+
tags: [
|
|
16
|
+
'mutating',
|
|
17
|
+
'updates-resource',
|
|
18
|
+
'slow',
|
|
19
|
+
'api-intensive',
|
|
20
|
+
'requires-auth',
|
|
21
|
+
'requires-project',
|
|
22
|
+
],
|
|
23
|
+
idempotent: true,
|
|
24
|
+
examples: [getCommand('env push')],
|
|
25
|
+
requires: { auth: true, project: true, apiClient: true },
|
|
26
|
+
prerequisites: ['env set'],
|
|
27
|
+
schema: {
|
|
28
|
+
response: EnvPushResponseSchema,
|
|
29
|
+
},
|
|
30
|
+
async handler(ctx) {
|
|
31
|
+
const { apiClient, project, projectDir } = ctx;
|
|
32
|
+
// Read local env file (prefer .env.production, fallback to .env)
|
|
33
|
+
const envFilePath = await findExistingEnvFile(projectDir);
|
|
34
|
+
const localEnv = await readEnvFile(envFilePath);
|
|
35
|
+
// Filter out AGENTUITY_ prefixed keys (don't push SDK keys)
|
|
36
|
+
const filteredEnv = filterAgentuitySdkKeys(localEnv);
|
|
37
|
+
if (Object.keys(filteredEnv).length === 0) {
|
|
38
|
+
tui.warning('No environment variables to push');
|
|
39
|
+
return {
|
|
40
|
+
success: false,
|
|
41
|
+
pushed: 0,
|
|
42
|
+
source: envFilePath,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
// Push to cloud
|
|
46
|
+
await tui.spinner('Pushing environment variables to cloud', () => {
|
|
47
|
+
return projectEnvUpdate(apiClient, {
|
|
48
|
+
id: project.projectId,
|
|
49
|
+
env: filteredEnv,
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
const count = Object.keys(filteredEnv).length;
|
|
53
|
+
tui.success(`Pushed ${count} environment variable${count !== 1 ? 's' : ''} to cloud`);
|
|
54
|
+
return {
|
|
55
|
+
success: true,
|
|
56
|
+
pushed: count,
|
|
57
|
+
source: envFilePath,
|
|
58
|
+
};
|
|
59
|
+
},
|
|
60
|
+
});
|
|
61
|
+
//# sourceMappingURL=push.js.map
|
|
@@ -0,0 +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,EAAE,mBAAmB,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC7F,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IACvD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IACrD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;CAC/C,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAgB,CAAC;IAC9C,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,qEAAqE;IAClF,IAAI,EAAE;QACL,UAAU;QACV,kBAAkB;QAClB,MAAM;QACN,eAAe;QACf,eAAe;QACf,kBAAkB;KAClB;IACD,UAAU,EAAE,IAAI;IAChB,QAAQ,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAClC,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE;IACxD,aAAa,EAAE,CAAC,SAAS,CAAC;IAC1B,MAAM,EAAE;QACP,QAAQ,EAAE,qBAAqB;KAC/B;IAED,KAAK,CAAC,OAAO,CAAC,GAAG;QAChB,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC;QAE/C,iEAAiE;QACjE,MAAM,WAAW,GAAG,MAAM,mBAAmB,CAAC,UAAU,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,WAAW,CAAC,CAAC;QAEhD,4DAA4D;QAC5D,MAAM,WAAW,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;QAErD,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3C,GAAG,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC;YAChD,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,CAAC;gBACT,MAAM,EAAE,WAAW;aACnB,CAAC;QACH,CAAC;QAED,gBAAgB;QAChB,MAAM,GAAG,CAAC,OAAO,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChE,OAAO,gBAAgB,CAAC,SAAS,EAAE;gBAClC,EAAE,EAAE,OAAO,CAAC,SAAS;gBACrB,GAAG,EAAE,WAAW;aAChB,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC;QAC9C,GAAG,CAAC,OAAO,CAAC,UAAU,KAAK,wBAAwB,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;QAEtF,OAAO;YACN,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,WAAW;SACnB,CAAC;IACH,CAAC;CACD,CAAC,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { createSubcommand } from '../../../types';
|
|
3
|
+
import * as tui from '../../../tui';
|
|
4
|
+
import { projectEnvUpdate } from '@agentuity/server';
|
|
5
|
+
import { findEnvFile, readEnvFile, writeEnvFile, filterAgentuitySdkKeys, looksLikeSecret, } from '../../../env-util';
|
|
6
|
+
import { getCommand } from '../../../command-prefix';
|
|
7
|
+
const EnvSetResponseSchema = z.object({
|
|
8
|
+
success: z.boolean().describe('Whether the operation succeeded'),
|
|
9
|
+
key: z.string().describe('Environment variable key'),
|
|
10
|
+
path: z.string().describe('Local file path where env var was saved'),
|
|
11
|
+
});
|
|
12
|
+
export const setSubcommand = createSubcommand({
|
|
13
|
+
name: 'set',
|
|
14
|
+
description: 'Set an environment variable',
|
|
15
|
+
tags: ['mutating', 'updates-resource', 'slow', 'requires-auth', 'requires-project'],
|
|
16
|
+
idempotent: true,
|
|
17
|
+
requires: { auth: true, project: true, apiClient: true },
|
|
18
|
+
examples: [
|
|
19
|
+
getCommand('env set NODE_ENV production'),
|
|
20
|
+
getCommand('env set PORT 3000'),
|
|
21
|
+
getCommand('env set LOG_LEVEL debug'),
|
|
22
|
+
],
|
|
23
|
+
schema: {
|
|
24
|
+
args: z.object({
|
|
25
|
+
key: z.string().describe('the environment variable key'),
|
|
26
|
+
value: z.string().describe('the environment variable value'),
|
|
27
|
+
}),
|
|
28
|
+
response: EnvSetResponseSchema,
|
|
29
|
+
},
|
|
30
|
+
async handler(ctx) {
|
|
31
|
+
const { args, apiClient, project, projectDir } = ctx;
|
|
32
|
+
// Validate key doesn't start with AGENTUITY_
|
|
33
|
+
if (args.key.startsWith('AGENTUITY_')) {
|
|
34
|
+
tui.fatal('Cannot set AGENTUITY_ prefixed variables. These are reserved for system use.');
|
|
35
|
+
}
|
|
36
|
+
// Detect if this looks like a secret
|
|
37
|
+
if (looksLikeSecret(args.key, args.value)) {
|
|
38
|
+
tui.warning(`The variable '${args.key}' looks like it should be a secret.`);
|
|
39
|
+
tui.info(`Secrets should be stored using: ${getCommand('secret set <key> <value>')}`);
|
|
40
|
+
tui.info('This keeps them more secure and properly masked in the cloud.');
|
|
41
|
+
const response = await tui.confirm('Do you still want to store this as a regular environment variable?', false);
|
|
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
|
+
};
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// Set in cloud
|
|
52
|
+
await tui.spinner('Setting environment variable in cloud', () => {
|
|
53
|
+
return projectEnvUpdate(apiClient, {
|
|
54
|
+
id: project.projectId,
|
|
55
|
+
env: { [args.key]: args.value },
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
// Update local .env.production file
|
|
59
|
+
const envFilePath = await findEnvFile(projectDir);
|
|
60
|
+
const currentEnv = await readEnvFile(envFilePath);
|
|
61
|
+
currentEnv[args.key] = args.value;
|
|
62
|
+
// Filter out AGENTUITY_ keys before writing
|
|
63
|
+
const filteredEnv = filterAgentuitySdkKeys(currentEnv);
|
|
64
|
+
await writeEnvFile(envFilePath, filteredEnv);
|
|
65
|
+
tui.success(`Environment variable '${args.key}' set successfully (cloud + ${envFilePath})`);
|
|
66
|
+
return {
|
|
67
|
+
success: true,
|
|
68
|
+
key: args.key,
|
|
69
|
+
path: envFilePath,
|
|
70
|
+
};
|
|
71
|
+
},
|
|
72
|
+
});
|
|
73
|
+
//# sourceMappingURL=set.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"set.js","sourceRoot":"","sources":["../../../../src/cmd/cloud/env/set.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { createCommand } from '../../types';
|
|
2
|
+
import { deploySubcommand } from './deploy';
|
|
3
|
+
import { resourceSubcommand } from './resource';
|
|
4
|
+
import { sessionCommand } from './session';
|
|
5
|
+
import { sshSubcommand } from './ssh';
|
|
6
|
+
import { scpSubcommand } from './scp';
|
|
7
|
+
import { deploymentCommand } from './deployment';
|
|
8
|
+
import keyvalueCommand from './keyvalue';
|
|
9
|
+
import agentsCommand from './agents';
|
|
10
|
+
import objectstoreCommand from './objectstore';
|
|
11
|
+
import envCommand from './env';
|
|
12
|
+
import secretCommand from './secret';
|
|
13
|
+
export const command = createCommand({
|
|
14
|
+
name: 'cloud',
|
|
15
|
+
description: 'Cloud related commands',
|
|
16
|
+
tags: ['slow', 'requires-auth'],
|
|
17
|
+
subcommands: [
|
|
18
|
+
keyvalueCommand,
|
|
19
|
+
agentsCommand,
|
|
20
|
+
objectstoreCommand,
|
|
21
|
+
envCommand,
|
|
22
|
+
secretCommand,
|
|
23
|
+
deploySubcommand,
|
|
24
|
+
resourceSubcommand,
|
|
25
|
+
sessionCommand,
|
|
26
|
+
sshSubcommand,
|
|
27
|
+
scpSubcommand,
|
|
28
|
+
deploymentCommand,
|
|
29
|
+
],
|
|
30
|
+
});
|
|
31
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +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,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,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,aAAa,MAAM,UAAU,CAAC;AACrC,OAAO,kBAAkB,MAAM,eAAe,CAAC;AAC/C,OAAO,UAAU,MAAM,OAAO,CAAC;AAC/B,OAAO,aAAa,MAAM,UAAU,CAAC;AAErC,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,WAAW,EAAE;QACZ,eAAe;QACf,aAAa;QACb,kBAAkB;QAClB,UAAU;QACV,aAAa;QACb,gBAAgB;QAChB,kBAAkB;QAClB,cAAc;QACd,aAAa;QACb,aAAa;QACb,iBAAiB;KACjB;CACD,CAAC,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { createCommand } from '../../../types';
|
|
3
|
+
import * as tui from '../../../tui';
|
|
4
|
+
import { createStorageAdapter } from './util';
|
|
5
|
+
import { getCommand } from '../../../command-prefix';
|
|
6
|
+
export const createNamespaceSubcommand = createCommand({
|
|
7
|
+
name: 'create-namespace',
|
|
8
|
+
aliases: ['create'],
|
|
9
|
+
description: 'Create a new keyvalue namespace',
|
|
10
|
+
tags: ['mutating', 'creates-resource', 'slow', 'requires-auth'],
|
|
11
|
+
idempotent: false,
|
|
12
|
+
requires: { auth: true, project: true },
|
|
13
|
+
examples: [
|
|
14
|
+
`${getCommand('kv create-namespace production')} - Create production namespace`,
|
|
15
|
+
`${getCommand('kv create staging')} - Create staging namespace (using alias)`,
|
|
16
|
+
`${getCommand('kv create cache')} - Create cache namespace`,
|
|
17
|
+
],
|
|
18
|
+
schema: {
|
|
19
|
+
args: z.object({
|
|
20
|
+
name: z.string().min(1).max(64).describe('the namespace name'),
|
|
21
|
+
}),
|
|
22
|
+
response: z.object({
|
|
23
|
+
success: z.boolean().describe('Whether the operation succeeded'),
|
|
24
|
+
namespace: z.string().describe('Namespace name'),
|
|
25
|
+
message: z.string().optional().describe('Success message'),
|
|
26
|
+
}),
|
|
27
|
+
},
|
|
28
|
+
async handler(ctx) {
|
|
29
|
+
const { args } = ctx;
|
|
30
|
+
const kv = await createStorageAdapter(ctx);
|
|
31
|
+
await kv.createNamespace(args.name);
|
|
32
|
+
tui.success(`Namespace ${tui.bold(args.name)} created`);
|
|
33
|
+
return {
|
|
34
|
+
success: true,
|
|
35
|
+
namespace: args.name,
|
|
36
|
+
message: `Namespace ${args.name} created`,
|
|
37
|
+
};
|
|
38
|
+
},
|
|
39
|
+
});
|
|
40
|
+
export default createNamespaceSubcommand;
|
|
41
|
+
//# sourceMappingURL=create-namespace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-namespace.js","sourceRoot":"","sources":["../../../../src/cmd/cloud/keyvalue/create-namespace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,MAAM,CAAC,MAAM,yBAAyB,GAAG,aAAa,CAAC;IACtD,IAAI,EAAE,kBAAkB;IACxB,OAAO,EAAE,CAAC,QAAQ,CAAC;IACnB,WAAW,EAAE,iCAAiC;IAC9C,IAAI,EAAE,CAAC,UAAU,EAAE,kBAAkB,EAAE,MAAM,EAAE,eAAe,CAAC;IAC/D,UAAU,EAAE,KAAK;IACjB,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;IACvC,QAAQ,EAAE;QACT,GAAG,UAAU,CAAC,gCAAgC,CAAC,gCAAgC;QAC/E,GAAG,UAAU,CAAC,mBAAmB,CAAC,2CAA2C;QAC7E,GAAG,UAAU,CAAC,iBAAiB,CAAC,2BAA2B;KAC3D;IACD,MAAM,EAAE;QACP,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;YACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC;SAC9D,CAAC;QACF,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC;YAClB,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;YAChE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YAChD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;SAC1D,CAAC;KACF;IAED,KAAK,CAAC,OAAO,CAAC,GAAG;QAChB,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC;QACrB,MAAM,EAAE,GAAG,MAAM,oBAAoB,CAAC,GAAG,CAAC,CAAC;QAE3C,MAAM,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,GAAG,CAAC,OAAO,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAExD,OAAO;YACN,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,IAAI,CAAC,IAAI;YACpB,OAAO,EAAE,aAAa,IAAI,CAAC,IAAI,UAAU;SACzC,CAAC;IACH,CAAC;CACD,CAAC,CAAC;AAEH,eAAe,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { createCommand } from '../../../types';
|
|
3
|
+
import { ErrorCode } from '../../../errors';
|
|
4
|
+
import * as tui from '../../../tui';
|
|
5
|
+
import { createStorageAdapter } from './util';
|
|
6
|
+
import { getCommand } from '../../../command-prefix';
|
|
7
|
+
export const deleteNamespaceSubcommand = createCommand({
|
|
8
|
+
name: 'delete-namespace',
|
|
9
|
+
aliases: ['rm-namespace'],
|
|
10
|
+
description: 'Delete a keyvalue namespace and all its keys',
|
|
11
|
+
tags: ['destructive', 'deletes-resource', 'slow', 'requires-auth', 'requires-project'],
|
|
12
|
+
idempotent: true,
|
|
13
|
+
requires: { auth: true, project: true },
|
|
14
|
+
examples: [
|
|
15
|
+
`${getCommand('kv delete-namespace staging')} - Delete staging namespace (interactive)`,
|
|
16
|
+
`${getCommand('kv rm-namespace cache --confirm')} - Delete cache without confirmation`,
|
|
17
|
+
`${getCommand('kv delete-namespace production --confirm')} - Force delete production`,
|
|
18
|
+
],
|
|
19
|
+
schema: {
|
|
20
|
+
args: z.object({
|
|
21
|
+
name: z.string().min(1).max(64).describe('the namespace name'),
|
|
22
|
+
confirm: z
|
|
23
|
+
.boolean()
|
|
24
|
+
.optional()
|
|
25
|
+
.default(false)
|
|
26
|
+
.describe('if true will not prompt for confirmation'),
|
|
27
|
+
}),
|
|
28
|
+
response: z.object({
|
|
29
|
+
success: z.boolean().describe('Whether the deletion succeeded'),
|
|
30
|
+
namespace: z.string().describe('Deleted namespace name'),
|
|
31
|
+
message: z.string().optional().describe('Confirmation message'),
|
|
32
|
+
}),
|
|
33
|
+
},
|
|
34
|
+
async handler(ctx) {
|
|
35
|
+
const { args } = ctx;
|
|
36
|
+
const kv = await createStorageAdapter(ctx);
|
|
37
|
+
if (!args.confirm) {
|
|
38
|
+
if (!process.stdin.isTTY) {
|
|
39
|
+
tui.fatal('No TTY and --confirm is not set. Refusing to delete', ErrorCode.VALIDATION_FAILED);
|
|
40
|
+
}
|
|
41
|
+
tui.warning(`This will delete namespace ${tui.bold(args.name)} and ALL its keys.`);
|
|
42
|
+
const confirm = await new Promise((resolve) => {
|
|
43
|
+
process.stdout.write('Are you sure? (yes/no): ');
|
|
44
|
+
process.stdin.once('data', (data) => {
|
|
45
|
+
const answer = data.toString().trim().toLowerCase();
|
|
46
|
+
resolve(answer === 'yes' || answer === 'y');
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
if (!confirm) {
|
|
50
|
+
tui.info('Cancelled');
|
|
51
|
+
return { success: false, namespace: args.name, message: 'Cancelled' };
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
await kv.deleteNamespace(args.name);
|
|
55
|
+
tui.success(`Namespace ${tui.bold(args.name)} deleted`);
|
|
56
|
+
return {
|
|
57
|
+
success: true,
|
|
58
|
+
namespace: args.name,
|
|
59
|
+
message: `Namespace ${args.name} deleted`,
|
|
60
|
+
};
|
|
61
|
+
},
|
|
62
|
+
});
|
|
63
|
+
export default deleteNamespaceSubcommand;
|
|
64
|
+
//# sourceMappingURL=delete-namespace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete-namespace.js","sourceRoot":"","sources":["../../../../src/cmd/cloud/keyvalue/delete-namespace.ts"],"names":[],"mappings":"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"}
|