@agentuity/cli 0.1.8 → 0.1.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (325) 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 -18
  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/ai/skills/generator.d.ts.map +1 -1
  20. package/dist/cmd/ai/skills/generator.js +9 -1
  21. package/dist/cmd/ai/skills/generator.js.map +1 -1
  22. package/dist/cmd/auth/logout.d.ts.map +1 -1
  23. package/dist/cmd/auth/logout.js +5 -2
  24. package/dist/cmd/auth/logout.js.map +1 -1
  25. package/dist/cmd/build/ast.d.ts.map +1 -1
  26. package/dist/cmd/build/ast.js +87 -1
  27. package/dist/cmd/build/ast.js.map +1 -1
  28. package/dist/cmd/build/vite/metadata-generator.js +1 -1
  29. package/dist/cmd/build/vite/metadata-generator.js.map +1 -1
  30. package/dist/cmd/build/vite/vite-asset-server-config.d.ts.map +1 -1
  31. package/dist/cmd/build/vite/vite-asset-server-config.js +8 -3
  32. package/dist/cmd/build/vite/vite-asset-server-config.js.map +1 -1
  33. package/dist/cmd/build/vite/vite-asset-server.d.ts.map +1 -1
  34. package/dist/cmd/build/vite/vite-asset-server.js +5 -3
  35. package/dist/cmd/build/vite/vite-asset-server.js.map +1 -1
  36. package/dist/cmd/cloud/db/delete.d.ts.map +1 -1
  37. package/dist/cmd/cloud/db/delete.js +69 -11
  38. package/dist/cmd/cloud/db/delete.js.map +1 -1
  39. package/dist/cmd/cloud/db/get.d.ts.map +1 -1
  40. package/dist/cmd/cloud/db/get.js +23 -7
  41. package/dist/cmd/cloud/db/get.js.map +1 -1
  42. package/dist/cmd/cloud/db/list.d.ts.map +1 -1
  43. package/dist/cmd/cloud/db/list.js +15 -7
  44. package/dist/cmd/cloud/db/list.js.map +1 -1
  45. package/dist/cmd/cloud/db/logs.d.ts.map +1 -1
  46. package/dist/cmd/cloud/db/logs.js +24 -4
  47. package/dist/cmd/cloud/db/logs.js.map +1 -1
  48. package/dist/cmd/cloud/deploy.d.ts.map +1 -1
  49. package/dist/cmd/cloud/deploy.js +50 -1
  50. package/dist/cmd/cloud/deploy.js.map +1 -1
  51. package/dist/cmd/cloud/env/delete.d.ts.map +1 -1
  52. package/dist/cmd/cloud/env/delete.js +30 -13
  53. package/dist/cmd/cloud/env/delete.js.map +1 -1
  54. package/dist/cmd/cloud/env/get.d.ts.map +1 -1
  55. package/dist/cmd/cloud/env/get.js +27 -30
  56. package/dist/cmd/cloud/env/get.js.map +1 -1
  57. package/dist/cmd/cloud/env/import.d.ts.map +1 -1
  58. package/dist/cmd/cloud/env/import.js +41 -48
  59. package/dist/cmd/cloud/env/import.js.map +1 -1
  60. package/dist/cmd/cloud/env/index.d.ts.map +1 -1
  61. package/dist/cmd/cloud/env/index.js +6 -2
  62. package/dist/cmd/cloud/env/index.js.map +1 -1
  63. package/dist/cmd/cloud/env/list.d.ts.map +1 -1
  64. package/dist/cmd/cloud/env/list.js +51 -28
  65. package/dist/cmd/cloud/env/list.js.map +1 -1
  66. package/dist/cmd/cloud/env/pull.d.ts.map +1 -1
  67. package/dist/cmd/cloud/env/pull.js +3 -3
  68. package/dist/cmd/cloud/env/pull.js.map +1 -1
  69. package/dist/cmd/cloud/env/push.d.ts.map +1 -1
  70. package/dist/cmd/cloud/env/push.js +31 -11
  71. package/dist/cmd/cloud/env/push.js.map +1 -1
  72. package/dist/cmd/cloud/env/set.d.ts.map +1 -1
  73. package/dist/cmd/cloud/env/set.js +41 -26
  74. package/dist/cmd/cloud/env/set.js.map +1 -1
  75. package/dist/cmd/cloud/index.d.ts.map +1 -1
  76. package/dist/cmd/cloud/index.js +0 -2
  77. package/dist/cmd/cloud/index.js.map +1 -1
  78. package/dist/cmd/cloud/region-lookup.d.ts +18 -0
  79. package/dist/cmd/cloud/region-lookup.d.ts.map +1 -0
  80. package/dist/cmd/cloud/region-lookup.js +64 -0
  81. package/dist/cmd/cloud/region-lookup.js.map +1 -0
  82. package/dist/cmd/cloud/sandbox/cp.d.ts.map +1 -1
  83. package/dist/cmd/cloud/sandbox/cp.js +5 -3
  84. package/dist/cmd/cloud/sandbox/cp.js.map +1 -1
  85. package/dist/cmd/cloud/sandbox/create.d.ts.map +1 -1
  86. package/dist/cmd/cloud/sandbox/create.js +54 -2
  87. package/dist/cmd/cloud/sandbox/create.js.map +1 -1
  88. package/dist/cmd/cloud/sandbox/delete.d.ts.map +1 -1
  89. package/dist/cmd/cloud/sandbox/delete.js +5 -3
  90. package/dist/cmd/cloud/sandbox/delete.js.map +1 -1
  91. package/dist/cmd/cloud/sandbox/download.d.ts.map +1 -1
  92. package/dist/cmd/cloud/sandbox/download.js +4 -3
  93. package/dist/cmd/cloud/sandbox/download.js.map +1 -1
  94. package/dist/cmd/cloud/sandbox/env.d.ts.map +1 -1
  95. package/dist/cmd/cloud/sandbox/env.js +4 -3
  96. package/dist/cmd/cloud/sandbox/env.js.map +1 -1
  97. package/dist/cmd/cloud/sandbox/exec.d.ts.map +1 -1
  98. package/dist/cmd/cloud/sandbox/exec.js +4 -3
  99. package/dist/cmd/cloud/sandbox/exec.js.map +1 -1
  100. package/dist/cmd/cloud/sandbox/execution/get.js +4 -4
  101. package/dist/cmd/cloud/sandbox/execution/get.js.map +1 -1
  102. package/dist/cmd/cloud/sandbox/execution/index.js +1 -1
  103. package/dist/cmd/cloud/sandbox/execution/index.js.map +1 -1
  104. package/dist/cmd/cloud/sandbox/execution/list.d.ts.map +1 -1
  105. package/dist/cmd/cloud/sandbox/execution/list.js +4 -3
  106. package/dist/cmd/cloud/sandbox/execution/list.js.map +1 -1
  107. package/dist/cmd/cloud/sandbox/get.d.ts.map +1 -1
  108. package/dist/cmd/cloud/sandbox/get.js +26 -4
  109. package/dist/cmd/cloud/sandbox/get.js.map +1 -1
  110. package/dist/cmd/cloud/sandbox/index.d.ts.map +1 -1
  111. package/dist/cmd/cloud/sandbox/index.js +3 -1
  112. package/dist/cmd/cloud/sandbox/index.js.map +1 -1
  113. package/dist/cmd/cloud/sandbox/list.d.ts.map +1 -1
  114. package/dist/cmd/cloud/sandbox/list.js +16 -9
  115. package/dist/cmd/cloud/sandbox/list.js.map +1 -1
  116. package/dist/cmd/cloud/sandbox/ls.d.ts.map +1 -1
  117. package/dist/cmd/cloud/sandbox/ls.js +4 -3
  118. package/dist/cmd/cloud/sandbox/ls.js.map +1 -1
  119. package/dist/cmd/cloud/sandbox/mkdir.d.ts.map +1 -1
  120. package/dist/cmd/cloud/sandbox/mkdir.js +4 -3
  121. package/dist/cmd/cloud/sandbox/mkdir.js.map +1 -1
  122. package/dist/cmd/cloud/sandbox/rm.d.ts.map +1 -1
  123. package/dist/cmd/cloud/sandbox/rm.js +4 -3
  124. package/dist/cmd/cloud/sandbox/rm.js.map +1 -1
  125. package/dist/cmd/cloud/sandbox/rmdir.d.ts.map +1 -1
  126. package/dist/cmd/cloud/sandbox/rmdir.js +4 -3
  127. package/dist/cmd/cloud/sandbox/rmdir.js.map +1 -1
  128. package/dist/cmd/cloud/sandbox/run.d.ts.map +1 -1
  129. package/dist/cmd/cloud/sandbox/run.js +51 -2
  130. package/dist/cmd/cloud/sandbox/run.js.map +1 -1
  131. package/dist/cmd/cloud/sandbox/runtime/index.d.ts +3 -0
  132. package/dist/cmd/cloud/sandbox/runtime/index.d.ts.map +1 -0
  133. package/dist/cmd/cloud/sandbox/runtime/index.js +19 -0
  134. package/dist/cmd/cloud/sandbox/runtime/index.js.map +1 -0
  135. package/dist/cmd/cloud/sandbox/runtime/list.d.ts +3 -0
  136. package/dist/cmd/cloud/sandbox/runtime/list.d.ts.map +1 -0
  137. package/dist/cmd/cloud/sandbox/runtime/list.js +68 -0
  138. package/dist/cmd/cloud/sandbox/runtime/list.js.map +1 -0
  139. package/dist/cmd/cloud/sandbox/snapshot/create.d.ts.map +1 -1
  140. package/dist/cmd/cloud/sandbox/snapshot/create.js +41 -8
  141. package/dist/cmd/cloud/sandbox/snapshot/create.js.map +1 -1
  142. package/dist/cmd/cloud/sandbox/snapshot/delete.js +4 -4
  143. package/dist/cmd/cloud/sandbox/snapshot/delete.js.map +1 -1
  144. package/dist/cmd/cloud/sandbox/snapshot/get.js +5 -5
  145. package/dist/cmd/cloud/sandbox/snapshot/get.js.map +1 -1
  146. package/dist/cmd/cloud/sandbox/snapshot/index.js +1 -1
  147. package/dist/cmd/cloud/sandbox/snapshot/index.js.map +1 -1
  148. package/dist/cmd/cloud/sandbox/snapshot/list.d.ts.map +1 -1
  149. package/dist/cmd/cloud/sandbox/snapshot/list.js +8 -4
  150. package/dist/cmd/cloud/sandbox/snapshot/list.js.map +1 -1
  151. package/dist/cmd/cloud/sandbox/snapshot/tag.d.ts.map +1 -1
  152. package/dist/cmd/cloud/sandbox/snapshot/tag.js +14 -4
  153. package/dist/cmd/cloud/sandbox/snapshot/tag.js.map +1 -1
  154. package/dist/cmd/cloud/sandbox/upload.d.ts.map +1 -1
  155. package/dist/cmd/cloud/sandbox/upload.js +4 -3
  156. package/dist/cmd/cloud/sandbox/upload.js.map +1 -1
  157. package/dist/cmd/cloud/sandbox/util.d.ts +13 -0
  158. package/dist/cmd/cloud/sandbox/util.d.ts.map +1 -1
  159. package/dist/cmd/cloud/sandbox/util.js +40 -1
  160. package/dist/cmd/cloud/sandbox/util.js.map +1 -1
  161. package/dist/cmd/cloud/scp/download.d.ts.map +1 -1
  162. package/dist/cmd/cloud/scp/download.js +6 -2
  163. package/dist/cmd/cloud/scp/download.js.map +1 -1
  164. package/dist/cmd/cloud/scp/upload.d.ts.map +1 -1
  165. package/dist/cmd/cloud/scp/upload.js +6 -2
  166. package/dist/cmd/cloud/scp/upload.js.map +1 -1
  167. package/dist/cmd/cloud/session/get.js +4 -4
  168. package/dist/cmd/cloud/session/get.js.map +1 -1
  169. package/dist/cmd/cloud/session/list.js +4 -4
  170. package/dist/cmd/cloud/session/list.js.map +1 -1
  171. package/dist/cmd/cloud/ssh.d.ts.map +1 -1
  172. package/dist/cmd/cloud/ssh.js +7 -2
  173. package/dist/cmd/cloud/ssh.js.map +1 -1
  174. package/dist/cmd/cloud/storage/delete.d.ts.map +1 -1
  175. package/dist/cmd/cloud/storage/delete.js +46 -10
  176. package/dist/cmd/cloud/storage/delete.js.map +1 -1
  177. package/dist/cmd/cloud/storage/download.d.ts.map +1 -1
  178. package/dist/cmd/cloud/storage/download.js +19 -6
  179. package/dist/cmd/cloud/storage/download.js.map +1 -1
  180. package/dist/cmd/cloud/storage/get.d.ts.map +1 -1
  181. package/dist/cmd/cloud/storage/get.js +19 -6
  182. package/dist/cmd/cloud/storage/get.js.map +1 -1
  183. package/dist/cmd/cloud/storage/list.d.ts.map +1 -1
  184. package/dist/cmd/cloud/storage/list.js +17 -7
  185. package/dist/cmd/cloud/storage/list.js.map +1 -1
  186. package/dist/cmd/cloud/storage/upload.d.ts.map +1 -1
  187. package/dist/cmd/cloud/storage/upload.js +19 -6
  188. package/dist/cmd/cloud/storage/upload.js.map +1 -1
  189. package/dist/cmd/cloud/thread/delete.js +4 -4
  190. package/dist/cmd/cloud/thread/delete.js.map +1 -1
  191. package/dist/cmd/cloud/thread/get.js +4 -4
  192. package/dist/cmd/cloud/thread/get.js.map +1 -1
  193. package/dist/cmd/cloud/thread/list.js +4 -4
  194. package/dist/cmd/cloud/thread/list.js.map +1 -1
  195. package/dist/cmd/project/auth/init.d.ts.map +1 -1
  196. package/dist/cmd/project/auth/init.js +6 -3
  197. package/dist/cmd/project/auth/init.js.map +1 -1
  198. package/dist/cmd/project/auth/shared.d.ts +6 -2
  199. package/dist/cmd/project/auth/shared.d.ts.map +1 -1
  200. package/dist/cmd/project/auth/shared.js +40 -12
  201. package/dist/cmd/project/auth/shared.js.map +1 -1
  202. package/dist/config.d.ts +37 -0
  203. package/dist/config.d.ts.map +1 -1
  204. package/dist/config.js +61 -8
  205. package/dist/config.js.map +1 -1
  206. package/dist/env-util.d.ts +25 -2
  207. package/dist/env-util.d.ts.map +1 -1
  208. package/dist/env-util.js +44 -4
  209. package/dist/env-util.js.map +1 -1
  210. package/dist/utils/apt-validator.d.ts +20 -0
  211. package/dist/utils/apt-validator.d.ts.map +1 -0
  212. package/dist/utils/apt-validator.js +157 -0
  213. package/dist/utils/apt-validator.js.map +1 -0
  214. package/package.json +6 -6
  215. package/src/cache/index.ts +11 -0
  216. package/src/cache/resource-region.ts +183 -0
  217. package/src/cli.ts +51 -17
  218. package/src/cmd/ai/capabilities/show.ts +12 -15
  219. package/src/cmd/ai/prompt/llm.ts +5 -5
  220. package/src/cmd/ai/skills/generator.ts +9 -1
  221. package/src/cmd/auth/logout.ts +5 -2
  222. package/src/cmd/build/ast.ts +160 -1
  223. package/src/cmd/build/vite/metadata-generator.ts +1 -1
  224. package/src/cmd/build/vite/vite-asset-server-config.ts +7 -3
  225. package/src/cmd/build/vite/vite-asset-server.ts +6 -3
  226. package/src/cmd/cloud/db/delete.ts +83 -11
  227. package/src/cmd/cloud/db/get.ts +29 -7
  228. package/src/cmd/cloud/db/list.ts +16 -7
  229. package/src/cmd/cloud/db/logs.ts +33 -4
  230. package/src/cmd/cloud/deploy.ts +63 -0
  231. package/src/cmd/cloud/env/delete.ts +36 -12
  232. package/src/cmd/cloud/env/get.ts +28 -27
  233. package/src/cmd/cloud/env/import.ts +43 -56
  234. package/src/cmd/cloud/env/index.ts +6 -2
  235. package/src/cmd/cloud/env/list.ts +57 -30
  236. package/src/cmd/cloud/env/pull.ts +9 -3
  237. package/src/cmd/cloud/env/push.ts +44 -11
  238. package/src/cmd/cloud/env/set.ts +49 -30
  239. package/src/cmd/cloud/index.ts +0 -2
  240. package/src/cmd/cloud/region-lookup.ts +89 -0
  241. package/src/cmd/cloud/sandbox/cp.ts +5 -3
  242. package/src/cmd/cloud/sandbox/create.ts +61 -2
  243. package/src/cmd/cloud/sandbox/delete.ts +6 -3
  244. package/src/cmd/cloud/sandbox/download.ts +4 -3
  245. package/src/cmd/cloud/sandbox/env.ts +4 -3
  246. package/src/cmd/cloud/sandbox/exec.ts +4 -3
  247. package/src/cmd/cloud/sandbox/execution/get.ts +4 -4
  248. package/src/cmd/cloud/sandbox/execution/index.ts +1 -1
  249. package/src/cmd/cloud/sandbox/execution/list.ts +4 -3
  250. package/src/cmd/cloud/sandbox/get.ts +27 -4
  251. package/src/cmd/cloud/sandbox/index.ts +3 -1
  252. package/src/cmd/cloud/sandbox/list.ts +16 -9
  253. package/src/cmd/cloud/sandbox/ls.ts +4 -3
  254. package/src/cmd/cloud/sandbox/mkdir.ts +4 -3
  255. package/src/cmd/cloud/sandbox/rm.ts +4 -3
  256. package/src/cmd/cloud/sandbox/rmdir.ts +4 -3
  257. package/src/cmd/cloud/sandbox/run.ts +58 -2
  258. package/src/cmd/cloud/sandbox/runtime/index.ts +20 -0
  259. package/src/cmd/cloud/sandbox/runtime/list.ts +75 -0
  260. package/src/cmd/cloud/sandbox/snapshot/create.ts +53 -8
  261. package/src/cmd/cloud/sandbox/snapshot/delete.ts +4 -4
  262. package/src/cmd/cloud/sandbox/snapshot/get.ts +5 -5
  263. package/src/cmd/cloud/sandbox/snapshot/index.ts +1 -1
  264. package/src/cmd/cloud/sandbox/snapshot/list.ts +8 -4
  265. package/src/cmd/cloud/sandbox/snapshot/tag.ts +20 -4
  266. package/src/cmd/cloud/sandbox/upload.ts +4 -3
  267. package/src/cmd/cloud/sandbox/util.ts +60 -1
  268. package/src/cmd/cloud/scp/download.ts +14 -2
  269. package/src/cmd/cloud/scp/upload.ts +14 -2
  270. package/src/cmd/cloud/session/get.ts +4 -4
  271. package/src/cmd/cloud/session/list.ts +4 -4
  272. package/src/cmd/cloud/ssh.ts +15 -2
  273. package/src/cmd/cloud/storage/delete.ts +61 -10
  274. package/src/cmd/cloud/storage/download.ts +31 -6
  275. package/src/cmd/cloud/storage/get.ts +31 -6
  276. package/src/cmd/cloud/storage/list.ts +18 -7
  277. package/src/cmd/cloud/storage/upload.ts +31 -6
  278. package/src/cmd/cloud/thread/delete.ts +4 -4
  279. package/src/cmd/cloud/thread/get.ts +4 -4
  280. package/src/cmd/cloud/thread/list.ts +4 -4
  281. package/src/cmd/project/auth/init.ts +7 -3
  282. package/src/cmd/project/auth/shared.ts +52 -13
  283. package/src/config.ts +74 -8
  284. package/src/env-util.ts +50 -5
  285. package/src/utils/apt-validator.ts +215 -0
  286. package/dist/cmd/cloud/secret/delete.d.ts +0 -2
  287. package/dist/cmd/cloud/secret/delete.d.ts.map +0 -1
  288. package/dist/cmd/cloud/secret/delete.js +0 -53
  289. package/dist/cmd/cloud/secret/delete.js.map +0 -1
  290. package/dist/cmd/cloud/secret/get.d.ts +0 -2
  291. package/dist/cmd/cloud/secret/get.d.ts.map +0 -1
  292. package/dist/cmd/cloud/secret/get.js +0 -73
  293. package/dist/cmd/cloud/secret/get.js.map +0 -1
  294. package/dist/cmd/cloud/secret/import.d.ts +0 -2
  295. package/dist/cmd/cloud/secret/import.d.ts.map +0 -1
  296. package/dist/cmd/cloud/secret/import.js +0 -91
  297. package/dist/cmd/cloud/secret/import.js.map +0 -1
  298. package/dist/cmd/cloud/secret/index.d.ts +0 -3
  299. package/dist/cmd/cloud/secret/index.d.ts.map +0 -1
  300. package/dist/cmd/cloud/secret/index.js +0 -33
  301. package/dist/cmd/cloud/secret/index.js.map +0 -1
  302. package/dist/cmd/cloud/secret/list.d.ts +0 -2
  303. package/dist/cmd/cloud/secret/list.d.ts.map +0 -1
  304. package/dist/cmd/cloud/secret/list.js +0 -65
  305. package/dist/cmd/cloud/secret/list.js.map +0 -1
  306. package/dist/cmd/cloud/secret/pull.d.ts +0 -2
  307. package/dist/cmd/cloud/secret/pull.d.ts.map +0 -1
  308. package/dist/cmd/cloud/secret/pull.js +0 -82
  309. package/dist/cmd/cloud/secret/pull.js.map +0 -1
  310. package/dist/cmd/cloud/secret/push.d.ts +0 -2
  311. package/dist/cmd/cloud/secret/push.d.ts.map +0 -1
  312. package/dist/cmd/cloud/secret/push.js +0 -61
  313. package/dist/cmd/cloud/secret/push.js.map +0 -1
  314. package/dist/cmd/cloud/secret/set.d.ts +0 -2
  315. package/dist/cmd/cloud/secret/set.d.ts.map +0 -1
  316. package/dist/cmd/cloud/secret/set.js +0 -63
  317. package/dist/cmd/cloud/secret/set.js.map +0 -1
  318. package/src/cmd/cloud/secret/delete.ts +0 -65
  319. package/src/cmd/cloud/secret/get.ts +0 -77
  320. package/src/cmd/cloud/secret/import.ts +0 -110
  321. package/src/cmd/cloud/secret/index.ts +0 -33
  322. package/src/cmd/cloud/secret/list.ts +0 -70
  323. package/src/cmd/cloud/secret/pull.ts +0 -92
  324. package/src/cmd/cloud/secret/push.ts +0 -69
  325. package/src/cmd/cloud/secret/set.ts +0 -76
@@ -0,0 +1,215 @@
1
+ import { StructuredError, type Logger } from '@agentuity/core';
2
+ import type { Config } from '../types';
3
+ import { getAppBaseURL } from '@agentuity/server';
4
+ import { getUserAgent } from '../api';
5
+ import { getDefaultConfigDir } from '../config';
6
+ import { join, dirname } from 'node:path';
7
+ import { mkdir } from 'node:fs/promises';
8
+ import { z } from 'zod';
9
+
10
+ const AptValidationError = StructuredError('AptValidationError');
11
+ const AptValidationAPIError = StructuredError('AptValidationAPIError')<{
12
+ status?: number;
13
+ body?: string;
14
+ }>();
15
+ const AptValidationResponseError = StructuredError('AptValidationResponseError')<{
16
+ parseError?: string;
17
+ }>();
18
+
19
+ export interface InvalidPackage {
20
+ package: string;
21
+ error: string;
22
+ requestedVersion?: string;
23
+ availableVersions?: string[];
24
+ searchUrl: string;
25
+ }
26
+
27
+ export interface AptValidationResult {
28
+ valid: string[];
29
+ invalid: InvalidPackage[];
30
+ }
31
+
32
+ const InvalidPackageSchema = z.object({
33
+ package: z.string(),
34
+ error: z.string(),
35
+ requestedVersion: z.string().optional(),
36
+ availableVersions: z.array(z.string()).optional(),
37
+ searchUrl: z.string(),
38
+ });
39
+
40
+ const ValidateAptDependenciesResponseSchema = z.object({
41
+ success: z.boolean(),
42
+ data: z
43
+ .object({
44
+ valid: z.array(z.string()),
45
+ invalid: z.array(InvalidPackageSchema),
46
+ })
47
+ .optional(),
48
+ message: z.string().optional(),
49
+ });
50
+
51
+ const REQUEST_TIMEOUT_MS = 30000; // 30 seconds client-side timeout
52
+
53
+ const CacheEntrySchema = z.object({
54
+ timestamp: z.number(),
55
+ });
56
+
57
+ const ValidationCacheSchema = z.object({
58
+ version: z.number(),
59
+ entries: z.record(z.string(), CacheEntrySchema),
60
+ });
61
+
62
+ type ValidationCache = z.infer<typeof ValidationCacheSchema>;
63
+
64
+ const CACHE_VERSION = 1;
65
+ const CACHE_TTL_MS = 90 * 24 * 60 * 60 * 1000; // 90 days
66
+
67
+ function getCachePath(): string {
68
+ return join(getDefaultConfigDir(), 'dependency-validation.json');
69
+ }
70
+
71
+ async function loadCache(logger: Logger): Promise<ValidationCache> {
72
+ const cachePath = getCachePath();
73
+ try {
74
+ const file = Bun.file(cachePath);
75
+ if (await file.exists()) {
76
+ const content = await file.json();
77
+ const parsed = ValidationCacheSchema.safeParse(content);
78
+ if (parsed.success && parsed.data.version === CACHE_VERSION) {
79
+ return parsed.data;
80
+ }
81
+ logger.debug('Cache invalid or version mismatch, starting fresh');
82
+ }
83
+ } catch (err) {
84
+ logger.debug('Failed to load validation cache: %s', err);
85
+ }
86
+ return { version: CACHE_VERSION, entries: {} };
87
+ }
88
+
89
+ async function saveCache(cache: ValidationCache, logger: Logger): Promise<void> {
90
+ const cachePath = getCachePath();
91
+ try {
92
+ await mkdir(dirname(cachePath), { recursive: true });
93
+ await Bun.write(cachePath, JSON.stringify(cache, null, 2));
94
+ } catch (err) {
95
+ logger.debug('Failed to save validation cache: %s', err);
96
+ }
97
+ }
98
+
99
+ function isCacheEntryValid(entry: z.infer<typeof CacheEntrySchema>): boolean {
100
+ return Date.now() - entry.timestamp < CACHE_TTL_MS;
101
+ }
102
+
103
+ /**
104
+ * Validate apt dependencies against the Debian package repository.
105
+ * Uses a local cache to avoid redundant API calls.
106
+ * Calls the app API which checks packages against snapshot.debian.org.
107
+ */
108
+ export async function validateAptDependencies(
109
+ packages: string[],
110
+ region: string,
111
+ config: Config | null,
112
+ logger: Logger
113
+ ): Promise<AptValidationResult> {
114
+ if (packages.length === 0) {
115
+ return { valid: [], invalid: [] };
116
+ }
117
+
118
+ const cache = await loadCache(logger);
119
+ const now = Date.now();
120
+
121
+ const cachedValid: string[] = [];
122
+ const uncachedPackages: string[] = [];
123
+
124
+ // Check cache for each package (only valid packages are cached)
125
+ for (const pkg of packages) {
126
+ const entry = cache.entries[pkg];
127
+ if (entry && isCacheEntryValid(entry)) {
128
+ cachedValid.push(pkg);
129
+ logger.debug('Cache hit (valid): %s', pkg);
130
+ } else {
131
+ uncachedPackages.push(pkg);
132
+ logger.debug('Cache miss: %s', pkg);
133
+ }
134
+ }
135
+
136
+ // If all packages are cached, return immediately
137
+ if (uncachedPackages.length === 0) {
138
+ logger.debug('All %d packages found in cache', packages.length);
139
+ return { valid: cachedValid, invalid: [] };
140
+ }
141
+
142
+ logger.debug(
143
+ 'Validating %d uncached packages (%d cached)',
144
+ uncachedPackages.length,
145
+ packages.length - uncachedPackages.length
146
+ );
147
+
148
+ const appBaseUrl = getAppBaseURL(region, config?.overrides);
149
+ const url = `${appBaseUrl}/api/cli/validate/apt-dependencies`;
150
+
151
+ const response = await fetch(url, {
152
+ method: 'POST',
153
+ headers: {
154
+ 'Content-Type': 'application/json',
155
+ 'User-Agent': getUserAgent(config),
156
+ },
157
+ body: JSON.stringify({ packages: uncachedPackages }),
158
+ signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS),
159
+ });
160
+
161
+ if (!response.ok) {
162
+ const text = await response.text();
163
+ throw new AptValidationAPIError({
164
+ message: `Failed to validate apt dependencies: HTTP ${response.status}`,
165
+ status: response.status,
166
+ body: text,
167
+ });
168
+ }
169
+
170
+ let json: unknown;
171
+ try {
172
+ json = await response.json();
173
+ } catch (err) {
174
+ throw new AptValidationResponseError({
175
+ message: 'Invalid JSON in API response',
176
+ parseError: err instanceof Error ? err.message : String(err),
177
+ });
178
+ }
179
+
180
+ const parsed = ValidateAptDependenciesResponseSchema.safeParse(json);
181
+
182
+ if (!parsed.success) {
183
+ throw new AptValidationResponseError({
184
+ message: 'Invalid API response structure',
185
+ parseError: parsed.error.message,
186
+ });
187
+ }
188
+
189
+ const result = parsed.data;
190
+
191
+ if (!result.success || !result.data) {
192
+ throw new AptValidationError({
193
+ message: result.message ?? 'Failed to validate apt dependencies',
194
+ });
195
+ }
196
+
197
+ // Update cache with valid results only (don't cache invalid packages)
198
+ for (const pkg of result.data.valid) {
199
+ cache.entries[pkg] = { timestamp: now };
200
+ }
201
+
202
+ await saveCache(cache, logger);
203
+
204
+ logger.debug(
205
+ 'Apt validation complete: %d valid, %d invalid (from API)',
206
+ result.data.valid.length,
207
+ result.data.invalid.length
208
+ );
209
+
210
+ // Combine cached and fresh results
211
+ return {
212
+ valid: [...cachedValid, ...result.data.valid],
213
+ invalid: result.data.invalid,
214
+ };
215
+ }
@@ -1,2 +0,0 @@
1
- export declare const deleteSubcommand: import("../../..").SubcommandDefinition;
2
- //# sourceMappingURL=delete.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../../src/cmd/cloud/secret/delete.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,gBAAgB,yCA8C3B,CAAC"}
@@ -1,53 +0,0 @@
1
- import { z } from 'zod';
2
- import { createSubcommand } from '../../../types';
3
- import * as tui from '../../../tui';
4
- import { projectEnvDelete } from '@agentuity/server';
5
- import { findExistingEnvFile, readEnvFile, writeEnvFile, filterAgentuitySdkKeys, } from '../../../env-util';
6
- import { getCommand } from '../../../command-prefix';
7
- const SecretDeleteResponseSchema = z.object({
8
- success: z.boolean().describe('Whether the operation succeeded'),
9
- key: z.string().describe('Secret key name that was deleted'),
10
- path: z.string().describe('Local file path where secret was removed'),
11
- });
12
- export const deleteSubcommand = createSubcommand({
13
- name: 'delete',
14
- aliases: ['del', 'remove', 'rm'],
15
- description: 'Delete a secret',
16
- tags: ['destructive', 'deletes-resource', 'slow', 'requires-auth', 'requires-project'],
17
- idempotent: true,
18
- examples: [
19
- { command: getCommand('secret delete OLD_API_KEY'), description: 'Delete item' },
20
- { command: getCommand('secret rm DATABASE_URL'), description: 'Delete item' },
21
- ],
22
- requires: { auth: true, project: true, apiClient: true },
23
- schema: {
24
- args: z.object({
25
- key: z.string().describe('the secret key to delete'),
26
- }),
27
- response: SecretDeleteResponseSchema,
28
- },
29
- async handler(ctx) {
30
- const { args, apiClient, project, projectDir } = ctx;
31
- // Delete from cloud (using secrets field)
32
- await tui.spinner('Deleting secret from cloud', () => {
33
- return projectEnvDelete(apiClient, {
34
- id: project.projectId,
35
- secrets: [args.key],
36
- });
37
- });
38
- // Update local .env file
39
- const envFilePath = await findExistingEnvFile(projectDir);
40
- const currentEnv = await readEnvFile(envFilePath);
41
- delete currentEnv[args.key];
42
- // Filter out AGENTUITY_ keys before writing
43
- const filteredEnv = filterAgentuitySdkKeys(currentEnv);
44
- await writeEnvFile(envFilePath, filteredEnv);
45
- tui.success(`Secret '${args.key}' deleted successfully (cloud + ${envFilePath})`);
46
- return {
47
- success: true,
48
- key: args.key,
49
- path: envFilePath,
50
- };
51
- },
52
- });
53
- //# sourceMappingURL=delete.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../../src/cmd/cloud/secret/delete.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EACN,mBAAmB,EACnB,WAAW,EACX,YAAY,EACZ,sBAAsB,GACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IAChE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IAC5D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;CACrE,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,gBAAgB,CAAC;IAChD,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC;IAChC,WAAW,EAAE,iBAAiB;IAC9B,IAAI,EAAE,CAAC,aAAa,EAAE,kBAAkB,EAAE,MAAM,EAAE,eAAe,EAAE,kBAAkB,CAAC;IACtF,UAAU,EAAE,IAAI;IAChB,QAAQ,EAAE;QACT,EAAE,OAAO,EAAE,UAAU,CAAC,2BAA2B,CAAC,EAAE,WAAW,EAAE,aAAa,EAAE;QAChF,EAAE,OAAO,EAAE,UAAU,CAAC,wBAAwB,CAAC,EAAE,WAAW,EAAE,aAAa,EAAE;KAC7E;IACD,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE;IACxD,MAAM,EAAE;QACP,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;YACd,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;SACpD,CAAC;QACF,QAAQ,EAAE,0BAA0B;KACpC;IAED,KAAK,CAAC,OAAO,CAAC,GAAG;QAChB,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC;QAErD,0CAA0C;QAC1C,MAAM,GAAG,CAAC,OAAO,CAAC,4BAA4B,EAAE,GAAG,EAAE;YACpD,OAAO,gBAAgB,CAAC,SAAS,EAAE;gBAClC,EAAE,EAAE,OAAO,CAAC,SAAS;gBACrB,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;aACnB,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,yBAAyB;QACzB,MAAM,WAAW,GAAG,MAAM,mBAAmB,CAAC,UAAU,CAAC,CAAC;QAC1D,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,WAAW,CAAC,CAAC;QAClD,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE5B,4CAA4C;QAC5C,MAAM,WAAW,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;QACvD,MAAM,YAAY,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QAE7C,GAAG,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,GAAG,mCAAmC,WAAW,GAAG,CAAC,CAAC;QAElF,OAAO;YACN,OAAO,EAAE,IAAI;YACb,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,IAAI,EAAE,WAAW;SACjB,CAAC;IACH,CAAC;CACD,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export declare const getSubcommand: import("../../..").SubcommandDefinition;
2
- //# sourceMappingURL=get.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../../src/cmd/cloud/secret/get.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,aAAa,yCAgExB,CAAC"}
@@ -1,73 +0,0 @@
1
- import { z } from 'zod';
2
- import { createSubcommand } from '../../../types';
3
- import * as tui from '../../../tui';
4
- import { projectGet } from '@agentuity/server';
5
- import { getCommand } from '../../../command-prefix';
6
- import { ErrorCode } from '../../../errors';
7
- const SecretGetResponseSchema = z.object({
8
- key: z.string().describe('Secret key name'),
9
- value: z.string().describe('Secret value'),
10
- });
11
- export const getSubcommand = createSubcommand({
12
- name: 'get',
13
- description: 'Get a secret value',
14
- tags: ['read-only', 'fast', 'requires-auth', 'requires-project'],
15
- examples: [
16
- { command: getCommand('secret get DATABASE_URL'), description: 'Get item details' },
17
- {
18
- command: getCommand('secret get STRIPE_SECRET_KEY --no-mask'),
19
- description: 'Use no mask option',
20
- },
21
- ],
22
- requires: { auth: true, project: true, apiClient: true },
23
- schema: {
24
- args: z.object({
25
- key: z.string().describe('the secret key'),
26
- }),
27
- options: z.object({
28
- mask: z
29
- .boolean()
30
- .default(!!process.stdout.isTTY)
31
- .describe('mask the value in output (default: true in TTY, false otherwise)'),
32
- }),
33
- response: SecretGetResponseSchema,
34
- },
35
- idempotent: true,
36
- async handler(ctx) {
37
- const { args, opts, apiClient, project, options } = ctx;
38
- // Fetch project with unmasked secrets
39
- const projectData = await tui.spinner('Fetching secrets', () => {
40
- return projectGet(apiClient, { id: project.projectId, mask: false });
41
- });
42
- // Look for the key in secrets
43
- const value = projectData.secrets?.[args.key];
44
- if (value === undefined) {
45
- tui.fatal(`Secret '${args.key}' not found`, ErrorCode.RESOURCE_NOT_FOUND);
46
- }
47
- if (!options.json) {
48
- if (process.stdout.isTTY) {
49
- // Display the value, masked by default
50
- if (opts?.mask) {
51
- tui.success(`${args.key}=${tui.maskSecret(value)}`);
52
- }
53
- else {
54
- tui.success(`${args.key}=${value}`);
55
- }
56
- }
57
- else {
58
- // Display the value, masked by default
59
- if (opts?.mask) {
60
- console.log(`${args.key}=${tui.maskSecret(value)}`);
61
- }
62
- else {
63
- console.log(`${args.key}=${value}`);
64
- }
65
- }
66
- }
67
- return {
68
- key: args.key,
69
- value,
70
- };
71
- },
72
- });
73
- //# sourceMappingURL=get.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../../src/cmd/cloud/secret/get.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export declare const importSubcommand: import("../../..").SubcommandDefinition;
2
- //# sourceMappingURL=import.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../../../src/cmd/cloud/secret/import.ts"],"names":[],"mappings":"AAqBA,eAAO,MAAM,gBAAgB,yCAwF3B,CAAC"}
@@ -1,91 +0,0 @@
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, writeEnvFile, filterAgentuitySdkKeys, mergeEnvVars, } from '../../../env-util';
6
- import { getCommand } from '../../../command-prefix';
7
- const SecretImportResponseSchema = 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 secrets were saved'),
12
- file: z.string().describe('Source file path'),
13
- });
14
- export const importSubcommand = createSubcommand({
15
- name: 'import',
16
- description: 'Import secrets from a file to cloud and local .env',
17
- tags: [
18
- 'mutating',
19
- 'creates-resource',
20
- 'slow',
21
- 'api-intensive',
22
- 'requires-auth',
23
- 'requires-project',
24
- ],
25
- examples: [
26
- { command: getCommand('secret import .env.local'), description: 'Run .env.local command' },
27
- {
28
- command: getCommand('secret import .env.backup'),
29
- description: 'Run .env.backup command',
30
- },
31
- ],
32
- idempotent: false,
33
- requires: { auth: true, project: true, apiClient: true },
34
- schema: {
35
- args: z.object({
36
- file: z.string().describe('path to the .env file to import'),
37
- }),
38
- response: SecretImportResponseSchema,
39
- },
40
- async handler(ctx) {
41
- const { args, apiClient, project, projectDir } = ctx;
42
- // Read the import file
43
- const importedSecrets = await readEnvFile(args.file);
44
- if (Object.keys(importedSecrets).length === 0) {
45
- tui.warning(`No secrets found in ${args.file}`);
46
- return {
47
- success: false,
48
- imported: 0,
49
- skipped: 0,
50
- path: '',
51
- file: args.file,
52
- };
53
- }
54
- // Filter out AGENTUITY_ prefixed keys
55
- const filteredSecrets = filterAgentuitySdkKeys(importedSecrets);
56
- if (Object.keys(filteredSecrets).length === 0) {
57
- tui.warning('No valid secrets to import (all were AGENTUITY_ prefixed)');
58
- return {
59
- success: false,
60
- imported: 0,
61
- skipped: Object.keys(importedSecrets).length,
62
- path: '',
63
- file: args.file,
64
- };
65
- }
66
- // Push to cloud (using secrets field)
67
- await tui.spinner('Importing secrets to cloud', () => {
68
- return projectEnvUpdate(apiClient, {
69
- id: project.projectId,
70
- secrets: filteredSecrets,
71
- });
72
- });
73
- // Merge with local .env file
74
- const localEnvPath = await findExistingEnvFile(projectDir);
75
- const localEnv = await readEnvFile(localEnvPath);
76
- const mergedEnv = mergeEnvVars(localEnv, filteredSecrets);
77
- await writeEnvFile(localEnvPath, mergedEnv, {
78
- skipKeys: Object.keys(mergedEnv).filter((k) => k.startsWith('AGENTUITY_')),
79
- });
80
- const count = Object.keys(filteredSecrets).length;
81
- tui.success(`Imported ${count} secret${count !== 1 ? 's' : ''} from ${args.file} to cloud and ${localEnvPath}`);
82
- return {
83
- success: true,
84
- imported: count,
85
- skipped: Object.keys(importedSecrets).length - count,
86
- path: localEnvPath,
87
- file: args.file,
88
- };
89
- },
90
- });
91
- //# sourceMappingURL=import.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"import.js","sourceRoot":"","sources":["../../../../src/cmd/cloud/secret/import.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- export declare const command: import("../../..").CommandDefinition;
2
- export default command;
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cmd/cloud/secret/index.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,OAAO,sCAqBlB,CAAC;AACH,eAAe,OAAO,CAAC"}
@@ -1,33 +0,0 @@
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
- import { getCommand } from '../../../command-prefix';
10
- export const command = createCommand({
11
- name: 'secret',
12
- aliases: ['secrets'],
13
- description: 'Manage secrets for your project',
14
- tags: ['fast', 'requires-auth', 'requires-project'],
15
- examples: [
16
- { command: getCommand('cloud secret list'), description: 'List all secrets' },
17
- {
18
- command: getCommand('cloud secret set API_KEY "sk_..."'),
19
- description: 'Set a secret value',
20
- },
21
- ],
22
- subcommands: [
23
- listSubcommand,
24
- pullSubcommand,
25
- pushSubcommand,
26
- setSubcommand,
27
- getSubcommand,
28
- deleteSubcommand,
29
- importSubcommand,
30
- ],
31
- });
32
- export default command;
33
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cmd/cloud/secret/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,QAAQ;IACd,OAAO,EAAE,CAAC,SAAS,CAAC;IACpB,WAAW,EAAE,iCAAiC;IAC9C,IAAI,EAAE,CAAC,MAAM,EAAE,eAAe,EAAE,kBAAkB,CAAC;IACnD,QAAQ,EAAE;QACT,EAAE,OAAO,EAAE,UAAU,CAAC,mBAAmB,CAAC,EAAE,WAAW,EAAE,kBAAkB,EAAE;QAC7E;YACC,OAAO,EAAE,UAAU,CAAC,mCAAmC,CAAC;YACxD,WAAW,EAAE,oBAAoB;SACjC;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,2 +0,0 @@
1
- export declare const listSubcommand: import("../../..").SubcommandDefinition;
2
- //# sourceMappingURL=list.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../src/cmd/cloud/secret/list.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,cAAc,yCA6DzB,CAAC"}
@@ -1,65 +0,0 @@
1
- import { z } from 'zod';
2
- import { createSubcommand } from '../../../types';
3
- import * as tui from '../../../tui';
4
- import { projectGet } from '@agentuity/server';
5
- import { getCommand } from '../../../command-prefix';
6
- const SecretListResponseSchema = z.record(z.string(), z.string().describe('Secret value'));
7
- export const listSubcommand = createSubcommand({
8
- name: 'list',
9
- aliases: ['ls'],
10
- description: 'List all secrets',
11
- tags: ['read-only', 'fast', 'requires-auth', 'requires-project'],
12
- examples: [
13
- { command: getCommand('secret list'), description: 'List items' },
14
- { command: getCommand('secret list --no-mask'), description: 'Use no mask option' },
15
- ],
16
- requires: { auth: true, project: true, apiClient: true },
17
- idempotent: true,
18
- schema: {
19
- options: z.object({
20
- mask: z
21
- .boolean()
22
- .default(!!process.stdout.isTTY)
23
- .describe('mask the values in output (default: true in TTY for secrets)'),
24
- }),
25
- response: SecretListResponseSchema,
26
- },
27
- webUrl: (ctx) => `/projects/${encodeURIComponent(ctx.project.projectId)}/settings`,
28
- async handler(ctx) {
29
- const { opts, apiClient, project, options } = ctx;
30
- // Fetch project with unmasked secrets
31
- const projectData = await tui.spinner('Fetching secrets', () => {
32
- return projectGet(apiClient, { id: project.projectId, mask: false });
33
- });
34
- const secrets = projectData.secrets || {};
35
- // Skip TUI output in JSON mode
36
- if (!options.json) {
37
- if (Object.keys(secrets).length === 0) {
38
- tui.info('No secrets found');
39
- }
40
- else {
41
- // Display the secrets
42
- if (process.stdout.isTTY) {
43
- tui.newline();
44
- tui.success(`Secrets (${Object.keys(secrets).length}):`);
45
- tui.newline();
46
- }
47
- const sortedKeys = Object.keys(secrets).sort();
48
- // For secrets, masking is enabled by default in TTY (can be disabled with --no-mask)
49
- const shouldMask = opts?.mask !== false;
50
- for (const key of sortedKeys) {
51
- const value = secrets[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
- }
59
- }
60
- }
61
- }
62
- return secrets;
63
- },
64
- });
65
- //# sourceMappingURL=list.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../src/cmd/cloud/secret/list.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export declare const pullSubcommand: import("../../..").SubcommandDefinition;
2
- //# sourceMappingURL=pull.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../../../src/cmd/cloud/secret/pull.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,cAAc,yCA4EzB,CAAC"}