@agentuity/cli 0.1.9 → 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.
Files changed (311) hide show
  1. package/README.md +2 -2
  2. package/bin/cli.ts +8 -0
  3. package/dist/cache/index.d.ts +2 -0
  4. package/dist/cache/index.d.ts.map +1 -0
  5. package/dist/cache/index.js +2 -0
  6. package/dist/cache/index.js.map +1 -0
  7. package/dist/cache/resource-region.d.ts +46 -0
  8. package/dist/cache/resource-region.d.ts.map +1 -0
  9. package/dist/cache/resource-region.js +115 -0
  10. package/dist/cache/resource-region.js.map +1 -0
  11. package/dist/cli.d.ts.map +1 -1
  12. package/dist/cli.js +44 -32
  13. package/dist/cli.js.map +1 -1
  14. package/dist/cmd/ai/capabilities/show.d.ts.map +1 -1
  15. package/dist/cmd/ai/capabilities/show.js +12 -15
  16. package/dist/cmd/ai/capabilities/show.js.map +1 -1
  17. package/dist/cmd/ai/prompt/llm.js +5 -5
  18. package/dist/cmd/ai/prompt/llm.js.map +1 -1
  19. package/dist/cmd/auth/logout.d.ts.map +1 -1
  20. package/dist/cmd/auth/logout.js +5 -2
  21. package/dist/cmd/auth/logout.js.map +1 -1
  22. package/dist/cmd/build/ast.d.ts.map +1 -1
  23. package/dist/cmd/build/ast.js +87 -1
  24. package/dist/cmd/build/ast.js.map +1 -1
  25. package/dist/cmd/build/vite/vite-asset-server-config.d.ts.map +1 -1
  26. package/dist/cmd/build/vite/vite-asset-server-config.js +8 -3
  27. package/dist/cmd/build/vite/vite-asset-server-config.js.map +1 -1
  28. package/dist/cmd/build/vite/vite-asset-server.d.ts.map +1 -1
  29. package/dist/cmd/build/vite/vite-asset-server.js +5 -3
  30. package/dist/cmd/build/vite/vite-asset-server.js.map +1 -1
  31. package/dist/cmd/cloud/db/delete.d.ts.map +1 -1
  32. package/dist/cmd/cloud/db/delete.js +69 -11
  33. package/dist/cmd/cloud/db/delete.js.map +1 -1
  34. package/dist/cmd/cloud/db/get.d.ts.map +1 -1
  35. package/dist/cmd/cloud/db/get.js +23 -7
  36. package/dist/cmd/cloud/db/get.js.map +1 -1
  37. package/dist/cmd/cloud/db/list.d.ts.map +1 -1
  38. package/dist/cmd/cloud/db/list.js +15 -7
  39. package/dist/cmd/cloud/db/list.js.map +1 -1
  40. package/dist/cmd/cloud/db/logs.d.ts.map +1 -1
  41. package/dist/cmd/cloud/db/logs.js +24 -4
  42. package/dist/cmd/cloud/db/logs.js.map +1 -1
  43. package/dist/cmd/cloud/deploy.d.ts.map +1 -1
  44. package/dist/cmd/cloud/deploy.js +38 -0
  45. package/dist/cmd/cloud/deploy.js.map +1 -1
  46. package/dist/cmd/cloud/env/delete.d.ts.map +1 -1
  47. package/dist/cmd/cloud/env/delete.js +30 -13
  48. package/dist/cmd/cloud/env/delete.js.map +1 -1
  49. package/dist/cmd/cloud/env/get.d.ts.map +1 -1
  50. package/dist/cmd/cloud/env/get.js +27 -30
  51. package/dist/cmd/cloud/env/get.js.map +1 -1
  52. package/dist/cmd/cloud/env/import.d.ts.map +1 -1
  53. package/dist/cmd/cloud/env/import.js +41 -48
  54. package/dist/cmd/cloud/env/import.js.map +1 -1
  55. package/dist/cmd/cloud/env/index.d.ts.map +1 -1
  56. package/dist/cmd/cloud/env/index.js +6 -2
  57. package/dist/cmd/cloud/env/index.js.map +1 -1
  58. package/dist/cmd/cloud/env/list.d.ts.map +1 -1
  59. package/dist/cmd/cloud/env/list.js +51 -28
  60. package/dist/cmd/cloud/env/list.js.map +1 -1
  61. package/dist/cmd/cloud/env/pull.d.ts.map +1 -1
  62. package/dist/cmd/cloud/env/pull.js +3 -3
  63. package/dist/cmd/cloud/env/pull.js.map +1 -1
  64. package/dist/cmd/cloud/env/push.d.ts.map +1 -1
  65. package/dist/cmd/cloud/env/push.js +31 -11
  66. package/dist/cmd/cloud/env/push.js.map +1 -1
  67. package/dist/cmd/cloud/env/set.d.ts.map +1 -1
  68. package/dist/cmd/cloud/env/set.js +41 -26
  69. package/dist/cmd/cloud/env/set.js.map +1 -1
  70. package/dist/cmd/cloud/index.d.ts.map +1 -1
  71. package/dist/cmd/cloud/index.js +0 -2
  72. package/dist/cmd/cloud/index.js.map +1 -1
  73. package/dist/cmd/cloud/region-lookup.d.ts +18 -0
  74. package/dist/cmd/cloud/region-lookup.d.ts.map +1 -0
  75. package/dist/cmd/cloud/region-lookup.js +64 -0
  76. package/dist/cmd/cloud/region-lookup.js.map +1 -0
  77. package/dist/cmd/cloud/sandbox/cp.d.ts.map +1 -1
  78. package/dist/cmd/cloud/sandbox/cp.js +5 -3
  79. package/dist/cmd/cloud/sandbox/cp.js.map +1 -1
  80. package/dist/cmd/cloud/sandbox/create.d.ts.map +1 -1
  81. package/dist/cmd/cloud/sandbox/create.js +43 -6
  82. package/dist/cmd/cloud/sandbox/create.js.map +1 -1
  83. package/dist/cmd/cloud/sandbox/delete.d.ts.map +1 -1
  84. package/dist/cmd/cloud/sandbox/delete.js +5 -3
  85. package/dist/cmd/cloud/sandbox/delete.js.map +1 -1
  86. package/dist/cmd/cloud/sandbox/download.d.ts.map +1 -1
  87. package/dist/cmd/cloud/sandbox/download.js +4 -3
  88. package/dist/cmd/cloud/sandbox/download.js.map +1 -1
  89. package/dist/cmd/cloud/sandbox/env.d.ts.map +1 -1
  90. package/dist/cmd/cloud/sandbox/env.js +4 -3
  91. package/dist/cmd/cloud/sandbox/env.js.map +1 -1
  92. package/dist/cmd/cloud/sandbox/exec.d.ts.map +1 -1
  93. package/dist/cmd/cloud/sandbox/exec.js +4 -3
  94. package/dist/cmd/cloud/sandbox/exec.js.map +1 -1
  95. package/dist/cmd/cloud/sandbox/execution/get.js +4 -4
  96. package/dist/cmd/cloud/sandbox/execution/get.js.map +1 -1
  97. package/dist/cmd/cloud/sandbox/execution/index.js +1 -1
  98. package/dist/cmd/cloud/sandbox/execution/index.js.map +1 -1
  99. package/dist/cmd/cloud/sandbox/execution/list.d.ts.map +1 -1
  100. package/dist/cmd/cloud/sandbox/execution/list.js +4 -3
  101. package/dist/cmd/cloud/sandbox/execution/list.js.map +1 -1
  102. package/dist/cmd/cloud/sandbox/get.d.ts.map +1 -1
  103. package/dist/cmd/cloud/sandbox/get.js +9 -4
  104. package/dist/cmd/cloud/sandbox/get.js.map +1 -1
  105. package/dist/cmd/cloud/sandbox/index.js +1 -1
  106. package/dist/cmd/cloud/sandbox/index.js.map +1 -1
  107. package/dist/cmd/cloud/sandbox/list.js +4 -4
  108. package/dist/cmd/cloud/sandbox/list.js.map +1 -1
  109. package/dist/cmd/cloud/sandbox/ls.d.ts.map +1 -1
  110. package/dist/cmd/cloud/sandbox/ls.js +4 -3
  111. package/dist/cmd/cloud/sandbox/ls.js.map +1 -1
  112. package/dist/cmd/cloud/sandbox/mkdir.d.ts.map +1 -1
  113. package/dist/cmd/cloud/sandbox/mkdir.js +4 -3
  114. package/dist/cmd/cloud/sandbox/mkdir.js.map +1 -1
  115. package/dist/cmd/cloud/sandbox/rm.d.ts.map +1 -1
  116. package/dist/cmd/cloud/sandbox/rm.js +4 -3
  117. package/dist/cmd/cloud/sandbox/rm.js.map +1 -1
  118. package/dist/cmd/cloud/sandbox/rmdir.d.ts.map +1 -1
  119. package/dist/cmd/cloud/sandbox/rmdir.js +4 -3
  120. package/dist/cmd/cloud/sandbox/rmdir.js.map +1 -1
  121. package/dist/cmd/cloud/sandbox/run.d.ts.map +1 -1
  122. package/dist/cmd/cloud/sandbox/run.js +44 -6
  123. package/dist/cmd/cloud/sandbox/run.js.map +1 -1
  124. package/dist/cmd/cloud/sandbox/runtime/index.js +1 -1
  125. package/dist/cmd/cloud/sandbox/runtime/index.js.map +1 -1
  126. package/dist/cmd/cloud/sandbox/runtime/list.js +4 -4
  127. package/dist/cmd/cloud/sandbox/runtime/list.js.map +1 -1
  128. package/dist/cmd/cloud/sandbox/snapshot/create.d.ts.map +1 -1
  129. package/dist/cmd/cloud/sandbox/snapshot/create.js +5 -3
  130. package/dist/cmd/cloud/sandbox/snapshot/create.js.map +1 -1
  131. package/dist/cmd/cloud/sandbox/snapshot/delete.js +4 -4
  132. package/dist/cmd/cloud/sandbox/snapshot/delete.js.map +1 -1
  133. package/dist/cmd/cloud/sandbox/snapshot/get.js +4 -4
  134. package/dist/cmd/cloud/sandbox/snapshot/get.js.map +1 -1
  135. package/dist/cmd/cloud/sandbox/snapshot/index.js +1 -1
  136. package/dist/cmd/cloud/sandbox/snapshot/index.js.map +1 -1
  137. package/dist/cmd/cloud/sandbox/snapshot/list.js +4 -4
  138. package/dist/cmd/cloud/sandbox/snapshot/list.js.map +1 -1
  139. package/dist/cmd/cloud/sandbox/snapshot/tag.d.ts.map +1 -1
  140. package/dist/cmd/cloud/sandbox/snapshot/tag.js +4 -4
  141. package/dist/cmd/cloud/sandbox/snapshot/tag.js.map +1 -1
  142. package/dist/cmd/cloud/sandbox/upload.d.ts.map +1 -1
  143. package/dist/cmd/cloud/sandbox/upload.js +4 -3
  144. package/dist/cmd/cloud/sandbox/upload.js.map +1 -1
  145. package/dist/cmd/cloud/sandbox/util.d.ts +13 -0
  146. package/dist/cmd/cloud/sandbox/util.d.ts.map +1 -1
  147. package/dist/cmd/cloud/sandbox/util.js +40 -1
  148. package/dist/cmd/cloud/sandbox/util.js.map +1 -1
  149. package/dist/cmd/cloud/scp/download.d.ts.map +1 -1
  150. package/dist/cmd/cloud/scp/download.js +6 -2
  151. package/dist/cmd/cloud/scp/download.js.map +1 -1
  152. package/dist/cmd/cloud/scp/upload.d.ts.map +1 -1
  153. package/dist/cmd/cloud/scp/upload.js +6 -2
  154. package/dist/cmd/cloud/scp/upload.js.map +1 -1
  155. package/dist/cmd/cloud/session/get.js +4 -4
  156. package/dist/cmd/cloud/session/get.js.map +1 -1
  157. package/dist/cmd/cloud/session/list.js +4 -4
  158. package/dist/cmd/cloud/session/list.js.map +1 -1
  159. package/dist/cmd/cloud/ssh.d.ts.map +1 -1
  160. package/dist/cmd/cloud/ssh.js +7 -2
  161. package/dist/cmd/cloud/ssh.js.map +1 -1
  162. package/dist/cmd/cloud/storage/delete.d.ts.map +1 -1
  163. package/dist/cmd/cloud/storage/delete.js +46 -10
  164. package/dist/cmd/cloud/storage/delete.js.map +1 -1
  165. package/dist/cmd/cloud/storage/download.d.ts.map +1 -1
  166. package/dist/cmd/cloud/storage/download.js +19 -6
  167. package/dist/cmd/cloud/storage/download.js.map +1 -1
  168. package/dist/cmd/cloud/storage/get.d.ts.map +1 -1
  169. package/dist/cmd/cloud/storage/get.js +19 -6
  170. package/dist/cmd/cloud/storage/get.js.map +1 -1
  171. package/dist/cmd/cloud/storage/list.d.ts.map +1 -1
  172. package/dist/cmd/cloud/storage/list.js +17 -7
  173. package/dist/cmd/cloud/storage/list.js.map +1 -1
  174. package/dist/cmd/cloud/storage/upload.d.ts.map +1 -1
  175. package/dist/cmd/cloud/storage/upload.js +19 -6
  176. package/dist/cmd/cloud/storage/upload.js.map +1 -1
  177. package/dist/cmd/cloud/thread/delete.js +4 -4
  178. package/dist/cmd/cloud/thread/delete.js.map +1 -1
  179. package/dist/cmd/cloud/thread/get.js +4 -4
  180. package/dist/cmd/cloud/thread/get.js.map +1 -1
  181. package/dist/cmd/cloud/thread/list.js +4 -4
  182. package/dist/cmd/cloud/thread/list.js.map +1 -1
  183. package/dist/cmd/project/auth/init.d.ts.map +1 -1
  184. package/dist/cmd/project/auth/init.js +6 -3
  185. package/dist/cmd/project/auth/init.js.map +1 -1
  186. package/dist/cmd/project/auth/shared.d.ts +6 -2
  187. package/dist/cmd/project/auth/shared.d.ts.map +1 -1
  188. package/dist/cmd/project/auth/shared.js +40 -12
  189. package/dist/cmd/project/auth/shared.js.map +1 -1
  190. package/dist/config.d.ts +37 -0
  191. package/dist/config.d.ts.map +1 -1
  192. package/dist/config.js +51 -8
  193. package/dist/config.js.map +1 -1
  194. package/dist/env-util.d.ts +25 -2
  195. package/dist/env-util.d.ts.map +1 -1
  196. package/dist/env-util.js +44 -4
  197. package/dist/env-util.js.map +1 -1
  198. package/dist/utils/apt-validator.d.ts +20 -0
  199. package/dist/utils/apt-validator.d.ts.map +1 -0
  200. package/dist/utils/apt-validator.js +157 -0
  201. package/dist/utils/apt-validator.js.map +1 -0
  202. package/package.json +6 -6
  203. package/src/cache/index.ts +11 -0
  204. package/src/cache/resource-region.ts +183 -0
  205. package/src/cli.ts +47 -38
  206. package/src/cmd/ai/capabilities/show.ts +12 -15
  207. package/src/cmd/ai/prompt/llm.ts +5 -5
  208. package/src/cmd/auth/logout.ts +5 -2
  209. package/src/cmd/build/ast.ts +160 -1
  210. package/src/cmd/build/vite/vite-asset-server-config.ts +7 -3
  211. package/src/cmd/build/vite/vite-asset-server.ts +6 -3
  212. package/src/cmd/cloud/db/delete.ts +83 -11
  213. package/src/cmd/cloud/db/get.ts +29 -7
  214. package/src/cmd/cloud/db/list.ts +16 -7
  215. package/src/cmd/cloud/db/logs.ts +33 -4
  216. package/src/cmd/cloud/deploy.ts +49 -0
  217. package/src/cmd/cloud/env/delete.ts +36 -12
  218. package/src/cmd/cloud/env/get.ts +28 -27
  219. package/src/cmd/cloud/env/import.ts +43 -56
  220. package/src/cmd/cloud/env/index.ts +6 -2
  221. package/src/cmd/cloud/env/list.ts +57 -30
  222. package/src/cmd/cloud/env/pull.ts +9 -3
  223. package/src/cmd/cloud/env/push.ts +44 -11
  224. package/src/cmd/cloud/env/set.ts +49 -30
  225. package/src/cmd/cloud/index.ts +0 -2
  226. package/src/cmd/cloud/region-lookup.ts +89 -0
  227. package/src/cmd/cloud/sandbox/cp.ts +5 -3
  228. package/src/cmd/cloud/sandbox/create.ts +50 -6
  229. package/src/cmd/cloud/sandbox/delete.ts +6 -3
  230. package/src/cmd/cloud/sandbox/download.ts +4 -3
  231. package/src/cmd/cloud/sandbox/env.ts +4 -3
  232. package/src/cmd/cloud/sandbox/exec.ts +4 -3
  233. package/src/cmd/cloud/sandbox/execution/get.ts +4 -4
  234. package/src/cmd/cloud/sandbox/execution/index.ts +1 -1
  235. package/src/cmd/cloud/sandbox/execution/list.ts +4 -3
  236. package/src/cmd/cloud/sandbox/get.ts +10 -4
  237. package/src/cmd/cloud/sandbox/index.ts +1 -1
  238. package/src/cmd/cloud/sandbox/list.ts +4 -4
  239. package/src/cmd/cloud/sandbox/ls.ts +4 -3
  240. package/src/cmd/cloud/sandbox/mkdir.ts +4 -3
  241. package/src/cmd/cloud/sandbox/rm.ts +4 -3
  242. package/src/cmd/cloud/sandbox/rmdir.ts +4 -3
  243. package/src/cmd/cloud/sandbox/run.ts +51 -6
  244. package/src/cmd/cloud/sandbox/runtime/index.ts +1 -1
  245. package/src/cmd/cloud/sandbox/runtime/list.ts +4 -4
  246. package/src/cmd/cloud/sandbox/snapshot/create.ts +11 -5
  247. package/src/cmd/cloud/sandbox/snapshot/delete.ts +4 -4
  248. package/src/cmd/cloud/sandbox/snapshot/get.ts +4 -4
  249. package/src/cmd/cloud/sandbox/snapshot/index.ts +1 -1
  250. package/src/cmd/cloud/sandbox/snapshot/list.ts +4 -4
  251. package/src/cmd/cloud/sandbox/snapshot/tag.ts +7 -5
  252. package/src/cmd/cloud/sandbox/upload.ts +4 -3
  253. package/src/cmd/cloud/sandbox/util.ts +60 -1
  254. package/src/cmd/cloud/scp/download.ts +14 -2
  255. package/src/cmd/cloud/scp/upload.ts +14 -2
  256. package/src/cmd/cloud/session/get.ts +4 -4
  257. package/src/cmd/cloud/session/list.ts +4 -4
  258. package/src/cmd/cloud/ssh.ts +15 -2
  259. package/src/cmd/cloud/storage/delete.ts +61 -10
  260. package/src/cmd/cloud/storage/download.ts +31 -6
  261. package/src/cmd/cloud/storage/get.ts +31 -6
  262. package/src/cmd/cloud/storage/list.ts +18 -7
  263. package/src/cmd/cloud/storage/upload.ts +31 -6
  264. package/src/cmd/cloud/thread/delete.ts +4 -4
  265. package/src/cmd/cloud/thread/get.ts +4 -4
  266. package/src/cmd/cloud/thread/list.ts +4 -4
  267. package/src/cmd/project/auth/init.ts +7 -3
  268. package/src/cmd/project/auth/shared.ts +52 -13
  269. package/src/config.ts +64 -8
  270. package/src/env-util.ts +50 -5
  271. package/src/utils/apt-validator.ts +215 -0
  272. package/dist/cmd/cloud/secret/delete.d.ts +0 -2
  273. package/dist/cmd/cloud/secret/delete.d.ts.map +0 -1
  274. package/dist/cmd/cloud/secret/delete.js +0 -53
  275. package/dist/cmd/cloud/secret/delete.js.map +0 -1
  276. package/dist/cmd/cloud/secret/get.d.ts +0 -2
  277. package/dist/cmd/cloud/secret/get.d.ts.map +0 -1
  278. package/dist/cmd/cloud/secret/get.js +0 -73
  279. package/dist/cmd/cloud/secret/get.js.map +0 -1
  280. package/dist/cmd/cloud/secret/import.d.ts +0 -2
  281. package/dist/cmd/cloud/secret/import.d.ts.map +0 -1
  282. package/dist/cmd/cloud/secret/import.js +0 -91
  283. package/dist/cmd/cloud/secret/import.js.map +0 -1
  284. package/dist/cmd/cloud/secret/index.d.ts +0 -3
  285. package/dist/cmd/cloud/secret/index.d.ts.map +0 -1
  286. package/dist/cmd/cloud/secret/index.js +0 -33
  287. package/dist/cmd/cloud/secret/index.js.map +0 -1
  288. package/dist/cmd/cloud/secret/list.d.ts +0 -2
  289. package/dist/cmd/cloud/secret/list.d.ts.map +0 -1
  290. package/dist/cmd/cloud/secret/list.js +0 -65
  291. package/dist/cmd/cloud/secret/list.js.map +0 -1
  292. package/dist/cmd/cloud/secret/pull.d.ts +0 -2
  293. package/dist/cmd/cloud/secret/pull.d.ts.map +0 -1
  294. package/dist/cmd/cloud/secret/pull.js +0 -82
  295. package/dist/cmd/cloud/secret/pull.js.map +0 -1
  296. package/dist/cmd/cloud/secret/push.d.ts +0 -2
  297. package/dist/cmd/cloud/secret/push.d.ts.map +0 -1
  298. package/dist/cmd/cloud/secret/push.js +0 -61
  299. package/dist/cmd/cloud/secret/push.js.map +0 -1
  300. package/dist/cmd/cloud/secret/set.d.ts +0 -2
  301. package/dist/cmd/cloud/secret/set.d.ts.map +0 -1
  302. package/dist/cmd/cloud/secret/set.js +0 -63
  303. package/dist/cmd/cloud/secret/set.js.map +0 -1
  304. package/src/cmd/cloud/secret/delete.ts +0 -65
  305. package/src/cmd/cloud/secret/get.ts +0 -77
  306. package/src/cmd/cloud/secret/import.ts +0 -110
  307. package/src/cmd/cloud/secret/index.ts +0 -33
  308. package/src/cmd/cloud/secret/list.ts +0 -70
  309. package/src/cmd/cloud/secret/pull.ts +0 -92
  310. package/src/cmd/cloud/secret/push.ts +0 -69
  311. package/src/cmd/cloud/secret/set.ts +0 -76
@@ -7,62 +7,59 @@ import { ErrorCode } from '../../../errors';
7
7
  const EnvGetResponseSchema = z.object({
8
8
  key: z.string().describe('Environment variable key name'),
9
9
  value: z.string().describe('Environment variable value'),
10
+ secret: z.boolean().describe('Whether the value is stored as a secret'),
10
11
  });
11
12
  export const getSubcommand = createSubcommand({
12
13
  name: 'get',
13
- description: 'Get an environment variable value',
14
+ description: 'Get an environment variable or secret value',
14
15
  tags: ['read-only', 'fast', 'requires-auth', 'requires-project'],
15
16
  examples: [
16
- { command: getCommand('env get NODE_ENV'), description: 'Get item details' },
17
- { command: getCommand('env get LOG_LEVEL'), description: 'Get item details' },
17
+ { command: getCommand('env get NODE_ENV'), description: 'Get environment variable' },
18
+ { command: getCommand('env get API_KEY'), description: 'Get a secret value' },
19
+ { command: getCommand('env get API_KEY --no-mask'), description: 'Show unmasked value' },
18
20
  ],
19
21
  requires: { auth: true, project: true, apiClient: true },
20
22
  schema: {
21
23
  args: z.object({
22
- key: z.string().describe('the environment variable key'),
24
+ key: z.string().describe('the environment variable or secret key'),
23
25
  }),
24
26
  options: z.object({
25
- mask: z
26
- .boolean()
27
- .default(false)
28
- .describe('mask the value in output (default: true in TTY, false otherwise)'),
27
+ maskSecret: z.boolean().optional().describe('mask the secret value in output'),
29
28
  }),
30
29
  response: EnvGetResponseSchema,
31
30
  },
32
31
  idempotent: true,
33
32
  async handler(ctx) {
34
33
  const { args, opts, apiClient, project, options } = ctx;
35
- // Fetch project with unmasked secrets
36
- const projectData = await tui.spinner('Fetching environment variables', () => {
34
+ // Fetch project with unmasked values
35
+ const projectData = await tui.spinner('Fetching variable', () => {
37
36
  return projectGet(apiClient, { id: project.projectId, mask: false });
38
37
  });
39
- // Look for the key in env
40
- const value = projectData.env?.[args.key];
38
+ // Look for the key in both env and secrets
39
+ let value;
40
+ let isSecret = false;
41
+ if (projectData.secrets?.[args.key] !== undefined) {
42
+ value = projectData.secrets[args.key];
43
+ isSecret = true;
44
+ }
45
+ else if (projectData.env?.[args.key] !== undefined) {
46
+ value = projectData.env[args.key];
47
+ isSecret = false;
48
+ }
41
49
  if (value === undefined) {
42
- tui.fatal(`Environment variable '${args.key}' not found`, ErrorCode.RESOURCE_NOT_FOUND);
50
+ tui.fatal(`Variable '${args.key}' not found`, ErrorCode.RESOURCE_NOT_FOUND);
43
51
  }
52
+ // Mask secrets by default, env vars are never masked
53
+ const shouldMask = isSecret && (opts?.maskSecret ?? true);
44
54
  if (!options.json) {
45
- // Display the value, masked if requested
46
- if (process.stdout.isTTY) {
47
- if (opts?.mask) {
48
- tui.success(`${args.key}=${tui.maskSecret(value)}`);
49
- }
50
- else {
51
- tui.success(`${args.key}=${value}`);
52
- }
53
- }
54
- else {
55
- if (opts?.mask) {
56
- console.log(`${args.key}=${tui.maskSecret(value)}`);
57
- }
58
- else {
59
- console.log(`${args.key}=${value}`);
60
- }
61
- }
55
+ const displayValue = shouldMask ? tui.maskSecret(value) : value;
56
+ const typeLabel = isSecret ? ' (secret)' : '';
57
+ tui.success(`${args.key}=${displayValue}${typeLabel}`);
62
58
  }
63
59
  return {
64
60
  key: args.key,
65
61
  value,
62
+ secret: isSecret,
66
63
  };
67
64
  },
68
65
  });
@@ -1 +1 @@
1
- {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../../src/cmd/cloud/env/get.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../../src/cmd/cloud/env/get.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../../../src/cmd/cloud/env/import.ts"],"names":[],"mappings":"AAuBA,eAAO,MAAM,gBAAgB,yCAoI3B,CAAC"}
1
+ {"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../../../src/cmd/cloud/env/import.ts"],"names":[],"mappings":"AA0BA,eAAO,MAAM,gBAAgB,yCAoH3B,CAAC"}
@@ -2,18 +2,20 @@ 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, mergeEnvVars, splitEnvAndSecrets, looksLikeSecret, } from '../../../env-util';
5
+ import { findExistingEnvFile, readEnvFile, writeEnvFile, filterAgentuitySdkKeys, mergeEnvVars, splitEnvAndSecrets, validateNoPublicSecrets, isReservedAgentuityKey, } from '../../../env-util';
6
6
  import { getCommand } from '../../../command-prefix';
7
7
  const EnvImportResponseSchema = z.object({
8
8
  success: z.boolean().describe('Whether import succeeded'),
9
9
  imported: z.number().describe('Number of items imported'),
10
+ envCount: z.number().describe('Number of env vars imported'),
11
+ secretCount: z.number().describe('Number of secrets imported'),
10
12
  skipped: z.number().describe('Number of items skipped'),
11
13
  path: z.string().describe('Local file path where variables were saved'),
12
14
  file: z.string().describe('Source file path'),
13
15
  });
14
16
  export const importSubcommand = createSubcommand({
15
17
  name: 'import',
16
- description: 'Import environment variables from a file to cloud and local .env',
18
+ description: 'Import environment variables and secrets from a file to cloud and local .env',
17
19
  tags: [
18
20
  'mutating',
19
21
  'creates-resource',
@@ -24,8 +26,8 @@ export const importSubcommand = createSubcommand({
24
26
  ],
25
27
  examples: [
26
28
  {
27
- command: getCommand('cloud env import .env'),
28
- description: 'Import environment variables from .env file',
29
+ command: getCommand('cloud env import .env.backup'),
30
+ description: 'Import variables from backup file',
29
31
  },
30
32
  {
31
33
  command: getCommand('cloud env import .env.local'),
@@ -43,78 +45,69 @@ export const importSubcommand = createSubcommand({
43
45
  async handler(ctx) {
44
46
  const { args, apiClient, project, projectDir } = ctx;
45
47
  // Read the import file
46
- const importedEnv = await readEnvFile(args.file);
47
- if (Object.keys(importedEnv).length === 0) {
48
- tui.warning(`No environment variables found in ${args.file}`);
48
+ const importedVars = await readEnvFile(args.file);
49
+ if (Object.keys(importedVars).length === 0) {
50
+ tui.warning(`No variables found in ${args.file}`);
49
51
  return {
50
52
  success: false,
51
53
  imported: 0,
54
+ envCount: 0,
55
+ secretCount: 0,
52
56
  skipped: 0,
53
57
  path: '',
54
58
  file: args.file,
55
59
  };
56
60
  }
57
- // Filter out AGENTUITY_ prefixed keys
58
- const filteredEnv = filterAgentuitySdkKeys(importedEnv);
59
- if (Object.keys(filteredEnv).length === 0) {
60
- tui.warning('No valid environment variables to import (all were AGENTUITY_ prefixed)');
61
+ // Filter out reserved AGENTUITY_ prefixed keys
62
+ const filteredVars = filterAgentuitySdkKeys(importedVars);
63
+ if (Object.keys(filteredVars).length === 0) {
64
+ tui.warning('No valid variables to import (all were reserved AGENTUITY_ prefixed)');
61
65
  return {
62
66
  success: false,
63
67
  imported: 0,
64
- skipped: Object.keys(importedEnv).length,
68
+ envCount: 0,
69
+ secretCount: 0,
70
+ skipped: Object.keys(importedVars).length,
65
71
  path: '',
66
72
  file: args.file,
67
73
  };
68
74
  }
69
- // Check for potential secrets in the imported variables
70
- const potentialSecrets = [];
71
- for (const [key, value] of Object.entries(filteredEnv)) {
72
- if (looksLikeSecret(key, value)) {
73
- potentialSecrets.push(key);
74
- }
75
- }
76
- if (potentialSecrets.length > 0) {
77
- tui.warning(`Found ${potentialSecrets.length} variable(s) that look like they should be secrets:`);
78
- for (const key of potentialSecrets) {
79
- tui.info(` • ${key}`);
80
- }
81
- tui.info(`\nSecrets should be stored using: ${getCommand('secret import <file>')}`);
82
- tui.info('This keeps them more secure and properly masked in the cloud.');
83
- const response = await tui.confirm('Do you still want to import these as regular environment variables?', false);
84
- if (!response) {
85
- tui.info(`Cancelled. Use "${getCommand('secret import')}" to store these as secrets instead.`);
86
- return {
87
- success: false,
88
- imported: 0,
89
- skipped: Object.keys(filteredEnv).length,
90
- path: '',
91
- file: args.file,
92
- };
75
+ // Split into env and secrets based on key naming conventions
76
+ const { env, secrets } = splitEnvAndSecrets(filteredVars);
77
+ // Check for any public vars that would have been treated as secrets
78
+ const publicSecretKeys = validateNoPublicSecrets(secrets);
79
+ if (publicSecretKeys.length > 0) {
80
+ tui.warning(`Moving public variables to env: ${publicSecretKeys.join(', ')} (these are exposed to the frontend)`);
81
+ for (const key of publicSecretKeys) {
82
+ delete secrets[key];
83
+ env[key] = filteredVars[key];
93
84
  }
94
85
  }
95
- // Split into env and secrets based on key naming conventions
96
- const { env: normalEnv, secrets } = splitEnvAndSecrets(filteredEnv);
97
86
  // Push to cloud
98
- await tui.spinner('Importing environment variables to cloud', () => {
87
+ await tui.spinner('Importing variables to cloud', () => {
99
88
  return projectEnvUpdate(apiClient, {
100
89
  id: project.projectId,
101
- env: normalEnv,
102
- secrets: secrets,
90
+ env,
91
+ secrets,
103
92
  });
104
93
  });
105
- // Merge environment
94
+ // Merge with local .env file
106
95
  const localEnvPath = await findExistingEnvFile(projectDir);
107
96
  const localEnv = await readEnvFile(localEnvPath);
108
- const mergedEnv = mergeEnvVars(localEnv, filteredEnv);
97
+ const mergedEnv = mergeEnvVars(localEnv, filteredVars);
109
98
  await writeEnvFile(localEnvPath, mergedEnv, {
110
- skipKeys: Object.keys(mergedEnv).filter((k) => k.startsWith('AGENTUITY_')),
99
+ skipKeys: Object.keys(mergedEnv).filter(isReservedAgentuityKey),
111
100
  });
112
- const count = Object.keys(filteredEnv).length;
113
- tui.success(`Imported ${count} environment variable${count !== 1 ? 's' : ''} from ${args.file} to cloud and ${localEnvPath}`);
101
+ const envCount = Object.keys(env).length;
102
+ const secretCount = Object.keys(secrets).length;
103
+ const totalCount = envCount + secretCount;
104
+ tui.success(`Imported ${totalCount} variable${totalCount !== 1 ? 's' : ''} from ${args.file} (${envCount} env, ${secretCount} secret${secretCount !== 1 ? 's' : ''})`);
114
105
  return {
115
106
  success: true,
116
- imported: count,
117
- skipped: Object.keys(importedEnv).length - count,
107
+ imported: totalCount,
108
+ envCount,
109
+ secretCount,
110
+ skipped: Object.keys(importedVars).length - totalCount,
118
111
  path: localEnvPath,
119
112
  file: args.file,
120
113
  };
@@ -1 +1 @@
1
- {"version":3,"file":"import.js","sourceRoot":"","sources":["../../../../src/cmd/cloud/env/import.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"import.js","sourceRoot":"","sources":["../../../../src/cmd/cloud/env/import.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cmd/cloud/env/index.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,OAAO,sCAoBlB,CAAC;AACH,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cmd/cloud/env/index.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,OAAO,sCAwBlB,CAAC;AACH,eAAe,OAAO,CAAC"}
@@ -9,14 +9,18 @@ import { listSubcommand } from './list';
9
9
  import { getCommand } from '../../../command-prefix';
10
10
  export const command = createCommand({
11
11
  name: 'env',
12
- description: 'Manage environment variables for your project',
12
+ description: 'Manage environment variables and secrets for your project',
13
13
  tags: ['fast', 'requires-auth', 'requires-project'],
14
14
  examples: [
15
- { command: getCommand('cloud env list'), description: 'List environment variables' },
15
+ { command: getCommand('cloud env list'), description: 'List all variables and secrets' },
16
16
  {
17
17
  command: getCommand('cloud env set NODE_ENV production'),
18
18
  description: 'Set environment variable',
19
19
  },
20
+ {
21
+ command: getCommand('cloud env set API_KEY "sk_..." --secret'),
22
+ description: 'Set a secret',
23
+ },
20
24
  ],
21
25
  subcommands: [
22
26
  listSubcommand,
@@ -1 +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;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,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,QAAQ,EAAE;QACT,EAAE,OAAO,EAAE,UAAU,CAAC,gBAAgB,CAAC,EAAE,WAAW,EAAE,4BAA4B,EAAE;QACpF;YACC,OAAO,EAAE,UAAU,CAAC,mCAAmC,CAAC;YACxD,WAAW,EAAE,0BAA0B;SACvC;KACD;IACD,WAAW,EAAE;QACZ,cAAc;QACd,cAAc;QACd,cAAc;QACd,aAAa;QACb,aAAa;QACb,gBAAgB;QAChB,gBAAgB;KAChB;CACD,CAAC,CAAC;AACH,eAAe,OAAO,CAAC"}
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;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,MAAM,CAAC,MAAM,OAAO,GAAG,aAAa,CAAC;IACpC,IAAI,EAAE,KAAK;IACX,WAAW,EAAE,2DAA2D;IACxE,IAAI,EAAE,CAAC,MAAM,EAAE,eAAe,EAAE,kBAAkB,CAAC;IACnD,QAAQ,EAAE;QACT,EAAE,OAAO,EAAE,UAAU,CAAC,gBAAgB,CAAC,EAAE,WAAW,EAAE,gCAAgC,EAAE;QACxF;YACC,OAAO,EAAE,UAAU,CAAC,mCAAmC,CAAC;YACxD,WAAW,EAAE,0BAA0B;SACvC;QACD;YACC,OAAO,EAAE,UAAU,CAAC,yCAAyC,CAAC;YAC9D,WAAW,EAAE,cAAc;SAC3B;KACD;IACD,WAAW,EAAE;QACZ,cAAc;QACd,cAAc;QACd,cAAc;QACd,aAAa;QACb,aAAa;QACb,gBAAgB;QAChB,gBAAgB;KAChB;CACD,CAAC,CAAC;AACH,eAAe,OAAO,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../src/cmd/cloud/env/list.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,cAAc,yCA6DzB,CAAC"}
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../src/cmd/cloud/env/list.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,cAAc,yCAsFzB,CAAC"}
@@ -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 EnvListResponseSchema = z.record(z.string(), z.string().describe('Environment variable value'));
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 items' },
14
- { command: getCommand('env list --mask'), description: 'Use mask option' },
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(false)
23
- .describe('mask the values in output (default: false for env vars)'),
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 secrets
31
- const projectData = await tui.spinner('Fetching environment variables', () => {
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(env).length === 0) {
38
- tui.info('No environment variables found');
61
+ if (Object.keys(result).length === 0) {
62
+ tui.info('No variables found');
39
63
  }
40
64
  else {
41
- // Display the variables
42
- if (process.stdout.isTTY) {
43
- tui.newline();
44
- tui.info(`Environment Variables (${Object.keys(env).length}):`);
45
- tui.newline();
46
- }
47
- const sortedKeys = Object.keys(env).sort();
48
- // For env vars, masking should be explicitly opted-in (default false)
49
- const shouldMask = opts?.mask === true;
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 = env[key];
52
- const displayValue = shouldMask ? tui.maskSecret(value) : value;
53
- if (process.stdout.isTTY) {
54
- console.log(`${tui.bold(key)}=${displayValue}`);
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 env;
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":"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"}
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":"AAeA,eAAO,MAAM,cAAc,yCA8EzB,CAAC"}
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((k) => k.startsWith('AGENTUITY_')),
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":"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"}
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":"AAaA,eAAO,MAAM,cAAc,yCAuDzB,CAAC"}
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: 'Run push command' }],
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 (prefer .env)
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 (don't push SDK 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 environment variables to push');
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 environment variables to cloud', () => {
61
+ await tui.spinner('Pushing variables to cloud', () => {
47
62
  return projectEnvUpdate(apiClient, {
48
63
  id: project.projectId,
49
- env: filteredEnv,
64
+ env,
65
+ secrets,
50
66
  });
51
67
  });
52
- const count = Object.keys(filteredEnv).length;
53
- tui.success(`Pushed ${count} environment variable${count !== 1 ? 's' : ''} to cloud`);
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: count,
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,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,0DAA0D;IACvE,IAAI,EAAE;QACL,UAAU;QACV,kBAAkB;QAClB,MAAM;QACN,eAAe;QACf,eAAe;QACf,kBAAkB;KAClB;IACD,UAAU,EAAE,IAAI;IAChB,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC;IAChF,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,oCAAoC;QACpC,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"}
1
+ {"version":3,"file":"push.js","sourceRoot":"","sources":["../../../../src/cmd/cloud/env/push.ts"],"names":[],"mappings":"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"}