@agentuity/cli 0.0.58 → 0.0.60

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 (258) hide show
  1. package/dist/cli.d.ts.map +1 -1
  2. package/dist/cli.js +14 -1
  3. package/dist/cli.js.map +1 -1
  4. package/dist/cmd/ai/capabilities/show.d.ts.map +1 -1
  5. package/dist/cmd/ai/capabilities/show.js +11 -4
  6. package/dist/cmd/ai/capabilities/show.js.map +1 -1
  7. package/dist/cmd/build/bundler.d.ts +1 -1
  8. package/dist/cmd/cloud/agent/get.d.ts +2 -0
  9. package/dist/cmd/cloud/agent/get.d.ts.map +1 -0
  10. package/dist/cmd/cloud/agent/get.js +97 -0
  11. package/dist/cmd/cloud/agent/get.js.map +1 -0
  12. package/dist/cmd/cloud/agent/index.d.ts +2 -0
  13. package/dist/cmd/cloud/agent/index.d.ts.map +1 -0
  14. package/dist/cmd/cloud/agent/index.js +11 -0
  15. package/dist/cmd/cloud/agent/index.js.map +1 -0
  16. package/dist/cmd/cloud/agent/list.d.ts.map +1 -0
  17. package/dist/cmd/cloud/agent/list.js +101 -0
  18. package/dist/cmd/cloud/agent/list.js.map +1 -0
  19. package/dist/cmd/cloud/agent/schema.d.ts +4 -0
  20. package/dist/cmd/cloud/agent/schema.d.ts.map +1 -0
  21. package/dist/cmd/cloud/agent/schema.js +22 -0
  22. package/dist/cmd/cloud/agent/schema.js.map +1 -0
  23. package/dist/cmd/cloud/apikey/create.d.ts +2 -0
  24. package/dist/cmd/cloud/apikey/create.d.ts.map +1 -0
  25. package/dist/cmd/cloud/apikey/create.js +100 -0
  26. package/dist/cmd/cloud/apikey/create.js.map +1 -0
  27. package/dist/cmd/cloud/apikey/delete.d.ts.map +1 -0
  28. package/dist/cmd/cloud/apikey/delete.js +55 -0
  29. package/dist/cmd/cloud/apikey/delete.js.map +1 -0
  30. package/dist/cmd/cloud/apikey/get.d.ts +2 -0
  31. package/dist/cmd/cloud/apikey/get.d.ts.map +1 -0
  32. package/dist/cmd/cloud/apikey/get.js +57 -0
  33. package/dist/cmd/cloud/apikey/get.js.map +1 -0
  34. package/dist/cmd/cloud/apikey/index.d.ts.map +1 -0
  35. package/dist/cmd/cloud/apikey/index.js +13 -0
  36. package/dist/cmd/cloud/apikey/index.js.map +1 -0
  37. package/dist/cmd/cloud/apikey/list.d.ts +2 -0
  38. package/dist/cmd/cloud/apikey/list.d.ts.map +1 -0
  39. package/dist/cmd/cloud/apikey/list.js +53 -0
  40. package/dist/cmd/cloud/apikey/list.js.map +1 -0
  41. package/dist/cmd/cloud/db/create.d.ts +2 -0
  42. package/dist/cmd/cloud/db/create.d.ts.map +1 -0
  43. package/dist/cmd/cloud/db/create.js +68 -0
  44. package/dist/cmd/cloud/db/create.js.map +1 -0
  45. package/dist/cmd/cloud/db/delete.d.ts +2 -0
  46. package/dist/cmd/cloud/db/delete.d.ts.map +1 -0
  47. package/dist/cmd/cloud/db/delete.js +106 -0
  48. package/dist/cmd/cloud/db/delete.js.map +1 -0
  49. package/dist/cmd/cloud/db/get.d.ts +2 -0
  50. package/dist/cmd/cloud/db/get.d.ts.map +1 -0
  51. package/dist/cmd/cloud/db/get.js +66 -0
  52. package/dist/cmd/cloud/db/get.js.map +1 -0
  53. package/dist/cmd/cloud/db/index.d.ts +2 -0
  54. package/dist/cmd/cloud/db/index.d.ts.map +1 -0
  55. package/dist/cmd/cloud/db/index.js +14 -0
  56. package/dist/cmd/cloud/db/index.js.map +1 -0
  57. package/dist/cmd/cloud/db/list.d.ts +2 -0
  58. package/dist/cmd/cloud/db/list.d.ts.map +1 -0
  59. package/dist/cmd/cloud/db/list.js +75 -0
  60. package/dist/cmd/cloud/db/list.js.map +1 -0
  61. package/dist/cmd/cloud/db/sql.d.ts +2 -0
  62. package/dist/cmd/cloud/db/sql.d.ts.map +1 -0
  63. package/dist/cmd/cloud/db/sql.js +102 -0
  64. package/dist/cmd/cloud/db/sql.js.map +1 -0
  65. package/dist/cmd/cloud/deployment/index.d.ts.map +1 -1
  66. package/dist/cmd/cloud/deployment/index.js +2 -0
  67. package/dist/cmd/cloud/deployment/index.js.map +1 -1
  68. package/dist/cmd/cloud/deployment/logs.d.ts +2 -0
  69. package/dist/cmd/cloud/deployment/logs.d.ts.map +1 -0
  70. package/dist/cmd/cloud/deployment/logs.js +70 -0
  71. package/dist/cmd/cloud/deployment/logs.js.map +1 -0
  72. package/dist/cmd/cloud/env/get.d.ts.map +1 -1
  73. package/dist/cmd/cloud/env/get.js +2 -3
  74. package/dist/cmd/cloud/env/get.js.map +1 -1
  75. package/dist/cmd/cloud/env/list.d.ts.map +1 -1
  76. package/dist/cmd/cloud/env/list.js +1 -2
  77. package/dist/cmd/cloud/env/list.js.map +1 -1
  78. package/dist/cmd/cloud/index.d.ts.map +1 -1
  79. package/dist/cmd/cloud/index.js +12 -4
  80. package/dist/cmd/cloud/index.js.map +1 -1
  81. package/dist/cmd/cloud/secret/get.d.ts.map +1 -1
  82. package/dist/cmd/cloud/secret/get.js +2 -3
  83. package/dist/cmd/cloud/secret/get.js.map +1 -1
  84. package/dist/cmd/cloud/secret/list.d.ts.map +1 -1
  85. package/dist/cmd/cloud/secret/list.js +1 -2
  86. package/dist/cmd/cloud/secret/list.js.map +1 -1
  87. package/dist/cmd/cloud/session/logs.d.ts.map +1 -1
  88. package/dist/cmd/cloud/session/logs.js +12 -9
  89. package/dist/cmd/cloud/session/logs.js.map +1 -1
  90. package/dist/cmd/cloud/storage/create.d.ts +2 -0
  91. package/dist/cmd/cloud/storage/create.d.ts.map +1 -0
  92. package/dist/cmd/cloud/storage/create.js +61 -0
  93. package/dist/cmd/cloud/storage/create.js.map +1 -0
  94. package/dist/cmd/cloud/storage/delete.d.ts +2 -0
  95. package/dist/cmd/cloud/storage/delete.d.ts.map +1 -0
  96. package/dist/cmd/cloud/storage/delete.js +167 -0
  97. package/dist/cmd/cloud/storage/delete.js.map +1 -0
  98. package/dist/cmd/cloud/storage/download.d.ts +2 -0
  99. package/dist/cmd/cloud/storage/download.d.ts.map +1 -0
  100. package/dist/cmd/cloud/storage/download.js +131 -0
  101. package/dist/cmd/cloud/storage/download.js.map +1 -0
  102. package/dist/cmd/cloud/storage/get.d.ts +2 -0
  103. package/dist/cmd/cloud/storage/get.d.ts.map +1 -0
  104. package/dist/cmd/cloud/storage/get.js +86 -0
  105. package/dist/cmd/cloud/storage/get.js.map +1 -0
  106. package/dist/cmd/cloud/storage/index.d.ts +2 -0
  107. package/dist/cmd/cloud/storage/index.d.ts.map +1 -0
  108. package/dist/cmd/cloud/storage/index.js +22 -0
  109. package/dist/cmd/cloud/storage/index.js.map +1 -0
  110. package/dist/cmd/cloud/storage/list.d.ts +2 -0
  111. package/dist/cmd/cloud/storage/list.d.ts.map +1 -0
  112. package/dist/cmd/cloud/storage/list.js +170 -0
  113. package/dist/cmd/cloud/storage/list.js.map +1 -0
  114. package/dist/cmd/cloud/storage/upload.d.ts +2 -0
  115. package/dist/cmd/cloud/storage/upload.d.ts.map +1 -0
  116. package/dist/cmd/cloud/storage/upload.js +133 -0
  117. package/dist/cmd/cloud/storage/upload.js.map +1 -0
  118. package/dist/cmd/cloud/storage/utils.d.ts +18 -0
  119. package/dist/cmd/cloud/storage/utils.d.ts.map +1 -0
  120. package/dist/cmd/cloud/storage/utils.js +21 -0
  121. package/dist/cmd/cloud/storage/utils.js.map +1 -0
  122. package/dist/cmd/cloud/stream/delete.d.ts +3 -0
  123. package/dist/cmd/cloud/stream/delete.d.ts.map +1 -0
  124. package/dist/cmd/cloud/stream/delete.js +42 -0
  125. package/dist/cmd/cloud/stream/delete.js.map +1 -0
  126. package/dist/cmd/cloud/stream/get.d.ts +3 -0
  127. package/dist/cmd/cloud/stream/get.d.ts.map +1 -0
  128. package/dist/cmd/cloud/stream/get.js +110 -0
  129. package/dist/cmd/cloud/stream/get.js.map +1 -0
  130. package/dist/cmd/cloud/stream/index.d.ts +3 -0
  131. package/dist/cmd/cloud/stream/index.d.ts.map +1 -0
  132. package/dist/cmd/cloud/stream/index.js +13 -0
  133. package/dist/cmd/cloud/stream/index.js.map +1 -0
  134. package/dist/cmd/cloud/stream/list.d.ts +3 -0
  135. package/dist/cmd/cloud/stream/list.d.ts.map +1 -0
  136. package/dist/cmd/cloud/stream/list.js +131 -0
  137. package/dist/cmd/cloud/stream/list.js.map +1 -0
  138. package/dist/cmd/cloud/stream/util.d.ts +8 -0
  139. package/dist/cmd/cloud/stream/util.d.ts.map +1 -0
  140. package/dist/cmd/cloud/stream/util.js +19 -0
  141. package/dist/cmd/cloud/stream/util.js.map +1 -0
  142. package/dist/cmd/cloud/vector/delete.d.ts +3 -0
  143. package/dist/cmd/cloud/vector/delete.d.ts.map +1 -0
  144. package/dist/cmd/cloud/vector/delete.js +90 -0
  145. package/dist/cmd/cloud/vector/delete.js.map +1 -0
  146. package/dist/cmd/cloud/vector/get.d.ts +3 -0
  147. package/dist/cmd/cloud/vector/get.d.ts.map +1 -0
  148. package/dist/cmd/cloud/vector/get.js +80 -0
  149. package/dist/cmd/cloud/vector/get.js.map +1 -0
  150. package/dist/cmd/cloud/vector/index.d.ts +3 -0
  151. package/dist/cmd/cloud/vector/index.d.ts.map +1 -0
  152. package/dist/cmd/cloud/vector/index.js +14 -0
  153. package/dist/cmd/cloud/vector/index.js.map +1 -0
  154. package/dist/cmd/cloud/vector/search.d.ts +3 -0
  155. package/dist/cmd/cloud/vector/search.d.ts.map +1 -0
  156. package/dist/cmd/cloud/vector/search.js +136 -0
  157. package/dist/cmd/cloud/vector/search.js.map +1 -0
  158. package/dist/cmd/cloud/vector/util.d.ts +8 -0
  159. package/dist/cmd/cloud/vector/util.d.ts.map +1 -0
  160. package/dist/cmd/cloud/vector/util.js +18 -0
  161. package/dist/cmd/cloud/vector/util.js.map +1 -0
  162. package/dist/cmd/dev/agents.d.ts.map +1 -1
  163. package/dist/cmd/dev/agents.js +3 -2
  164. package/dist/cmd/dev/agents.js.map +1 -1
  165. package/dist/cmd/dev/index.js +3 -3
  166. package/dist/cmd/dev/index.js.map +1 -1
  167. package/dist/cmd/index.d.ts.map +1 -1
  168. package/dist/cmd/index.js +38 -42
  169. package/dist/cmd/index.js.map +1 -1
  170. package/dist/schema-parser.d.ts.map +1 -1
  171. package/dist/schema-parser.js +3 -1
  172. package/dist/schema-parser.js.map +1 -1
  173. package/dist/tui.d.ts +12 -2
  174. package/dist/tui.d.ts.map +1 -1
  175. package/dist/tui.js +61 -31
  176. package/dist/tui.js.map +1 -1
  177. package/dist/utils/date.d.ts +14 -0
  178. package/dist/utils/date.d.ts.map +1 -0
  179. package/dist/utils/date.js +51 -0
  180. package/dist/utils/date.js.map +1 -0
  181. package/dist/version.js +1 -1
  182. package/dist/version.js.map +1 -1
  183. package/package.json +6 -6
  184. package/src/cli.ts +15 -1
  185. package/src/cmd/ai/capabilities/show.ts +11 -4
  186. package/src/cmd/cloud/agent/get.ts +105 -0
  187. package/src/cmd/cloud/agent/index.ts +11 -0
  188. package/src/cmd/cloud/agent/list.ts +107 -0
  189. package/src/cmd/cloud/agent/schema.ts +25 -0
  190. package/src/cmd/cloud/apikey/create.ts +114 -0
  191. package/src/cmd/cloud/apikey/delete.ts +66 -0
  192. package/src/cmd/cloud/apikey/get.ts +62 -0
  193. package/src/cmd/cloud/apikey/index.ts +13 -0
  194. package/src/cmd/cloud/apikey/list.ts +58 -0
  195. package/src/cmd/cloud/db/create.ts +72 -0
  196. package/src/cmd/cloud/db/delete.ts +118 -0
  197. package/src/cmd/cloud/db/get.ts +75 -0
  198. package/src/cmd/cloud/db/index.ts +14 -0
  199. package/src/cmd/cloud/db/list.ts +83 -0
  200. package/src/cmd/cloud/db/sql.ts +125 -0
  201. package/src/cmd/cloud/deployment/index.ts +2 -0
  202. package/src/cmd/cloud/deployment/logs.ts +75 -0
  203. package/src/cmd/cloud/env/get.ts +2 -3
  204. package/src/cmd/cloud/env/list.ts +1 -2
  205. package/src/cmd/cloud/index.ts +13 -4
  206. package/src/cmd/cloud/secret/get.ts +2 -3
  207. package/src/cmd/cloud/secret/list.ts +1 -2
  208. package/src/cmd/cloud/session/logs.ts +12 -11
  209. package/src/cmd/cloud/storage/create.ts +65 -0
  210. package/src/cmd/cloud/storage/delete.ts +195 -0
  211. package/src/cmd/cloud/storage/download.ts +154 -0
  212. package/src/cmd/cloud/storage/get.ts +97 -0
  213. package/src/cmd/cloud/storage/index.ts +22 -0
  214. package/src/cmd/cloud/storage/list.ts +197 -0
  215. package/src/cmd/cloud/storage/upload.ts +150 -0
  216. package/src/cmd/cloud/storage/utils.ts +26 -0
  217. package/src/cmd/cloud/stream/delete.ts +49 -0
  218. package/src/cmd/cloud/stream/get.ts +118 -0
  219. package/src/cmd/cloud/stream/index.ts +14 -0
  220. package/src/cmd/cloud/stream/list.ts +146 -0
  221. package/src/cmd/cloud/stream/util.ts +32 -0
  222. package/src/cmd/cloud/vector/delete.ts +105 -0
  223. package/src/cmd/cloud/vector/get.ts +94 -0
  224. package/src/cmd/cloud/vector/index.ts +15 -0
  225. package/src/cmd/cloud/vector/search.ts +156 -0
  226. package/src/cmd/cloud/vector/util.ts +28 -0
  227. package/src/cmd/dev/agents.ts +4 -3
  228. package/src/cmd/dev/index.ts +3 -3
  229. package/src/cmd/index.ts +38 -42
  230. package/src/schema-parser.ts +3 -1
  231. package/src/tui.ts +73 -36
  232. package/src/utils/date.ts +57 -0
  233. package/src/version.ts +1 -1
  234. package/dist/cmd/cloud/agents/index.d.ts.map +0 -1
  235. package/dist/cmd/cloud/agents/index.js +0 -133
  236. package/dist/cmd/cloud/agents/index.js.map +0 -1
  237. package/dist/cmd/cloud/resource/add.d.ts +0 -2
  238. package/dist/cmd/cloud/resource/add.d.ts.map +0 -1
  239. package/dist/cmd/cloud/resource/add.js +0 -70
  240. package/dist/cmd/cloud/resource/add.js.map +0 -1
  241. package/dist/cmd/cloud/resource/delete.d.ts.map +0 -1
  242. package/dist/cmd/cloud/resource/delete.js +0 -126
  243. package/dist/cmd/cloud/resource/delete.js.map +0 -1
  244. package/dist/cmd/cloud/resource/index.d.ts +0 -2
  245. package/dist/cmd/cloud/resource/index.d.ts.map +0 -1
  246. package/dist/cmd/cloud/resource/index.js +0 -12
  247. package/dist/cmd/cloud/resource/index.js.map +0 -1
  248. package/dist/cmd/cloud/resource/list.d.ts.map +0 -1
  249. package/dist/cmd/cloud/resource/list.js +0 -100
  250. package/dist/cmd/cloud/resource/list.js.map +0 -1
  251. package/src/cmd/cloud/agents/index.ts +0 -148
  252. package/src/cmd/cloud/resource/add.ts +0 -75
  253. package/src/cmd/cloud/resource/delete.ts +0 -141
  254. package/src/cmd/cloud/resource/index.ts +0 -12
  255. package/src/cmd/cloud/resource/list.ts +0 -105
  256. /package/dist/cmd/cloud/{resource → agent}/list.d.ts +0 -0
  257. /package/dist/cmd/cloud/{resource → apikey}/delete.d.ts +0 -0
  258. /package/dist/cmd/cloud/{agents → apikey}/index.d.ts +0 -0
@@ -0,0 +1,28 @@
1
+ import { Logger, VectorStorageService } from '@agentuity/core';
2
+ import { createServerFetchAdapter } from '@agentuity/server';
3
+ import { loadProjectSDKKey } from '../../../config';
4
+ import type { Config } from '../../../types';
5
+ import * as tui from '../../../tui';
6
+
7
+ export async function createStorageAdapter(ctx: {
8
+ logger: Logger;
9
+ projectDir: string;
10
+ config: Config | null;
11
+ }) {
12
+ const sdkKey = await loadProjectSDKKey(ctx.projectDir);
13
+ if (!sdkKey) {
14
+ tui.fatal(`Couldn't find the AGENTUITY_SDK_KEY in ${ctx.projectDir} .env file`);
15
+ }
16
+
17
+ const adapter = createServerFetchAdapter(
18
+ {
19
+ headers: {
20
+ Authorization: `Bearer ${sdkKey}`,
21
+ },
22
+ },
23
+ ctx.logger
24
+ );
25
+
26
+ const baseUrl = ctx.config?.overrides?.catalyst_url ?? 'https://catalyst.agentuity.cloud';
27
+ return new VectorStorageService(baseUrl, adapter);
28
+ }
@@ -8,7 +8,7 @@ const AgentSchema = z.object({
8
8
  id: z.string(),
9
9
  name: z.string(),
10
10
  description: z.string().nullable(),
11
- identifier: z.string(),
11
+ identifier: z.string().nullable(), // nullable for legacy records
12
12
  version: z.string().nullable(),
13
13
  deploymentId: z.string().nullable(),
14
14
  devmode: z.boolean(),
@@ -75,7 +75,8 @@ export const agentsSubcommand = createSubcommand({
75
75
  tui.fatal(`Failed to fetch agents: ${response.message ?? 'Unknown error'}`);
76
76
  }
77
77
 
78
- const agents = response.data;
78
+ // Filter out legacy agents without identifiers
79
+ const agents = response.data.filter((agent) => agent.identifier !== null);
79
80
 
80
81
  if (format === 'json' && !options.json) {
81
82
  console.log(JSON.stringify(agents, null, 2));
@@ -91,7 +92,7 @@ export const agentsSubcommand = createSubcommand({
91
92
  agents.map((agent) => ({
92
93
  name: agent.name,
93
94
  id: verbose ? agent.id : abbreviate(agent.id, 20),
94
- identifier: verbose ? agent.identifier : abbreviate(agent.identifier, 20),
95
+ identifier: verbose ? agent.identifier! : abbreviate(agent.identifier!, 20),
95
96
  deployment: abbreviate(agent.deploymentId, 20),
96
97
  version: verbose
97
98
  ? (agent.version ?? 'N/A')
@@ -110,7 +110,7 @@ export const command = createCommand({
110
110
  );
111
111
  const deploymentId = getDevmodeDeploymentId(project?.projectId ?? '', devmode?.id ?? '');
112
112
 
113
- if (devmode) {
113
+ if (devmode && opts.public) {
114
114
  const configDir = getDefaultConfigDir();
115
115
  const gravityDir = join(configDir, 'gravity');
116
116
  let mustCheck = true;
@@ -242,7 +242,7 @@ export const command = createCommand({
242
242
  if (!sdkKey) {
243
243
  tui.warning(`Couldn't find the AGENTUITY_SDK_KEY in ${rootDir} .env file`);
244
244
  }
245
- const gravityBinExists = gravityBin ? await Bun.file(gravityBin).exists() : undefined;
245
+ const gravityBinExists = gravityBin ? await Bun.file(gravityBin).exists() : true;
246
246
  if (!gravityBinExists) {
247
247
  logger.error(`Gravity binary not found at ${gravityBin}, skipping gravity client startup`);
248
248
  }
@@ -252,7 +252,7 @@ export const command = createCommand({
252
252
  gravityClient.kill('SIGINT');
253
253
  gravityClient.kill();
254
254
  }
255
- if (!devmode) {
255
+ if (!devmode || !opts.public) {
256
256
  return;
257
257
  }
258
258
  try {
package/src/cmd/index.ts CHANGED
@@ -1,53 +1,49 @@
1
- import { readdir } from 'node:fs/promises';
2
- import { join } from 'node:path';
3
1
  import type { CommandDefinition } from '../types';
4
2
 
3
+ // Use dynamic imports for bundler compatibility while maintaining lazy loading
5
4
  export async function discoverCommands(): Promise<CommandDefinition[]> {
6
- const cmdDir = join(import.meta.dir);
7
- const entries = await readdir(cmdDir, { withFileTypes: true });
5
+ const commandModules = await Promise.all([
6
+ import('./ai').then((m) => m.command),
7
+ import('./auth').then((m) => m.command),
8
+ import('./build').then((m) => m.command),
9
+ import('./cloud').then((m) => m.command),
10
+ import('./dev').then((m) => m.command),
11
+ import('./profile').then((m) => m.command),
12
+ import('./project').then((m) => m.command),
13
+ import('./repl').then((m) => m.command),
14
+ import('./version').then((m) => m.command),
15
+ ]);
8
16
 
9
17
  const commands: CommandDefinition[] = [];
10
18
 
11
- for (const entry of entries) {
12
- if (entry.isDirectory()) {
13
- try {
14
- const modulePath = join(cmdDir, entry.name, 'index.ts');
15
- const module = await import(modulePath);
19
+ for (const cmd of commandModules) {
20
+ commands.push(cmd);
16
21
 
17
- if (module.default || module.command) {
18
- const cmd = module.default || module.command;
19
- commands.push(cmd);
20
-
21
- // Auto-create hidden top-level aliases for subcommands with toplevel: true
22
- if (cmd.subcommands) {
23
- for (const subcommand of cmd.subcommands) {
24
- if (subcommand.toplevel) {
25
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
26
- const alias: any = {
27
- name: subcommand.name,
28
- description: subcommand.description,
29
- aliases: subcommand.aliases,
30
- hidden: true,
31
- requires: subcommand.requires,
32
- optional: subcommand.optional,
33
- schema: subcommand.schema,
34
- handler: subcommand.handler,
35
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
36
- idempotent: (subcommand as any).idempotent,
37
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
38
- prerequisites: (subcommand as any).prerequisites,
39
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
40
- tags: (subcommand as any).tags,
41
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
42
- examples: (subcommand as any).examples,
43
- };
44
- commands.push(alias as CommandDefinition);
45
- }
46
- }
47
- }
22
+ // Auto-create hidden top-level aliases for subcommands with toplevel: true
23
+ if (cmd.subcommands) {
24
+ for (const subcommand of cmd.subcommands) {
25
+ if (subcommand.toplevel) {
26
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
27
+ const alias: any = {
28
+ name: subcommand.name,
29
+ description: subcommand.description,
30
+ aliases: subcommand.aliases,
31
+ hidden: true,
32
+ requires: subcommand.requires,
33
+ optional: subcommand.optional,
34
+ schema: subcommand.schema,
35
+ handler: subcommand.handler,
36
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
37
+ idempotent: (subcommand as any).idempotent,
38
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
39
+ prerequisites: (subcommand as any).prerequisites,
40
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
41
+ tags: (subcommand as any).tags,
42
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
43
+ examples: (subcommand as any).examples,
44
+ };
45
+ commands.push(alias as CommandDefinition);
48
46
  }
49
- } catch (error) {
50
- console.warn(`Warning: Failed to load command from ${entry.name}:`, error);
51
47
  }
52
48
  }
53
49
  }
@@ -216,7 +216,9 @@ export function buildValidationInput(
216
216
  const parsed = parseOptionsSchema(schemas.options);
217
217
  for (const opt of parsed) {
218
218
  // Only include the option if it has a value - omitting undefined allows Zod to apply defaults
219
- const value = rawOptions[opt.name];
219
+ // Commander.js converts kebab-case to camelCase, so we need to check both
220
+ const camelCaseName = opt.name.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());
221
+ const value = rawOptions[opt.name] ?? rawOptions[camelCaseName];
220
222
  if (value !== undefined) {
221
223
  result.options[opt.name] = value;
222
224
  }
package/src/tui.ts CHANGED
@@ -13,6 +13,10 @@ import type { ColorScheme } from './terminal';
13
13
  import type { Profile } from './types';
14
14
  import { type APIClient as APIClientType } from './api';
15
15
  import { getExitCode } from './errors';
16
+ import { maskSecret } from './env-util';
17
+
18
+ // Re-export maskSecret for convenience
19
+ export { maskSecret };
16
20
 
17
21
  // Icons
18
22
  const ICONS = {
@@ -135,6 +139,24 @@ export function colorMuted(text: string): string {
135
139
  return `${color}${text}${reset}`;
136
140
  }
137
141
 
142
+ /**
143
+ * Get the appropriate color function for a log severity level
144
+ */
145
+ export function getSeverityColor(severity: string): (text: string) => string {
146
+ switch (severity.toUpperCase()) {
147
+ case 'ERROR':
148
+ return colorError;
149
+ case 'WARN':
150
+ return colorWarning;
151
+ case 'INFO':
152
+ return colorInfo;
153
+ case 'DEBUG':
154
+ return colorMuted;
155
+ default:
156
+ return (text: string) => text;
157
+ }
158
+ }
159
+
138
160
  /**
139
161
  * Print a success message with a green checkmark
140
162
  */
@@ -214,6 +236,25 @@ export function bold(text: string): string {
214
236
  return `${color}${text}${reset}`;
215
237
  }
216
238
 
239
+ /**
240
+ * Format text with white bold (or inverse for light mode)
241
+ * Used for table headings
242
+ */
243
+ export function heading(text: string): string {
244
+ const USE_COLORS = shouldUseColors();
245
+ if (!USE_COLORS) {
246
+ return text;
247
+ }
248
+
249
+ // For light mode: use inverse (black bg, white text)
250
+ // For dark mode: use white bold
251
+ const style = isDarkMode()
252
+ ? '\x1b[1;37m' // bold white
253
+ : '\x1b[7m'; // inverse
254
+ const reset = getColor('reset');
255
+ return `${style}${text}${reset}`;
256
+ }
257
+
217
258
  /**
218
259
  * Format text as a link (blue and underlined)
219
260
  */
@@ -1377,7 +1418,7 @@ export interface TableColumn {
1377
1418
  }
1378
1419
 
1379
1420
  /**
1380
- * Display data in a formatted table using console-table-printer
1421
+ * Display data in a formatted table using cli-table3
1381
1422
  *
1382
1423
  * Supports two modes:
1383
1424
  * 1. Simple mode: Pass data array and optional column names
@@ -1393,14 +1434,14 @@ export function table<T extends Record<string, unknown>>(
1393
1434
  columns?: (keyof T)[] | TableColumn[],
1394
1435
  options?: { render?: boolean }
1395
1436
  ): string | void {
1396
- // Dynamic import to avoid type errors (console-table-printer has poor typings)
1397
1437
  // eslint-disable-next-line @typescript-eslint/no-require-imports
1398
- const { Table } = require('console-table-printer') as {
1399
- Table: new (options?: { columns?: Array<{ name: string; alignment: string }> }) => {
1400
- addRow(row: Record<string, unknown>): void;
1401
- printTable(): void;
1402
- render(): string;
1403
- };
1438
+ const Table = require('cli-table3') as new (options?: {
1439
+ head?: string[];
1440
+ colAligns?: Array<'left' | 'right' | 'center'>;
1441
+ wordWrap?: boolean;
1442
+ }) => {
1443
+ push(row: unknown[]): void;
1444
+ toString(): string;
1404
1445
  };
1405
1446
 
1406
1447
  if (!data || data.length === 0) {
@@ -1410,52 +1451,48 @@ export function table<T extends Record<string, unknown>>(
1410
1451
  // Determine if we're using advanced column config or simple column names
1411
1452
  const isAdvancedMode = columns && columns.length > 0 && typeof columns[0] === 'object';
1412
1453
 
1413
- let tableConfig: { columns: Array<{ name: string; alignment: string }> };
1454
+ let columnNames: string[];
1455
+ let colAligns: Array<'left' | 'right' | 'center'>;
1414
1456
 
1415
1457
  if (isAdvancedMode) {
1416
1458
  // Advanced mode: use provided column configurations
1417
- tableConfig = {
1418
- columns: (columns as TableColumn[]).map((col) => ({
1419
- name: col.name,
1420
- alignment: col.alignment || 'left',
1421
- })),
1422
- };
1459
+ const columnConfigs = columns as TableColumn[];
1460
+ columnNames = columnConfigs.map((col) => col.name);
1461
+ colAligns = columnConfigs.map((col) => col.alignment || 'left');
1423
1462
  } else {
1424
1463
  // Simple mode: determine column names from data or columns parameter
1425
- const columnNames = columns
1464
+ columnNames = columns
1426
1465
  ? (columns as (keyof T)[]).map((c) => String(c))
1427
1466
  : data.length > 0
1428
1467
  ? Object.keys(data[0])
1429
1468
  : [];
1430
-
1431
- tableConfig = {
1432
- columns: columnNames.map((name) => ({
1433
- name,
1434
- alignment: 'left',
1435
- })),
1436
- };
1469
+ colAligns = columnNames.map(() => 'left' as const);
1437
1470
  }
1438
1471
 
1439
- const t = new Table(tableConfig);
1472
+ // Apply heading style to column names
1473
+ const headings = columnNames.map((name) => heading(name));
1474
+
1475
+ const t = new Table({
1476
+ head: headings,
1477
+ colAligns,
1478
+ wordWrap: true,
1479
+ });
1440
1480
 
1441
1481
  // Add rows to table
1442
1482
  for (const row of data) {
1443
- if (columns && !isAdvancedMode) {
1444
- // Simple mode with column filtering
1445
- const filtered: Record<string, unknown> = {};
1446
- for (const col of columns as (keyof T)[]) {
1447
- filtered[String(col)] = row[col];
1448
- }
1449
- t.addRow(filtered);
1450
- } else {
1451
- // Advanced mode or no column filtering
1452
- t.addRow(row);
1483
+ const rowData: unknown[] = [];
1484
+ for (const colName of columnNames) {
1485
+ const value = row[colName];
1486
+ rowData.push(value !== undefined && value !== null ? String(value) : '');
1453
1487
  }
1488
+ t.push(rowData);
1454
1489
  }
1455
1490
 
1491
+ const output = t.toString();
1492
+
1456
1493
  if (options?.render) {
1457
- return t.render();
1494
+ return output;
1458
1495
  } else {
1459
- t.printTable();
1496
+ console.log(output);
1460
1497
  }
1461
1498
  }
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Parse duration string (e.g., "1h", "2d", "1y") or ISO date to ISO date string
3
+ *
4
+ * @param input - Duration string (1m, 1h, 2d, 1w, 1y) or ISO date (2025-12-31T23:59:59Z)
5
+ * @returns ISO date string
6
+ * @throws Error if input format is invalid
7
+ *
8
+ * @example
9
+ * parseExpiresAt('1h') // Returns ISO date 1 hour from now
10
+ * parseExpiresAt('30d') // Returns ISO date 30 days from now
11
+ * parseExpiresAt('2025-12-31T23:59:59Z') // Returns same ISO date
12
+ */
13
+ export function parseExpiresAt(input: string): string {
14
+ // Check if it's already an ISO date format
15
+ if (input.includes('T') || input.includes('-')) {
16
+ // Validate it's a valid date
17
+ const date = new Date(input);
18
+ if (isNaN(date.getTime())) {
19
+ throw new Error(`Invalid date format: ${input}`);
20
+ }
21
+ return date.toISOString();
22
+ }
23
+
24
+ // Parse duration format (e.g., "1h", "2d", "30d", "1y")
25
+ const durationRegex = /^(\d+)(m|h|d|w|y)$/;
26
+ const match = input.match(durationRegex);
27
+
28
+ if (!match) {
29
+ throw new Error(
30
+ `Invalid expires-at format: ${input}. Use ISO date (2025-12-31T23:59:59Z) or duration (1h, 2d, 1y)`
31
+ );
32
+ }
33
+
34
+ const [, amount, unit] = match;
35
+ const num = parseInt(amount, 10);
36
+ const now = new Date();
37
+
38
+ switch (unit) {
39
+ case 'm': // minutes
40
+ now.setMinutes(now.getMinutes() + num);
41
+ break;
42
+ case 'h': // hours
43
+ now.setHours(now.getHours() + num);
44
+ break;
45
+ case 'd': // days
46
+ now.setDate(now.getDate() + num);
47
+ break;
48
+ case 'w': // weeks
49
+ now.setDate(now.getDate() + num * 7);
50
+ break;
51
+ case 'y': // years
52
+ now.setFullYear(now.getFullYear() + num);
53
+ break;
54
+ }
55
+
56
+ return now.toISOString();
57
+ }
package/src/version.ts CHANGED
@@ -16,7 +16,7 @@ export function getPackage(): typeof pkg {
16
16
  }
17
17
 
18
18
  export function getVersion(): string {
19
- return getPackage().version || 'dev';
19
+ return process.env.AGENTUITY_CLI_VERSION || getPackage().version || 'dev';
20
20
  }
21
21
 
22
22
  export function getPackageName(): string {
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cmd/cloud/agents/index.ts"],"names":[],"mappings":"AAmCA,eAAO,MAAM,OAAO,sCA+GlB,CAAC;AACH,eAAe,OAAO,CAAC"}
@@ -1,133 +0,0 @@
1
- import { z } from 'zod';
2
- import { createCommand } from '../../../types';
3
- import * as tui from '../../../tui';
4
- import { APIResponseSchema } from '@agentuity/server';
5
- import { Table } from 'console-table-printer';
6
- import { abbreviate, abbreviateDescription } from '../../../utils/format';
7
- const AgentSchema = z.object({
8
- id: z.string(),
9
- name: z.string(),
10
- description: z.string().nullable(),
11
- identifier: z.string(),
12
- version: z.string().nullable(),
13
- deploymentId: z.string().nullable(),
14
- devmode: z.boolean(),
15
- metadata: z.record(z.string(), z.unknown()).nullable(),
16
- createdAt: z.string(),
17
- updatedAt: z.string(),
18
- evals: z.array(z.object({
19
- id: z.string(),
20
- name: z.string(),
21
- description: z.string().nullable(),
22
- identifier: z.string().nullable(),
23
- deploymentId: z.string().nullable(),
24
- version: z.string().nullable(),
25
- devmode: z.boolean(),
26
- createdAt: z.string(),
27
- updatedAt: z.string(),
28
- })),
29
- });
30
- const AgentsResponseSchema = APIResponseSchema(z.array(AgentSchema));
31
- export const command = createCommand({
32
- name: 'agents',
33
- description: 'Show devmode agent results',
34
- requires: { auth: true, apiClient: true, project: true },
35
- schema: {
36
- options: z.object({
37
- deploymentId: z.string().optional().describe('Filter by deployment ID'),
38
- format: z
39
- .enum(['json', 'table'])
40
- .optional()
41
- .default('table')
42
- .describe('Output format: json or table'),
43
- verbose: z.boolean().optional().default(false).describe('Show full IDs and descriptions'),
44
- }),
45
- },
46
- async handler(ctx) {
47
- const { opts, apiClient, project } = ctx;
48
- const projectId = project.projectId;
49
- const format = opts?.format ?? 'table';
50
- const verbose = opts?.verbose ?? false;
51
- const deploymentId = opts?.deploymentId;
52
- const queryParams = deploymentId ? `?deploymentId=${deploymentId}` : '';
53
- const response = await tui.spinner('Fetching agents', async () => {
54
- return apiClient.request('GET', `/cli/agent/${projectId}${queryParams}`, AgentsResponseSchema);
55
- });
56
- if (!response.success) {
57
- tui.fatal(`Failed to fetch agents: ${response.message ?? 'Unknown error'}`);
58
- }
59
- const agents = response.data;
60
- if (format === 'json') {
61
- console.log(JSON.stringify(agents, null, 2));
62
- return;
63
- }
64
- tui.info(`Agents (${agents.length})`);
65
- if (agents.length === 0) {
66
- tui.muted('No agents found');
67
- }
68
- else {
69
- const table = new Table({
70
- columns: [
71
- { name: 'Name', alignment: 'left' },
72
- { name: 'ID', alignment: 'left' },
73
- { name: 'Identifier', alignment: 'left' },
74
- { name: 'Deployment', alignment: 'left' },
75
- { name: 'Version', alignment: 'left' },
76
- { name: 'Evals', alignment: 'center' },
77
- { name: 'Created', alignment: 'left' },
78
- ],
79
- });
80
- for (const agent of agents) {
81
- table.addRow({
82
- Name: agent.name,
83
- ID: verbose ? agent.id : abbreviate(agent.id, 20),
84
- Identifier: verbose ? agent.identifier : abbreviate(agent.identifier, 20),
85
- Deployment: abbreviate(agent.deploymentId, 20),
86
- Version: verbose
87
- ? (agent.version ?? 'N/A')
88
- : (abbreviate(agent.version, 20) ?? 'N/A'),
89
- Evals: agent.evals.length,
90
- Created: new Date(agent.createdAt).toLocaleString(),
91
- });
92
- }
93
- table.printTable();
94
- // Show evals for each agent
95
- for (const agent of agents) {
96
- if (agent.evals.length > 0) {
97
- console.log(`\n Evals for ${agent.name}:`);
98
- const evalTable = new Table({
99
- columns: [
100
- { name: 'Name', alignment: 'left' },
101
- { name: 'ID', alignment: 'left' },
102
- { name: 'Identifier', alignment: 'left' },
103
- { name: 'Deployment', alignment: 'left' },
104
- { name: 'Version', alignment: 'left' },
105
- { name: 'Description', alignment: 'left' },
106
- { name: 'Created', alignment: 'left' },
107
- ],
108
- });
109
- for (const evalItem of agent.evals) {
110
- evalTable.addRow({
111
- Name: evalItem.name,
112
- ID: verbose ? evalItem.id : abbreviate(evalItem.id, 20),
113
- Identifier: verbose
114
- ? (evalItem.identifier ?? 'N/A')
115
- : (abbreviate(evalItem.identifier, 20) ?? 'N/A'),
116
- Deployment: abbreviate(evalItem.deploymentId, 20),
117
- Version: verbose
118
- ? (evalItem.version ?? 'N/A')
119
- : (abbreviate(evalItem.version, 20) ?? 'N/A'),
120
- Description: verbose
121
- ? (evalItem.description ?? 'N/A')
122
- : abbreviateDescription(evalItem.description),
123
- Created: new Date(evalItem.createdAt).toLocaleString(),
124
- });
125
- }
126
- evalTable.printTable();
127
- }
128
- }
129
- }
130
- },
131
- });
132
- export default command;
133
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cmd/cloud/agents/index.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export declare const addSubcommand: import("../../..").SubcommandDefinition;
2
- //# sourceMappingURL=add.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../../../src/cmd/cloud/resource/add.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,aAAa,yCAkExB,CAAC"}
@@ -1,70 +0,0 @@
1
- import { z } from 'zod';
2
- import { createResources } from '@agentuity/server';
3
- import enquirer from 'enquirer';
4
- import { createSubcommand } from '../../../types';
5
- import * as tui from '../../../tui';
6
- import { getCatalystAPIClient } from '../../../config';
7
- import { getCommand } from '../../../command-prefix';
8
- export const addSubcommand = createSubcommand({
9
- name: 'add',
10
- aliases: ['create'],
11
- description: 'Add a cloud resource for an organization',
12
- tags: ['mutating', 'creates-resource', 'slow', 'requires-auth', 'requires-deployment'],
13
- idempotent: false,
14
- requires: { auth: true, org: true, region: true },
15
- examples: [
16
- getCommand('cloud resource add'),
17
- getCommand('cloud resource add --type database'),
18
- getCommand('cloud resource add --type storage'),
19
- getCommand('cloud resource create --type database'),
20
- ],
21
- schema: {
22
- options: z.object({
23
- type: z.enum(['database', 'storage']).optional().describe('Resource type'),
24
- }),
25
- response: z.object({
26
- success: z.boolean().describe('Whether creation succeeded'),
27
- type: z.string().describe('Resource type (database or storage)'),
28
- name: z.string().describe('Created resource name'),
29
- }),
30
- },
31
- async handler(ctx) {
32
- const { logger, opts, orgId, region, config, auth } = ctx;
33
- // Determine resource type
34
- let resourceType = opts.type;
35
- if (!resourceType) {
36
- const response = await enquirer.prompt({
37
- type: 'select',
38
- name: 'type',
39
- message: 'Select resource type:',
40
- choices: [
41
- { name: 'database', message: 'Database (PostgreSQL)' },
42
- { name: 'storage', message: 'Storage (S3)' },
43
- ],
44
- });
45
- resourceType = response.type;
46
- }
47
- // Map user-friendly type to API type
48
- const apiType = resourceType === 'database' ? 'db' : 's3';
49
- const catalystClient = getCatalystAPIClient(config, logger, auth);
50
- const created = await tui.spinner({
51
- message: `Creating ${resourceType} in ${region}`,
52
- clearOnSuccess: true,
53
- callback: async () => {
54
- return createResources(catalystClient, orgId, region, [{ type: apiType }]);
55
- },
56
- });
57
- if (created.length > 0) {
58
- tui.success(`Created ${resourceType}: ${tui.bold(created[0].name)}`);
59
- return {
60
- success: true,
61
- type: resourceType,
62
- name: created[0].name,
63
- };
64
- }
65
- else {
66
- tui.fatal('Failed to create resource');
67
- }
68
- },
69
- });
70
- //# sourceMappingURL=add.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"add.js","sourceRoot":"","sources":["../../../../src/cmd/cloud/resource/add.ts"],"names":[],"mappings":"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"}