@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.
Files changed (299) hide show
  1. package/dist/api.js +68 -0
  2. package/dist/api.js.map +1 -0
  3. package/dist/auth.js +225 -0
  4. package/dist/auth.js.map +1 -0
  5. package/dist/banner.js +35 -0
  6. package/dist/banner.js.map +1 -0
  7. package/dist/cli-logger.js +72 -0
  8. package/dist/cli-logger.js.map +1 -0
  9. package/dist/cli.js +822 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/cmd/ai/capabilities/index.js +10 -0
  12. package/dist/cmd/ai/capabilities/index.js.map +1 -0
  13. package/dist/cmd/ai/capabilities/show.js +221 -0
  14. package/dist/cmd/ai/capabilities/show.js.map +1 -0
  15. package/dist/cmd/ai/index.js +11 -0
  16. package/dist/cmd/ai/index.js.map +1 -0
  17. package/dist/cmd/ai/prompt/index.js +10 -0
  18. package/dist/cmd/ai/prompt/index.js.map +1 -0
  19. package/dist/cmd/ai/prompt/llm.js +365 -0
  20. package/dist/cmd/ai/prompt/llm.js.map +1 -0
  21. package/dist/cmd/ai/schema/index.js +10 -0
  22. package/dist/cmd/ai/schema/index.js.map +1 -0
  23. package/dist/cmd/ai/schema/show.js +23 -0
  24. package/dist/cmd/ai/schema/show.js.map +1 -0
  25. package/dist/cmd/auth/api.js +85 -0
  26. package/dist/cmd/auth/api.js.map +1 -0
  27. package/dist/cmd/auth/index.js +13 -0
  28. package/dist/cmd/auth/index.js.map +1 -0
  29. package/dist/cmd/auth/login.js +84 -0
  30. package/dist/cmd/auth/login.js.map +1 -0
  31. package/dist/cmd/auth/logout.js +17 -0
  32. package/dist/cmd/auth/logout.js.map +1 -0
  33. package/dist/cmd/auth/signup.js +55 -0
  34. package/dist/cmd/auth/signup.js.map +1 -0
  35. package/dist/cmd/auth/ssh/add.js +239 -0
  36. package/dist/cmd/auth/ssh/add.js.map +1 -0
  37. package/dist/cmd/auth/ssh/api.js +53 -0
  38. package/dist/cmd/auth/ssh/api.js.map +1 -0
  39. package/dist/cmd/auth/ssh/delete.js +126 -0
  40. package/dist/cmd/auth/ssh/delete.js.map +1 -0
  41. package/dist/cmd/auth/ssh/index.js +11 -0
  42. package/dist/cmd/auth/ssh/index.js.map +1 -0
  43. package/dist/cmd/auth/ssh/list.js +70 -0
  44. package/dist/cmd/auth/ssh/list.js.map +1 -0
  45. package/dist/cmd/auth/whoami.js +68 -0
  46. package/dist/cmd/auth/whoami.js.map +1 -0
  47. package/dist/cmd/build/ast.js +608 -0
  48. package/dist/cmd/build/ast.js.map +1 -0
  49. package/dist/cmd/build/ast.test.js +389 -0
  50. package/dist/cmd/build/ast.test.js.map +1 -0
  51. package/dist/cmd/build/bundler.js +304 -0
  52. package/dist/cmd/build/bundler.js.map +1 -0
  53. package/dist/cmd/build/file.js +10 -0
  54. package/dist/cmd/build/file.js.map +1 -0
  55. package/dist/cmd/build/fix-duplicate-exports.js +167 -0
  56. package/dist/cmd/build/fix-duplicate-exports.js.map +1 -0
  57. package/dist/cmd/build/fix-duplicate-exports.test.js +300 -0
  58. package/dist/cmd/build/fix-duplicate-exports.test.js.map +1 -0
  59. package/dist/cmd/build/index.d.ts.map +1 -1
  60. package/dist/cmd/build/index.js +81 -0
  61. package/dist/cmd/build/index.js.map +1 -0
  62. package/dist/cmd/build/patch/_util.js +42 -0
  63. package/dist/cmd/build/patch/_util.js.map +1 -0
  64. package/dist/cmd/build/patch/aisdk.js +65 -0
  65. package/dist/cmd/build/patch/aisdk.js.map +1 -0
  66. package/dist/cmd/build/patch/index.js +97 -0
  67. package/dist/cmd/build/patch/index.js.map +1 -0
  68. package/dist/cmd/build/patch/llm.js +18 -0
  69. package/dist/cmd/build/patch/llm.js.map +1 -0
  70. package/dist/cmd/build/plugin.d.ts.map +1 -1
  71. package/dist/cmd/build/plugin.js +581 -0
  72. package/dist/cmd/build/plugin.js.map +1 -0
  73. package/dist/cmd/cloud/agents/index.js +133 -0
  74. package/dist/cmd/cloud/agents/index.js.map +1 -0
  75. package/dist/cmd/cloud/deploy.js +341 -0
  76. package/dist/cmd/cloud/deploy.js.map +1 -0
  77. package/dist/cmd/cloud/deployment/index.js +20 -0
  78. package/dist/cmd/cloud/deployment/index.js.map +1 -0
  79. package/dist/cmd/cloud/deployment/list.js +89 -0
  80. package/dist/cmd/cloud/deployment/list.js.map +1 -0
  81. package/dist/cmd/cloud/deployment/remove.js +60 -0
  82. package/dist/cmd/cloud/deployment/remove.js.map +1 -0
  83. package/dist/cmd/cloud/deployment/rollback.js +80 -0
  84. package/dist/cmd/cloud/deployment/rollback.js.map +1 -0
  85. package/dist/cmd/cloud/deployment/show.js +106 -0
  86. package/dist/cmd/cloud/deployment/show.js.map +1 -0
  87. package/dist/cmd/cloud/deployment/undeploy.js +45 -0
  88. package/dist/cmd/cloud/deployment/undeploy.js.map +1 -0
  89. package/dist/cmd/cloud/deployment/utils.js +10 -0
  90. package/dist/cmd/cloud/deployment/utils.js.map +1 -0
  91. package/dist/cmd/cloud/domain.js +77 -0
  92. package/dist/cmd/cloud/domain.js.map +1 -0
  93. package/dist/cmd/cloud/env/delete.js +50 -0
  94. package/dist/cmd/cloud/env/delete.js.map +1 -0
  95. package/dist/cmd/cloud/env/get.js +65 -0
  96. package/dist/cmd/cloud/env/get.js.map +1 -0
  97. package/dist/cmd/cloud/env/import.js +113 -0
  98. package/dist/cmd/cloud/env/import.js.map +1 -0
  99. package/dist/cmd/cloud/env/index.js +24 -0
  100. package/dist/cmd/cloud/env/index.js.map +1 -0
  101. package/dist/cmd/cloud/env/list.js +58 -0
  102. package/dist/cmd/cloud/env/list.js.map +1 -0
  103. package/dist/cmd/cloud/env/pull.js +81 -0
  104. package/dist/cmd/cloud/env/pull.js.map +1 -0
  105. package/dist/cmd/cloud/env/push.js +61 -0
  106. package/dist/cmd/cloud/env/push.js.map +1 -0
  107. package/dist/cmd/cloud/env/set.js +73 -0
  108. package/dist/cmd/cloud/env/set.js.map +1 -0
  109. package/dist/cmd/cloud/index.js +31 -0
  110. package/dist/cmd/cloud/index.js.map +1 -0
  111. package/dist/cmd/cloud/keyvalue/create-namespace.js +41 -0
  112. package/dist/cmd/cloud/keyvalue/create-namespace.js.map +1 -0
  113. package/dist/cmd/cloud/keyvalue/delete-namespace.js +64 -0
  114. package/dist/cmd/cloud/keyvalue/delete-namespace.js.map +1 -0
  115. package/dist/cmd/cloud/keyvalue/delete.js +47 -0
  116. package/dist/cmd/cloud/keyvalue/delete.js.map +1 -0
  117. package/dist/cmd/cloud/keyvalue/get.js +65 -0
  118. package/dist/cmd/cloud/keyvalue/get.js.map +1 -0
  119. package/dist/cmd/cloud/keyvalue/index.js +32 -0
  120. package/dist/cmd/cloud/keyvalue/index.js.map +1 -0
  121. package/dist/cmd/cloud/keyvalue/keys.js +50 -0
  122. package/dist/cmd/cloud/keyvalue/keys.js.map +1 -0
  123. package/dist/cmd/cloud/keyvalue/list-namespaces.js +37 -0
  124. package/dist/cmd/cloud/keyvalue/list-namespaces.js.map +1 -0
  125. package/dist/cmd/cloud/keyvalue/repl.js +277 -0
  126. package/dist/cmd/cloud/keyvalue/repl.js.map +1 -0
  127. package/dist/cmd/cloud/keyvalue/search.js +72 -0
  128. package/dist/cmd/cloud/keyvalue/search.js.map +1 -0
  129. package/dist/cmd/cloud/keyvalue/set.js +59 -0
  130. package/dist/cmd/cloud/keyvalue/set.js.map +1 -0
  131. package/dist/cmd/cloud/keyvalue/stats.js +82 -0
  132. package/dist/cmd/cloud/keyvalue/stats.js.map +1 -0
  133. package/dist/cmd/cloud/keyvalue/util.js +19 -0
  134. package/dist/cmd/cloud/keyvalue/util.js.map +1 -0
  135. package/dist/cmd/cloud/objectstore/delete-bucket.js +66 -0
  136. package/dist/cmd/cloud/objectstore/delete-bucket.js.map +1 -0
  137. package/dist/cmd/cloud/objectstore/delete.js +56 -0
  138. package/dist/cmd/cloud/objectstore/delete.js.map +1 -0
  139. package/dist/cmd/cloud/objectstore/get.js +64 -0
  140. package/dist/cmd/cloud/objectstore/get.js.map +1 -0
  141. package/dist/cmd/cloud/objectstore/index.js +28 -0
  142. package/dist/cmd/cloud/objectstore/index.js.map +1 -0
  143. package/dist/cmd/cloud/objectstore/list-buckets.js +37 -0
  144. package/dist/cmd/cloud/objectstore/list-buckets.js.map +1 -0
  145. package/dist/cmd/cloud/objectstore/list-keys.js +52 -0
  146. package/dist/cmd/cloud/objectstore/list-keys.js.map +1 -0
  147. package/dist/cmd/cloud/objectstore/put.js +57 -0
  148. package/dist/cmd/cloud/objectstore/put.js.map +1 -0
  149. package/dist/cmd/cloud/objectstore/repl.js +219 -0
  150. package/dist/cmd/cloud/objectstore/repl.js.map +1 -0
  151. package/dist/cmd/cloud/objectstore/url.js +55 -0
  152. package/dist/cmd/cloud/objectstore/url.js.map +1 -0
  153. package/dist/cmd/cloud/objectstore/util.js +18 -0
  154. package/dist/cmd/cloud/objectstore/util.js.map +1 -0
  155. package/dist/cmd/cloud/resource/add.js +70 -0
  156. package/dist/cmd/cloud/resource/add.js.map +1 -0
  157. package/dist/cmd/cloud/resource/delete.js +126 -0
  158. package/dist/cmd/cloud/resource/delete.js.map +1 -0
  159. package/dist/cmd/cloud/resource/index.js +12 -0
  160. package/dist/cmd/cloud/resource/index.js.map +1 -0
  161. package/dist/cmd/cloud/resource/list.js +89 -0
  162. package/dist/cmd/cloud/resource/list.js.map +1 -0
  163. package/dist/cmd/cloud/scp/download.js +72 -0
  164. package/dist/cmd/cloud/scp/download.js.map +1 -0
  165. package/dist/cmd/cloud/scp/index.js +10 -0
  166. package/dist/cmd/cloud/scp/index.js.map +1 -0
  167. package/dist/cmd/cloud/scp/upload.js +75 -0
  168. package/dist/cmd/cloud/scp/upload.js.map +1 -0
  169. package/dist/cmd/cloud/secret/delete.js +50 -0
  170. package/dist/cmd/cloud/secret/delete.js.map +1 -0
  171. package/dist/cmd/cloud/secret/get.js +69 -0
  172. package/dist/cmd/cloud/secret/get.js.map +1 -0
  173. package/dist/cmd/cloud/secret/import.js +88 -0
  174. package/dist/cmd/cloud/secret/import.js.map +1 -0
  175. package/dist/cmd/cloud/secret/index.js +24 -0
  176. package/dist/cmd/cloud/secret/index.js.map +1 -0
  177. package/dist/cmd/cloud/secret/list.js +58 -0
  178. package/dist/cmd/cloud/secret/list.js.map +1 -0
  179. package/dist/cmd/cloud/secret/pull.js +81 -0
  180. package/dist/cmd/cloud/secret/pull.js.map +1 -0
  181. package/dist/cmd/cloud/secret/push.js +61 -0
  182. package/dist/cmd/cloud/secret/push.js.map +1 -0
  183. package/dist/cmd/cloud/secret/set.js +57 -0
  184. package/dist/cmd/cloud/secret/set.js.map +1 -0
  185. package/dist/cmd/cloud/session/get.d.ts.map +1 -1
  186. package/dist/cmd/cloud/session/get.js +155 -0
  187. package/dist/cmd/cloud/session/get.js.map +1 -0
  188. package/dist/cmd/cloud/session/index.js +11 -0
  189. package/dist/cmd/cloud/session/index.js.map +1 -0
  190. package/dist/cmd/cloud/session/list.js +132 -0
  191. package/dist/cmd/cloud/session/list.js.map +1 -0
  192. package/dist/cmd/cloud/session/logs.js +56 -0
  193. package/dist/cmd/cloud/session/logs.js.map +1 -0
  194. package/dist/cmd/cloud/ssh.js +67 -0
  195. package/dist/cmd/cloud/ssh.js.map +1 -0
  196. package/dist/cmd/dev/agents.js +103 -0
  197. package/dist/cmd/dev/agents.js.map +1 -0
  198. package/dist/cmd/dev/api.js +26 -0
  199. package/dist/cmd/dev/api.js.map +1 -0
  200. package/dist/cmd/dev/download.js +77 -0
  201. package/dist/cmd/dev/download.js.map +1 -0
  202. package/dist/cmd/dev/index.js +745 -0
  203. package/dist/cmd/dev/index.js.map +1 -0
  204. package/dist/cmd/dev/sync.js +229 -0
  205. package/dist/cmd/dev/sync.js.map +1 -0
  206. package/dist/cmd/dev/templates.js +75 -0
  207. package/dist/cmd/dev/templates.js.map +1 -0
  208. package/dist/cmd/index.js +49 -0
  209. package/dist/cmd/index.js.map +1 -0
  210. package/dist/cmd/profile/create.js +89 -0
  211. package/dist/cmd/profile/create.js.map +1 -0
  212. package/dist/cmd/profile/delete.js +63 -0
  213. package/dist/cmd/profile/delete.js.map +1 -0
  214. package/dist/cmd/profile/index.js +14 -0
  215. package/dist/cmd/profile/index.js.map +1 -0
  216. package/dist/cmd/profile/list.js +28 -0
  217. package/dist/cmd/profile/list.js.map +1 -0
  218. package/dist/cmd/profile/show.js +68 -0
  219. package/dist/cmd/profile/show.js.map +1 -0
  220. package/dist/cmd/profile/use.js +37 -0
  221. package/dist/cmd/profile/use.js.map +1 -0
  222. package/dist/cmd/project/create.js +92 -0
  223. package/dist/cmd/project/create.js.map +1 -0
  224. package/dist/cmd/project/delete.js +117 -0
  225. package/dist/cmd/project/delete.js.map +1 -0
  226. package/dist/cmd/project/download.js +217 -0
  227. package/dist/cmd/project/download.js.map +1 -0
  228. package/dist/cmd/project/index.js +12 -0
  229. package/dist/cmd/project/index.js.map +1 -0
  230. package/dist/cmd/project/list.js +51 -0
  231. package/dist/cmd/project/list.js.map +1 -0
  232. package/dist/cmd/project/show.js +54 -0
  233. package/dist/cmd/project/show.js.map +1 -0
  234. package/dist/cmd/project/template-flow.js +315 -0
  235. package/dist/cmd/project/template-flow.js.map +1 -0
  236. package/dist/cmd/project/templates.js +31 -0
  237. package/dist/cmd/project/templates.js.map +1 -0
  238. package/dist/cmd/repl/index.js +444 -0
  239. package/dist/cmd/repl/index.js.map +1 -0
  240. package/dist/cmd/version/index.js +29 -0
  241. package/dist/cmd/version/index.js.map +1 -0
  242. package/dist/command-prefix.js +37 -0
  243. package/dist/command-prefix.js.map +1 -0
  244. package/dist/config.js +536 -0
  245. package/dist/config.js.map +1 -0
  246. package/dist/crypto/box.js +382 -0
  247. package/dist/crypto/box.js.map +1 -0
  248. package/dist/crypto/box.test.js +317 -0
  249. package/dist/crypto/box.test.js.map +1 -0
  250. package/dist/download.js +64 -0
  251. package/dist/download.js.map +1 -0
  252. package/dist/env-util.js +219 -0
  253. package/dist/env-util.js.map +1 -0
  254. package/dist/env-util.test.js +146 -0
  255. package/dist/env-util.test.js.map +1 -0
  256. package/dist/errors.js +177 -0
  257. package/dist/errors.js.map +1 -0
  258. package/dist/explain.js +90 -0
  259. package/dist/explain.js.map +1 -0
  260. package/dist/index.js +23 -0
  261. package/dist/index.js.map +1 -0
  262. package/dist/json.js +29 -0
  263. package/dist/json.js.map +1 -0
  264. package/dist/legacy-check.js +104 -0
  265. package/dist/legacy-check.js.map +1 -0
  266. package/dist/output.js +207 -0
  267. package/dist/output.js.map +1 -0
  268. package/dist/repl.js +1176 -0
  269. package/dist/repl.js.map +1 -0
  270. package/dist/runtime.js +19 -0
  271. package/dist/runtime.js.map +1 -0
  272. package/dist/schema-generator.js +289 -0
  273. package/dist/schema-generator.js.map +1 -0
  274. package/dist/schema-parser.js +145 -0
  275. package/dist/schema-parser.js.map +1 -0
  276. package/dist/sound.js +44 -0
  277. package/dist/sound.js.map +1 -0
  278. package/dist/steps.js +293 -0
  279. package/dist/steps.js.map +1 -0
  280. package/dist/terminal.js +130 -0
  281. package/dist/terminal.js.map +1 -0
  282. package/dist/tui.js +1124 -0
  283. package/dist/tui.js.map +1 -0
  284. package/dist/types.js +163 -0
  285. package/dist/types.js.map +1 -0
  286. package/dist/utils/detectSubagent.js +25 -0
  287. package/dist/utils/detectSubagent.js.map +1 -0
  288. package/dist/utils/format.js +21 -0
  289. package/dist/utils/format.js.map +1 -0
  290. package/dist/utils/zip.js +33 -0
  291. package/dist/utils/zip.js.map +1 -0
  292. package/dist/version.js +24 -0
  293. package/dist/version.js.map +1 -0
  294. package/package.json +6 -6
  295. package/src/banner.ts +1 -1
  296. package/src/cmd/build/index.ts +18 -22
  297. package/src/cmd/build/plugin.ts +95 -64
  298. package/src/cmd/cloud/session/get.ts +20 -14
  299. 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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"}