@agentuity/cli 0.0.58 → 0.0.59
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cmd/build/bundler.d.ts +1 -1
- package/dist/cmd/cloud/agent/get.d.ts +2 -0
- package/dist/cmd/cloud/agent/get.d.ts.map +1 -0
- package/dist/cmd/cloud/agent/get.js +97 -0
- package/dist/cmd/cloud/agent/get.js.map +1 -0
- package/dist/cmd/cloud/agent/index.d.ts +2 -0
- package/dist/cmd/cloud/agent/index.d.ts.map +1 -0
- package/dist/cmd/cloud/agent/index.js +11 -0
- package/dist/cmd/cloud/agent/index.js.map +1 -0
- package/dist/cmd/cloud/agent/list.d.ts +2 -0
- package/dist/cmd/cloud/agent/list.d.ts.map +1 -0
- package/dist/cmd/cloud/agent/list.js +101 -0
- package/dist/cmd/cloud/agent/list.js.map +1 -0
- package/dist/cmd/cloud/agent/schema.d.ts +4 -0
- package/dist/cmd/cloud/agent/schema.d.ts.map +1 -0
- package/dist/cmd/cloud/agent/schema.js +22 -0
- package/dist/cmd/cloud/agent/schema.js.map +1 -0
- package/dist/cmd/cloud/apikey/create.d.ts +2 -0
- package/dist/cmd/cloud/apikey/create.d.ts.map +1 -0
- package/dist/cmd/cloud/apikey/create.js +100 -0
- package/dist/cmd/cloud/apikey/create.js.map +1 -0
- package/dist/cmd/cloud/apikey/delete.d.ts +2 -0
- package/dist/cmd/cloud/apikey/delete.d.ts.map +1 -0
- package/dist/cmd/cloud/apikey/delete.js +55 -0
- package/dist/cmd/cloud/apikey/delete.js.map +1 -0
- package/dist/cmd/cloud/apikey/get.d.ts +2 -0
- package/dist/cmd/cloud/apikey/get.d.ts.map +1 -0
- package/dist/cmd/cloud/apikey/get.js +57 -0
- package/dist/cmd/cloud/apikey/get.js.map +1 -0
- package/dist/cmd/cloud/apikey/index.d.ts.map +1 -0
- package/dist/cmd/cloud/apikey/index.js +13 -0
- package/dist/cmd/cloud/apikey/index.js.map +1 -0
- package/dist/cmd/cloud/apikey/list.d.ts +2 -0
- package/dist/cmd/cloud/apikey/list.d.ts.map +1 -0
- package/dist/cmd/cloud/apikey/list.js +53 -0
- package/dist/cmd/cloud/apikey/list.js.map +1 -0
- package/dist/cmd/cloud/deployment/index.d.ts.map +1 -1
- package/dist/cmd/cloud/deployment/index.js +2 -0
- package/dist/cmd/cloud/deployment/index.js.map +1 -1
- package/dist/cmd/cloud/deployment/logs.d.ts +2 -0
- package/dist/cmd/cloud/deployment/logs.d.ts.map +1 -0
- package/dist/cmd/cloud/deployment/logs.js +70 -0
- package/dist/cmd/cloud/deployment/logs.js.map +1 -0
- package/dist/cmd/cloud/index.d.ts.map +1 -1
- package/dist/cmd/cloud/index.js +8 -2
- package/dist/cmd/cloud/index.js.map +1 -1
- package/dist/cmd/cloud/session/logs.d.ts.map +1 -1
- package/dist/cmd/cloud/session/logs.js +12 -9
- package/dist/cmd/cloud/session/logs.js.map +1 -1
- package/dist/cmd/cloud/stream/delete.d.ts +3 -0
- package/dist/cmd/cloud/stream/delete.d.ts.map +1 -0
- package/dist/cmd/cloud/stream/delete.js +42 -0
- package/dist/cmd/cloud/stream/delete.js.map +1 -0
- package/dist/cmd/cloud/stream/get.d.ts +3 -0
- package/dist/cmd/cloud/stream/get.d.ts.map +1 -0
- package/dist/cmd/cloud/stream/get.js +110 -0
- package/dist/cmd/cloud/stream/get.js.map +1 -0
- package/dist/cmd/cloud/stream/index.d.ts +3 -0
- package/dist/cmd/cloud/stream/index.d.ts.map +1 -0
- package/dist/cmd/cloud/stream/index.js +13 -0
- package/dist/cmd/cloud/stream/index.js.map +1 -0
- package/dist/cmd/cloud/stream/list.d.ts +3 -0
- package/dist/cmd/cloud/stream/list.d.ts.map +1 -0
- package/dist/cmd/cloud/stream/list.js +131 -0
- package/dist/cmd/cloud/stream/list.js.map +1 -0
- package/dist/cmd/cloud/stream/util.d.ts +8 -0
- package/dist/cmd/cloud/stream/util.d.ts.map +1 -0
- package/dist/cmd/cloud/stream/util.js +19 -0
- package/dist/cmd/cloud/stream/util.js.map +1 -0
- package/dist/cmd/cloud/vector/delete.d.ts +3 -0
- package/dist/cmd/cloud/vector/delete.d.ts.map +1 -0
- package/dist/cmd/cloud/vector/delete.js +90 -0
- package/dist/cmd/cloud/vector/delete.js.map +1 -0
- package/dist/cmd/cloud/vector/get.d.ts +3 -0
- package/dist/cmd/cloud/vector/get.d.ts.map +1 -0
- package/dist/cmd/cloud/vector/get.js +80 -0
- package/dist/cmd/cloud/vector/get.js.map +1 -0
- package/dist/cmd/cloud/vector/index.d.ts +3 -0
- package/dist/cmd/cloud/vector/index.d.ts.map +1 -0
- package/dist/cmd/cloud/vector/index.js +14 -0
- package/dist/cmd/cloud/vector/index.js.map +1 -0
- package/dist/cmd/cloud/vector/search.d.ts +3 -0
- package/dist/cmd/cloud/vector/search.d.ts.map +1 -0
- package/dist/cmd/cloud/vector/search.js +136 -0
- package/dist/cmd/cloud/vector/search.js.map +1 -0
- package/dist/cmd/cloud/vector/util.d.ts +8 -0
- package/dist/cmd/cloud/vector/util.d.ts.map +1 -0
- package/dist/cmd/cloud/vector/util.js +18 -0
- package/dist/cmd/cloud/vector/util.js.map +1 -0
- package/dist/cmd/dev/agents.d.ts.map +1 -1
- package/dist/cmd/dev/agents.js +3 -2
- package/dist/cmd/dev/agents.js.map +1 -1
- package/dist/cmd/dev/index.js +3 -3
- package/dist/cmd/dev/index.js.map +1 -1
- package/dist/cmd/index.d.ts.map +1 -1
- package/dist/cmd/index.js +38 -42
- package/dist/cmd/index.js.map +1 -1
- package/dist/schema-parser.d.ts.map +1 -1
- package/dist/schema-parser.js +3 -1
- package/dist/schema-parser.js.map +1 -1
- package/dist/tui.d.ts +10 -1
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.js +58 -31
- package/dist/tui.js.map +1 -1
- package/dist/utils/date.d.ts +14 -0
- package/dist/utils/date.d.ts.map +1 -0
- package/dist/utils/date.js +51 -0
- package/dist/utils/date.js.map +1 -0
- package/package.json +6 -6
- package/src/cmd/cloud/agent/get.ts +105 -0
- package/src/cmd/cloud/agent/index.ts +11 -0
- package/src/cmd/cloud/agent/list.ts +107 -0
- package/src/cmd/cloud/agent/schema.ts +25 -0
- package/src/cmd/cloud/apikey/create.ts +114 -0
- package/src/cmd/cloud/apikey/delete.ts +66 -0
- package/src/cmd/cloud/apikey/get.ts +62 -0
- package/src/cmd/cloud/apikey/index.ts +13 -0
- package/src/cmd/cloud/apikey/list.ts +58 -0
- package/src/cmd/cloud/deployment/index.ts +2 -0
- package/src/cmd/cloud/deployment/logs.ts +75 -0
- package/src/cmd/cloud/index.ts +8 -2
- package/src/cmd/cloud/session/logs.ts +12 -11
- package/src/cmd/cloud/stream/delete.ts +49 -0
- package/src/cmd/cloud/stream/get.ts +118 -0
- package/src/cmd/cloud/stream/index.ts +14 -0
- package/src/cmd/cloud/stream/list.ts +146 -0
- package/src/cmd/cloud/stream/util.ts +32 -0
- package/src/cmd/cloud/vector/delete.ts +105 -0
- package/src/cmd/cloud/vector/get.ts +94 -0
- package/src/cmd/cloud/vector/index.ts +15 -0
- package/src/cmd/cloud/vector/search.ts +156 -0
- package/src/cmd/cloud/vector/util.ts +28 -0
- package/src/cmd/dev/agents.ts +4 -3
- package/src/cmd/dev/index.ts +3 -3
- package/src/cmd/index.ts +38 -42
- package/src/schema-parser.ts +3 -1
- package/src/tui.ts +69 -36
- package/src/utils/date.ts +57 -0
- package/dist/cmd/cloud/agents/index.d.ts.map +0 -1
- package/dist/cmd/cloud/agents/index.js +0 -133
- package/dist/cmd/cloud/agents/index.js.map +0 -1
- package/src/cmd/cloud/agents/index.ts +0 -148
- /package/dist/cmd/cloud/{agents → apikey}/index.d.ts +0 -0
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
|
|
7
|
-
|
|
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
|
|
12
|
-
|
|
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
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
//
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
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
|
}
|
package/src/schema-parser.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
@@ -135,6 +135,24 @@ export function colorMuted(text: string): string {
|
|
|
135
135
|
return `${color}${text}${reset}`;
|
|
136
136
|
}
|
|
137
137
|
|
|
138
|
+
/**
|
|
139
|
+
* Get the appropriate color function for a log severity level
|
|
140
|
+
*/
|
|
141
|
+
export function getSeverityColor(severity: string): (text: string) => string {
|
|
142
|
+
switch (severity.toUpperCase()) {
|
|
143
|
+
case 'ERROR':
|
|
144
|
+
return colorError;
|
|
145
|
+
case 'WARN':
|
|
146
|
+
return colorWarning;
|
|
147
|
+
case 'INFO':
|
|
148
|
+
return colorInfo;
|
|
149
|
+
case 'DEBUG':
|
|
150
|
+
return colorMuted;
|
|
151
|
+
default:
|
|
152
|
+
return (text: string) => text;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
138
156
|
/**
|
|
139
157
|
* Print a success message with a green checkmark
|
|
140
158
|
*/
|
|
@@ -214,6 +232,25 @@ export function bold(text: string): string {
|
|
|
214
232
|
return `${color}${text}${reset}`;
|
|
215
233
|
}
|
|
216
234
|
|
|
235
|
+
/**
|
|
236
|
+
* Format text with white bold (or inverse for light mode)
|
|
237
|
+
* Used for table headings
|
|
238
|
+
*/
|
|
239
|
+
export function heading(text: string): string {
|
|
240
|
+
const USE_COLORS = shouldUseColors();
|
|
241
|
+
if (!USE_COLORS) {
|
|
242
|
+
return text;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
// For light mode: use inverse (black bg, white text)
|
|
246
|
+
// For dark mode: use white bold
|
|
247
|
+
const style = isDarkMode()
|
|
248
|
+
? '\x1b[1;37m' // bold white
|
|
249
|
+
: '\x1b[7m'; // inverse
|
|
250
|
+
const reset = getColor('reset');
|
|
251
|
+
return `${style}${text}${reset}`;
|
|
252
|
+
}
|
|
253
|
+
|
|
217
254
|
/**
|
|
218
255
|
* Format text as a link (blue and underlined)
|
|
219
256
|
*/
|
|
@@ -1377,7 +1414,7 @@ export interface TableColumn {
|
|
|
1377
1414
|
}
|
|
1378
1415
|
|
|
1379
1416
|
/**
|
|
1380
|
-
* Display data in a formatted table using
|
|
1417
|
+
* Display data in a formatted table using cli-table3
|
|
1381
1418
|
*
|
|
1382
1419
|
* Supports two modes:
|
|
1383
1420
|
* 1. Simple mode: Pass data array and optional column names
|
|
@@ -1393,14 +1430,14 @@ export function table<T extends Record<string, unknown>>(
|
|
|
1393
1430
|
columns?: (keyof T)[] | TableColumn[],
|
|
1394
1431
|
options?: { render?: boolean }
|
|
1395
1432
|
): string | void {
|
|
1396
|
-
// Dynamic import to avoid type errors (console-table-printer has poor typings)
|
|
1397
1433
|
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
1398
|
-
const
|
|
1399
|
-
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
|
|
1434
|
+
const Table = require('cli-table3') as new (options?: {
|
|
1435
|
+
head?: string[];
|
|
1436
|
+
colAligns?: Array<'left' | 'right' | 'center'>;
|
|
1437
|
+
wordWrap?: boolean;
|
|
1438
|
+
}) => {
|
|
1439
|
+
push(row: unknown[]): void;
|
|
1440
|
+
toString(): string;
|
|
1404
1441
|
};
|
|
1405
1442
|
|
|
1406
1443
|
if (!data || data.length === 0) {
|
|
@@ -1410,52 +1447,48 @@ export function table<T extends Record<string, unknown>>(
|
|
|
1410
1447
|
// Determine if we're using advanced column config or simple column names
|
|
1411
1448
|
const isAdvancedMode = columns && columns.length > 0 && typeof columns[0] === 'object';
|
|
1412
1449
|
|
|
1413
|
-
let
|
|
1450
|
+
let columnNames: string[];
|
|
1451
|
+
let colAligns: Array<'left' | 'right' | 'center'>;
|
|
1414
1452
|
|
|
1415
1453
|
if (isAdvancedMode) {
|
|
1416
1454
|
// Advanced mode: use provided column configurations
|
|
1417
|
-
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
alignment: col.alignment || 'left',
|
|
1421
|
-
})),
|
|
1422
|
-
};
|
|
1455
|
+
const columnConfigs = columns as TableColumn[];
|
|
1456
|
+
columnNames = columnConfigs.map((col) => col.name);
|
|
1457
|
+
colAligns = columnConfigs.map((col) => col.alignment || 'left');
|
|
1423
1458
|
} else {
|
|
1424
1459
|
// Simple mode: determine column names from data or columns parameter
|
|
1425
|
-
|
|
1460
|
+
columnNames = columns
|
|
1426
1461
|
? (columns as (keyof T)[]).map((c) => String(c))
|
|
1427
1462
|
: data.length > 0
|
|
1428
1463
|
? Object.keys(data[0])
|
|
1429
1464
|
: [];
|
|
1430
|
-
|
|
1431
|
-
tableConfig = {
|
|
1432
|
-
columns: columnNames.map((name) => ({
|
|
1433
|
-
name,
|
|
1434
|
-
alignment: 'left',
|
|
1435
|
-
})),
|
|
1436
|
-
};
|
|
1465
|
+
colAligns = columnNames.map(() => 'left' as const);
|
|
1437
1466
|
}
|
|
1438
1467
|
|
|
1439
|
-
|
|
1468
|
+
// Apply heading style to column names
|
|
1469
|
+
const headings = columnNames.map((name) => heading(name));
|
|
1470
|
+
|
|
1471
|
+
const t = new Table({
|
|
1472
|
+
head: headings,
|
|
1473
|
+
colAligns,
|
|
1474
|
+
wordWrap: true,
|
|
1475
|
+
});
|
|
1440
1476
|
|
|
1441
1477
|
// Add rows to table
|
|
1442
1478
|
for (const row of data) {
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
const
|
|
1446
|
-
|
|
1447
|
-
filtered[String(col)] = row[col];
|
|
1448
|
-
}
|
|
1449
|
-
t.addRow(filtered);
|
|
1450
|
-
} else {
|
|
1451
|
-
// Advanced mode or no column filtering
|
|
1452
|
-
t.addRow(row);
|
|
1479
|
+
const rowData: unknown[] = [];
|
|
1480
|
+
for (const colName of columnNames) {
|
|
1481
|
+
const value = row[colName];
|
|
1482
|
+
rowData.push(value !== undefined && value !== null ? String(value) : '');
|
|
1453
1483
|
}
|
|
1484
|
+
t.push(rowData);
|
|
1454
1485
|
}
|
|
1455
1486
|
|
|
1487
|
+
const output = t.toString();
|
|
1488
|
+
|
|
1456
1489
|
if (options?.render) {
|
|
1457
|
-
return
|
|
1490
|
+
return output;
|
|
1458
1491
|
} else {
|
|
1459
|
-
|
|
1492
|
+
console.log(output);
|
|
1460
1493
|
}
|
|
1461
1494
|
}
|
|
@@ -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
|
+
}
|
|
@@ -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,148 +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
|
-
|
|
8
|
-
const AgentSchema = z.object({
|
|
9
|
-
id: z.string(),
|
|
10
|
-
name: z.string(),
|
|
11
|
-
description: z.string().nullable(),
|
|
12
|
-
identifier: z.string(),
|
|
13
|
-
version: z.string().nullable(),
|
|
14
|
-
deploymentId: z.string().nullable(),
|
|
15
|
-
devmode: z.boolean(),
|
|
16
|
-
metadata: z.record(z.string(), z.unknown()).nullable(),
|
|
17
|
-
createdAt: z.string(),
|
|
18
|
-
updatedAt: z.string(),
|
|
19
|
-
evals: z.array(
|
|
20
|
-
z.object({
|
|
21
|
-
id: z.string(),
|
|
22
|
-
name: z.string(),
|
|
23
|
-
description: z.string().nullable(),
|
|
24
|
-
identifier: z.string().nullable(),
|
|
25
|
-
deploymentId: z.string().nullable(),
|
|
26
|
-
version: z.string().nullable(),
|
|
27
|
-
devmode: z.boolean(),
|
|
28
|
-
createdAt: z.string(),
|
|
29
|
-
updatedAt: z.string(),
|
|
30
|
-
})
|
|
31
|
-
),
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
const AgentsResponseSchema = APIResponseSchema(z.array(AgentSchema));
|
|
35
|
-
|
|
36
|
-
export const command = createCommand({
|
|
37
|
-
name: 'agents',
|
|
38
|
-
description: 'Show devmode agent results',
|
|
39
|
-
requires: { auth: true, apiClient: true, project: true },
|
|
40
|
-
schema: {
|
|
41
|
-
options: z.object({
|
|
42
|
-
deploymentId: z.string().optional().describe('Filter by deployment ID'),
|
|
43
|
-
format: z
|
|
44
|
-
.enum(['json', 'table'])
|
|
45
|
-
.optional()
|
|
46
|
-
.default('table')
|
|
47
|
-
.describe('Output format: json or table'),
|
|
48
|
-
verbose: z.boolean().optional().default(false).describe('Show full IDs and descriptions'),
|
|
49
|
-
}),
|
|
50
|
-
},
|
|
51
|
-
async handler(ctx) {
|
|
52
|
-
const { opts, apiClient, project } = ctx;
|
|
53
|
-
const projectId = project.projectId;
|
|
54
|
-
const format = opts?.format ?? 'table';
|
|
55
|
-
const verbose = opts?.verbose ?? false;
|
|
56
|
-
|
|
57
|
-
const deploymentId = opts?.deploymentId;
|
|
58
|
-
const queryParams = deploymentId ? `?deploymentId=${deploymentId}` : '';
|
|
59
|
-
const response = await tui.spinner('Fetching agents', async () => {
|
|
60
|
-
return apiClient.request(
|
|
61
|
-
'GET',
|
|
62
|
-
`/cli/agent/${projectId}${queryParams}`,
|
|
63
|
-
AgentsResponseSchema
|
|
64
|
-
);
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
if (!response.success) {
|
|
68
|
-
tui.fatal(`Failed to fetch agents: ${response.message ?? 'Unknown error'}`);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
const agents = response.data;
|
|
72
|
-
|
|
73
|
-
if (format === 'json') {
|
|
74
|
-
console.log(JSON.stringify(agents, null, 2));
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
tui.info(`Agents (${agents.length})`);
|
|
79
|
-
if (agents.length === 0) {
|
|
80
|
-
tui.muted('No agents found');
|
|
81
|
-
} else {
|
|
82
|
-
const table = new Table({
|
|
83
|
-
columns: [
|
|
84
|
-
{ name: 'Name', alignment: 'left' },
|
|
85
|
-
{ name: 'ID', alignment: 'left' },
|
|
86
|
-
{ name: 'Identifier', alignment: 'left' },
|
|
87
|
-
{ name: 'Deployment', alignment: 'left' },
|
|
88
|
-
{ name: 'Version', alignment: 'left' },
|
|
89
|
-
{ name: 'Evals', alignment: 'center' },
|
|
90
|
-
{ name: 'Created', alignment: 'left' },
|
|
91
|
-
],
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
for (const agent of agents) {
|
|
95
|
-
table.addRow({
|
|
96
|
-
Name: agent.name,
|
|
97
|
-
ID: verbose ? agent.id : abbreviate(agent.id, 20),
|
|
98
|
-
Identifier: verbose ? agent.identifier : abbreviate(agent.identifier, 20),
|
|
99
|
-
Deployment: abbreviate(agent.deploymentId, 20),
|
|
100
|
-
Version: verbose
|
|
101
|
-
? (agent.version ?? 'N/A')
|
|
102
|
-
: (abbreviate(agent.version, 20) ?? 'N/A'),
|
|
103
|
-
Evals: agent.evals.length,
|
|
104
|
-
Created: new Date(agent.createdAt).toLocaleString(),
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
table.printTable();
|
|
108
|
-
|
|
109
|
-
// Show evals for each agent
|
|
110
|
-
for (const agent of agents) {
|
|
111
|
-
if (agent.evals.length > 0) {
|
|
112
|
-
console.log(`\n Evals for ${agent.name}:`);
|
|
113
|
-
const evalTable = new Table({
|
|
114
|
-
columns: [
|
|
115
|
-
{ name: 'Name', alignment: 'left' },
|
|
116
|
-
{ name: 'ID', alignment: 'left' },
|
|
117
|
-
{ name: 'Identifier', alignment: 'left' },
|
|
118
|
-
{ name: 'Deployment', alignment: 'left' },
|
|
119
|
-
{ name: 'Version', alignment: 'left' },
|
|
120
|
-
{ name: 'Description', alignment: 'left' },
|
|
121
|
-
{ name: 'Created', alignment: 'left' },
|
|
122
|
-
],
|
|
123
|
-
});
|
|
124
|
-
|
|
125
|
-
for (const evalItem of agent.evals) {
|
|
126
|
-
evalTable.addRow({
|
|
127
|
-
Name: evalItem.name,
|
|
128
|
-
ID: verbose ? evalItem.id : abbreviate(evalItem.id, 20),
|
|
129
|
-
Identifier: verbose
|
|
130
|
-
? (evalItem.identifier ?? 'N/A')
|
|
131
|
-
: (abbreviate(evalItem.identifier, 20) ?? 'N/A'),
|
|
132
|
-
Deployment: abbreviate(evalItem.deploymentId, 20),
|
|
133
|
-
Version: verbose
|
|
134
|
-
? (evalItem.version ?? 'N/A')
|
|
135
|
-
: (abbreviate(evalItem.version, 20) ?? 'N/A'),
|
|
136
|
-
Description: verbose
|
|
137
|
-
? (evalItem.description ?? 'N/A')
|
|
138
|
-
: abbreviateDescription(evalItem.description),
|
|
139
|
-
Created: new Date(evalItem.createdAt).toLocaleString(),
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
|
-
evalTable.printTable();
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
},
|
|
147
|
-
});
|
|
148
|
-
export default command;
|
|
File without changes
|