@agentlensai/cli 0.2.0 → 0.5.0

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 (54) hide show
  1. package/dist/commands/config.d.ts +2 -0
  2. package/dist/commands/config.d.ts.map +1 -0
  3. package/dist/commands/config.js +43 -0
  4. package/dist/commands/config.js.map +1 -0
  5. package/dist/commands/context.d.ts +2 -0
  6. package/dist/commands/context.d.ts.map +1 -0
  7. package/dist/commands/context.js +105 -0
  8. package/dist/commands/context.js.map +1 -0
  9. package/dist/commands/events.d.ts +2 -0
  10. package/dist/commands/events.d.ts.map +1 -0
  11. package/dist/commands/events.js +58 -0
  12. package/dist/commands/events.js.map +1 -0
  13. package/dist/commands/lessons.d.ts +2 -0
  14. package/dist/commands/lessons.d.ts.map +1 -0
  15. package/dist/commands/lessons.js +373 -0
  16. package/dist/commands/lessons.js.map +1 -0
  17. package/dist/commands/llm.d.ts +2 -0
  18. package/dist/commands/llm.d.ts.map +1 -0
  19. package/dist/commands/llm.js +226 -0
  20. package/dist/commands/llm.js.map +1 -0
  21. package/dist/commands/recall.d.ts +2 -0
  22. package/dist/commands/recall.d.ts.map +1 -0
  23. package/dist/commands/recall.js +84 -0
  24. package/dist/commands/recall.js.map +1 -0
  25. package/dist/commands/reflect.d.ts +2 -0
  26. package/dist/commands/reflect.d.ts.map +1 -0
  27. package/dist/commands/reflect.js +210 -0
  28. package/dist/commands/reflect.js.map +1 -0
  29. package/dist/commands/sessions.d.ts +2 -0
  30. package/dist/commands/sessions.d.ts.map +1 -0
  31. package/dist/commands/sessions.js +120 -0
  32. package/dist/commands/sessions.js.map +1 -0
  33. package/dist/commands/tail.d.ts +2 -0
  34. package/dist/commands/tail.d.ts.map +1 -0
  35. package/dist/commands/tail.js +151 -0
  36. package/dist/commands/tail.js.map +1 -0
  37. package/dist/index.d.ts +5 -2
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +104 -2
  40. package/dist/index.js.map +1 -1
  41. package/dist/lib/client.d.ts +8 -0
  42. package/dist/lib/client.d.ts.map +1 -0
  43. package/dist/lib/client.js +15 -0
  44. package/dist/lib/client.js.map +1 -0
  45. package/dist/lib/config.d.ts +17 -0
  46. package/dist/lib/config.d.ts.map +1 -0
  47. package/dist/lib/config.js +39 -0
  48. package/dist/lib/config.js.map +1 -0
  49. package/dist/lib/output.d.ts +24 -0
  50. package/dist/lib/output.d.ts.map +1 -0
  51. package/dist/lib/output.js +69 -0
  52. package/dist/lib/output.js.map +1 -0
  53. package/package.json +5 -5
  54. package/LICENSE +0 -21
@@ -0,0 +1,120 @@
1
+ /**
2
+ * agentlens sessions — list and inspect sessions
3
+ */
4
+ import { parseArgs } from 'node:util';
5
+ import { createClientFromConfig } from '../lib/client.js';
6
+ import { printTable, printJson, formatTimestamp, formatDuration, truncate, } from '../lib/output.js';
7
+ export async function runSessionsCommand(argv) {
8
+ const { values, positionals } = parseArgs({
9
+ args: argv,
10
+ options: {
11
+ status: { type: 'string' },
12
+ agent: { type: 'string', short: 'a' },
13
+ limit: { type: 'string', short: 'l' },
14
+ json: { type: 'boolean', short: 'j', default: false },
15
+ help: { type: 'boolean', short: 'h', default: false },
16
+ },
17
+ allowPositionals: true,
18
+ });
19
+ // agentlens sessions show <id>
20
+ if (positionals[0] === 'show') {
21
+ const sessionId = positionals[1];
22
+ if (!sessionId) {
23
+ console.error('Usage: agentlens sessions show <session-id>');
24
+ process.exit(1);
25
+ }
26
+ await showSession(sessionId, values.json ?? false);
27
+ return;
28
+ }
29
+ if (values.help) {
30
+ console.log(`Usage: agentlens sessions [options]
31
+ agentlens sessions show <id>
32
+
33
+ Options:
34
+ --status <status> Filter by status (active, completed, error)
35
+ -a, --agent <id> Filter by agent ID
36
+ -l, --limit <n> Max number of sessions (default: 20)
37
+ -j, --json Output raw JSON
38
+ -h, --help Show help`);
39
+ return;
40
+ }
41
+ const client = createClientFromConfig();
42
+ const limit = values.limit ? parseInt(values.limit, 10) : 20;
43
+ const result = await client.getSessions({
44
+ status: values.status ?? undefined,
45
+ agentId: values.agent ?? undefined,
46
+ limit,
47
+ });
48
+ if (values.json) {
49
+ printJson(result);
50
+ return;
51
+ }
52
+ if (result.sessions.length === 0) {
53
+ console.log('No sessions found.');
54
+ return;
55
+ }
56
+ const headers = ['ID', 'Agent', 'Status', 'Started', 'Duration', 'Events', 'Errors'];
57
+ const rows = result.sessions.map((s) => [
58
+ truncate(s.id, 16),
59
+ truncate(s.agentId, 14),
60
+ s.status,
61
+ formatTimestamp(s.startedAt),
62
+ formatDuration(s.startedAt, s.endedAt),
63
+ String(s.eventCount),
64
+ String(s.errorCount),
65
+ ]);
66
+ printTable(headers, rows);
67
+ console.log(`\nShowing ${result.sessions.length} of ${result.total} sessions.`);
68
+ }
69
+ async function showSession(sessionId, json) {
70
+ const client = createClientFromConfig();
71
+ const [session, timeline] = await Promise.all([
72
+ client.getSession(sessionId),
73
+ client.getSessionTimeline(sessionId),
74
+ ]);
75
+ if (json) {
76
+ printJson({ session, timeline });
77
+ return;
78
+ }
79
+ console.log(`\nSession: ${session.id}`);
80
+ console.log(` Agent: ${session.agentId}${session.agentName ? ` (${session.agentName})` : ''}`);
81
+ console.log(` Status: ${session.status}`);
82
+ console.log(` Started: ${formatTimestamp(session.startedAt)}`);
83
+ console.log(` Duration: ${formatDuration(session.startedAt, session.endedAt)}`);
84
+ console.log(` Events: ${session.eventCount} total, ${session.toolCallCount} tool calls, ${session.errorCount} errors`);
85
+ if (session.totalCostUsd > 0) {
86
+ console.log(` Cost: $${session.totalCostUsd.toFixed(4)}`);
87
+ }
88
+ console.log(` Chain: ${timeline.chainValid ? '✓ valid' : '✗ broken'}`);
89
+ if (timeline.events.length > 0) {
90
+ console.log(`\nTimeline (${timeline.events.length} events):`);
91
+ const headers = ['Time', 'Type', 'Severity', 'Summary'];
92
+ const rows = timeline.events.map((e) => [
93
+ formatTimestamp(e.timestamp),
94
+ e.eventType,
95
+ e.severity,
96
+ truncate(summarizePayload(e.eventType, e.payload), 40),
97
+ ]);
98
+ printTable(headers, rows);
99
+ }
100
+ }
101
+ function summarizePayload(eventType, payload) {
102
+ if (!payload || typeof payload !== 'object')
103
+ return '';
104
+ const p = payload;
105
+ switch (eventType) {
106
+ case 'tool_call':
107
+ return `${p['toolName'] ?? 'unknown'}()`;
108
+ case 'tool_response':
109
+ return `${p['toolName'] ?? ''} → ${p['durationMs'] ?? '?'}ms`;
110
+ case 'tool_error':
111
+ return `${p['toolName'] ?? ''}: ${p['error'] ?? 'error'}`;
112
+ case 'session_started':
113
+ return p['agentName'] ? String(p['agentName']) : '';
114
+ case 'session_ended':
115
+ return String(p['reason'] ?? 'ended');
116
+ default:
117
+ return '';
118
+ }
119
+ }
120
+ //# sourceMappingURL=sessions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/commands/sessions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function runTailCommand(argv: string[]): Promise<void>;
2
+ //# sourceMappingURL=tail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tail.d.ts","sourceRoot":"","sources":["../../src/commands/tail.ts"],"names":[],"mappings":"AAUA,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoGlE"}
@@ -0,0 +1,151 @@
1
+ /**
2
+ * agentlens tail — stream live events via SSE
3
+ *
4
+ * Connects to the /api/stream SSE endpoint. The endpoint is being built
5
+ * in Epic 14 in parallel — the command structure is ready for it.
6
+ */
7
+ import { parseArgs } from 'node:util';
8
+ import { loadConfig } from '../lib/config.js';
9
+ import { formatTimestamp, truncate } from '../lib/output.js';
10
+ export async function runTailCommand(argv) {
11
+ const { values } = parseArgs({
12
+ args: argv,
13
+ options: {
14
+ session: { type: 'string', short: 's' },
15
+ type: { type: 'string', short: 't' },
16
+ json: { type: 'boolean', short: 'j', default: false },
17
+ help: { type: 'boolean', short: 'h', default: false },
18
+ },
19
+ allowPositionals: false,
20
+ });
21
+ if (values.help) {
22
+ console.log(`Usage: agentlens tail [options]
23
+
24
+ Stream live events as they arrive.
25
+
26
+ Options:
27
+ -s, --session <id> Filter by session ID
28
+ -t, --type <type> Filter by event type
29
+ -j, --json Output raw JSON per event
30
+ -h, --help Show help
31
+
32
+ Press Ctrl+C to stop.`);
33
+ return;
34
+ }
35
+ const config = loadConfig();
36
+ const baseUrl = config.url.replace(/\/+$/, '');
37
+ // Build SSE URL with filters
38
+ const params = new URLSearchParams();
39
+ if (values.session)
40
+ params.set('sessionId', values.session);
41
+ if (values.type)
42
+ params.set('eventType', values.type);
43
+ const sseUrl = `${baseUrl}/api/stream${params.toString() ? '?' + params.toString() : ''}`;
44
+ const headers = {
45
+ 'Accept': 'text/event-stream',
46
+ };
47
+ if (config.apiKey) {
48
+ headers['Authorization'] = `Bearer ${config.apiKey}`;
49
+ }
50
+ console.log(`Connecting to ${baseUrl}...`);
51
+ // Use native fetch with streaming (works in Node.js ≥ 18)
52
+ let response;
53
+ try {
54
+ response = await fetch(sseUrl, {
55
+ headers,
56
+ signal: createAbortOnSigint(),
57
+ });
58
+ }
59
+ catch (err) {
60
+ if (err.name === 'AbortError') {
61
+ console.log('\nDisconnected.');
62
+ return;
63
+ }
64
+ console.error(`Failed to connect: ${err instanceof Error ? err.message : String(err)}`);
65
+ process.exit(1);
66
+ }
67
+ if (!response.ok) {
68
+ const text = await response.text().catch(() => '');
69
+ console.error(`Server returned ${response.status}: ${text}`);
70
+ process.exit(1);
71
+ }
72
+ if (!response.body) {
73
+ console.error('No response body (streaming not supported)');
74
+ process.exit(1);
75
+ }
76
+ console.log('Connected. Streaming events (Ctrl+C to stop)...\n');
77
+ // Parse SSE stream
78
+ const decoder = new TextDecoder();
79
+ let buffer = '';
80
+ try {
81
+ for await (const chunk of response.body) {
82
+ buffer += decoder.decode(chunk, { stream: true });
83
+ // Process complete SSE messages (double newline separated)
84
+ const messages = buffer.split('\n\n');
85
+ buffer = messages.pop() ?? '';
86
+ for (const msg of messages) {
87
+ processSSEMessage(msg, values.json ?? false);
88
+ }
89
+ }
90
+ }
91
+ catch (err) {
92
+ if (err.name === 'AbortError') {
93
+ // Normal Ctrl+C
94
+ }
95
+ else {
96
+ console.error(`\nStream error: ${err instanceof Error ? err.message : String(err)}`);
97
+ }
98
+ }
99
+ console.log('\nDisconnected.');
100
+ }
101
+ /**
102
+ * Parse and display a single SSE message.
103
+ */
104
+ function processSSEMessage(raw, jsonOutput) {
105
+ let eventType = 'message';
106
+ let data = '';
107
+ for (const line of raw.split('\n')) {
108
+ if (line.startsWith('event:')) {
109
+ eventType = line.slice(6).trim();
110
+ }
111
+ else if (line.startsWith('data:')) {
112
+ data += line.slice(5).trim();
113
+ }
114
+ }
115
+ // Skip heartbeats
116
+ if (eventType === 'heartbeat')
117
+ return;
118
+ if (!data)
119
+ return;
120
+ if (jsonOutput) {
121
+ console.log(data);
122
+ return;
123
+ }
124
+ // Try to parse as event JSON
125
+ try {
126
+ const event = JSON.parse(data);
127
+ const ts = typeof event['timestamp'] === 'string' ? formatTimestamp(event['timestamp']) : '';
128
+ const type = event['eventType'] ?? eventType;
129
+ const severity = event['severity'] ?? 'info';
130
+ const session = truncate(String(event['sessionId'] ?? ''), 14);
131
+ const agent = truncate(String(event['agentId'] ?? ''), 14);
132
+ console.log(`[${ts}] ${String(type).padEnd(16)} ${String(severity).padEnd(8)} ${session} ${agent}`);
133
+ }
134
+ catch {
135
+ // Raw message
136
+ console.log(`[${eventType}] ${truncate(data, 100)}`);
137
+ }
138
+ }
139
+ /**
140
+ * Create an AbortSignal that triggers on SIGINT (Ctrl+C).
141
+ */
142
+ function createAbortOnSigint() {
143
+ const controller = new AbortController();
144
+ const handler = () => {
145
+ controller.abort();
146
+ process.removeListener('SIGINT', handler);
147
+ };
148
+ process.on('SIGINT', handler);
149
+ return controller.signal;
150
+ }
151
+ //# sourceMappingURL=tail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tail.js","sourceRoot":"","sources":["../../src/commands/tail.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,8 @@
1
+ #!/usr/bin/env node
1
2
  /**
2
- * @agentlens/cli — Command-line interface for AgentLens
3
+ * @agentlensai/cli — Command-line interface for AgentLens
4
+ *
5
+ * Uses node:util parseArgs for lightweight argument parsing.
3
6
  */
4
- export declare const PACKAGE_NAME: "@agentlens/cli";
7
+ export {};
5
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,YAAY,EAAG,gBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;GAIG"}
package/dist/index.js CHANGED
@@ -1,5 +1,107 @@
1
+ #!/usr/bin/env node
1
2
  /**
2
- * @agentlens/cli — Command-line interface for AgentLens
3
+ * @agentlensai/cli — Command-line interface for AgentLens
4
+ *
5
+ * Uses node:util parseArgs for lightweight argument parsing.
3
6
  */
4
- export const PACKAGE_NAME = '@agentlens/cli';
7
+ import { runConfigCommand } from './commands/config.js';
8
+ import { runContextCommand } from './commands/context.js';
9
+ import { runEventsCommand } from './commands/events.js';
10
+ import { runLessonsCommand } from './commands/lessons.js';
11
+ import { runLlmCommand } from './commands/llm.js';
12
+ import { runRecallCommand } from './commands/recall.js';
13
+ import { runReflectCommand } from './commands/reflect.js';
14
+ import { runSessionsCommand } from './commands/sessions.js';
15
+ import { runTailCommand } from './commands/tail.js';
16
+ const HELP = `AgentLens CLI — Observability for AI agents
17
+
18
+ Usage: agentlens <command> [options]
19
+
20
+ Commands:
21
+ config Get or set configuration (url, api-key)
22
+ context Retrieve cross-session context for a topic
23
+ events Query events
24
+ lessons Manage agent lessons (list, create, get, update, delete, search)
25
+ llm LLM call tracking (stats, models, recent)
26
+ recall Semantic search over agent memory
27
+ reflect Pattern analysis across agent sessions
28
+ sessions List and inspect sessions
29
+ tail Stream live events (SSE)
30
+
31
+ Run "agentlens <command> --help" for command-specific help.
32
+
33
+ Configuration:
34
+ agentlens config set url http://localhost:3400
35
+ agentlens config set api-key als_xxx
36
+ agentlens config get
37
+ `;
38
+ async function main() {
39
+ const args = process.argv.slice(2);
40
+ const command = args[0];
41
+ const rest = args.slice(1);
42
+ switch (command) {
43
+ case 'config':
44
+ runConfigCommand(rest);
45
+ break;
46
+ case 'context':
47
+ await runContextCommand(rest);
48
+ break;
49
+ case 'events':
50
+ await runEventsCommand(rest);
51
+ break;
52
+ case 'lessons':
53
+ await runLessonsCommand(rest);
54
+ break;
55
+ case 'llm':
56
+ await runLlmCommand(rest);
57
+ break;
58
+ case 'recall':
59
+ await runRecallCommand(rest);
60
+ break;
61
+ case 'reflect':
62
+ await runReflectCommand(rest);
63
+ break;
64
+ case 'sessions':
65
+ await runSessionsCommand(rest);
66
+ break;
67
+ case 'tail':
68
+ await runTailCommand(rest);
69
+ break;
70
+ case '--help':
71
+ case '-h':
72
+ case undefined:
73
+ console.log(HELP);
74
+ break;
75
+ case '--version':
76
+ case '-v':
77
+ console.log('0.0.0');
78
+ break;
79
+ default:
80
+ console.error(`Unknown command: ${command}`);
81
+ console.log(HELP);
82
+ process.exit(1);
83
+ }
84
+ }
85
+ main().catch((err) => {
86
+ if (err && typeof err === 'object' && 'name' in err) {
87
+ const e = err;
88
+ // Show friendly error for SDK errors
89
+ if (e.name === 'ConnectionError') {
90
+ console.error(`Error: Cannot connect to AgentLens server.`);
91
+ console.error(` ${e.message}`);
92
+ console.error(`\nMake sure the server is running and check your config with: agentlens config get`);
93
+ }
94
+ else if (e.name === 'AuthenticationError') {
95
+ console.error(`Error: Authentication failed.`);
96
+ console.error(` Set your API key with: agentlens config set api-key <key>`);
97
+ }
98
+ else {
99
+ console.error(`Error: ${e.message}`);
100
+ }
101
+ }
102
+ else {
103
+ console.error(`Error: ${err}`);
104
+ }
105
+ process.exit(1);
106
+ });
5
107
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,gBAAyB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Create an AgentLensClient from CLI config.
3
+ *
4
+ * @param urlOverride - Optional URL that takes precedence over the stored config.
5
+ */
6
+ import { AgentLensClient } from '@agentlensai/sdk';
7
+ export declare function createClientFromConfig(urlOverride?: string): AgentLensClient;
8
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/lib/client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGnD,wBAAgB,sBAAsB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,eAAe,CAM5E"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Create an AgentLensClient from CLI config.
3
+ *
4
+ * @param urlOverride - Optional URL that takes precedence over the stored config.
5
+ */
6
+ import { AgentLensClient } from '@agentlensai/sdk';
7
+ import { loadConfig } from './config.js';
8
+ export function createClientFromConfig(urlOverride) {
9
+ const config = loadConfig();
10
+ return new AgentLensClient({
11
+ url: urlOverride ?? config.url,
12
+ apiKey: config.apiKey,
13
+ });
14
+ }
15
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/lib/client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,UAAU,sBAAsB,CAAC,WAAoB;IACzD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,OAAO,IAAI,eAAe,CAAC;QACzB,GAAG,EAAE,WAAW,IAAI,MAAM,CAAC,GAAG;QAC9B,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,17 @@
1
+ export interface CliConfig {
2
+ url: string;
3
+ apiKey?: string;
4
+ }
5
+ /**
6
+ * Load config from ~/.agentlens/config.json (returns defaults if missing).
7
+ */
8
+ export declare function loadConfig(): CliConfig;
9
+ /**
10
+ * Save config to ~/.agentlens/config.json.
11
+ */
12
+ export declare function saveConfig(config: CliConfig): void;
13
+ /**
14
+ * Mask an API key for display: show first 8 chars + mask the rest.
15
+ */
16
+ export declare function maskApiKey(key: string): string;
17
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AASD;;GAEG;AACH,wBAAgB,UAAU,IAAI,SAAS,CAOtC;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAGlD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG9C"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * CLI Configuration — stored in ~/.agentlens/config.json
3
+ */
4
+ import { readFileSync, writeFileSync, mkdirSync } from 'node:fs';
5
+ import { join } from 'node:path';
6
+ import { homedir } from 'node:os';
7
+ const CONFIG_DIR = join(homedir(), '.agentlens');
8
+ const CONFIG_FILE = join(CONFIG_DIR, 'config.json');
9
+ const DEFAULT_CONFIG = {
10
+ url: 'http://localhost:3400',
11
+ };
12
+ /**
13
+ * Load config from ~/.agentlens/config.json (returns defaults if missing).
14
+ */
15
+ export function loadConfig() {
16
+ try {
17
+ const raw = readFileSync(CONFIG_FILE, 'utf-8');
18
+ return { ...DEFAULT_CONFIG, ...JSON.parse(raw) };
19
+ }
20
+ catch {
21
+ return { ...DEFAULT_CONFIG };
22
+ }
23
+ }
24
+ /**
25
+ * Save config to ~/.agentlens/config.json.
26
+ */
27
+ export function saveConfig(config) {
28
+ mkdirSync(CONFIG_DIR, { recursive: true });
29
+ writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2) + '\n', 'utf-8');
30
+ }
31
+ /**
32
+ * Mask an API key for display: show first 8 chars + mask the rest.
33
+ */
34
+ export function maskApiKey(key) {
35
+ if (key.length <= 8)
36
+ return key;
37
+ return key.slice(0, 8) + '•'.repeat(Math.min(key.length - 8, 24));
38
+ }
39
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAOlC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC,CAAC;AACjD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAEpD,MAAM,cAAc,GAAc;IAChC,GAAG,EAAE,uBAAuB;CAC7B,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAC/C,OAAO,EAAE,GAAG,cAAc,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,GAAG,cAAc,EAAE,CAAC;IAC/B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,MAAiB;IAC1C,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;AAC9E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,GAAG,CAAC;IAChC,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AACpE,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * CLI Output Formatting Utilities
3
+ */
4
+ /**
5
+ * Print data as a simple aligned table to stdout.
6
+ */
7
+ export declare function printTable(headers: string[], rows: string[][]): void;
8
+ /**
9
+ * Print JSON to stdout (pretty if tty, compact otherwise).
10
+ */
11
+ export declare function printJson(data: unknown): void;
12
+ /**
13
+ * Format a timestamp for table display.
14
+ */
15
+ export declare function formatTimestamp(ts: string): string;
16
+ /**
17
+ * Format a duration in milliseconds to a human-readable string.
18
+ */
19
+ export declare function formatDuration(startedAt: string, endedAt?: string): string;
20
+ /**
21
+ * Truncate a string to a max length with "…" suffix.
22
+ */
23
+ export declare function truncate(str: string, max: number): string;
24
+ //# sourceMappingURL=output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,MAAM,EAAE,EACjB,IAAI,EAAE,MAAM,EAAE,EAAE,GACf,IAAI,CAeN;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAG7C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAclD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAQ1E;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAGzD"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * CLI Output Formatting Utilities
3
+ */
4
+ /**
5
+ * Print data as a simple aligned table to stdout.
6
+ */
7
+ export function printTable(headers, rows) {
8
+ const colWidths = headers.map((h, i) => {
9
+ const maxData = rows.reduce((max, row) => Math.max(max, (row[i] ?? '').length), 0);
10
+ return Math.max(h.length, maxData);
11
+ });
12
+ const sep = colWidths.map((w) => '─'.repeat(w + 2)).join('┼');
13
+ const formatRow = (cells) => cells.map((cell, i) => ` ${(cell ?? '').padEnd(colWidths[i])} `).join('│');
14
+ console.log(formatRow(headers));
15
+ console.log(sep);
16
+ for (const row of rows) {
17
+ console.log(formatRow(row));
18
+ }
19
+ }
20
+ /**
21
+ * Print JSON to stdout (pretty if tty, compact otherwise).
22
+ */
23
+ export function printJson(data) {
24
+ const indent = process.stdout.isTTY ? 2 : 0;
25
+ console.log(JSON.stringify(data, null, indent));
26
+ }
27
+ /**
28
+ * Format a timestamp for table display.
29
+ */
30
+ export function formatTimestamp(ts) {
31
+ try {
32
+ const d = new Date(ts);
33
+ return d.toLocaleString('en-US', {
34
+ month: 'short',
35
+ day: '2-digit',
36
+ hour: '2-digit',
37
+ minute: '2-digit',
38
+ second: '2-digit',
39
+ hour12: false,
40
+ });
41
+ }
42
+ catch {
43
+ return ts;
44
+ }
45
+ }
46
+ /**
47
+ * Format a duration in milliseconds to a human-readable string.
48
+ */
49
+ export function formatDuration(startedAt, endedAt) {
50
+ if (!endedAt)
51
+ return 'running';
52
+ const ms = new Date(endedAt).getTime() - new Date(startedAt).getTime();
53
+ if (ms < 1000)
54
+ return `${ms}ms`;
55
+ if (ms < 60_000)
56
+ return `${(ms / 1000).toFixed(1)}s`;
57
+ const mins = Math.floor(ms / 60_000);
58
+ const secs = Math.floor((ms % 60_000) / 1000);
59
+ return `${mins}m${secs}s`;
60
+ }
61
+ /**
62
+ * Truncate a string to a max length with "…" suffix.
63
+ */
64
+ export function truncate(str, max) {
65
+ if (str.length <= max)
66
+ return str;
67
+ return str.slice(0, max - 1) + '…';
68
+ }
69
+ //# sourceMappingURL=output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"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"}