@agentlensai/cli 0.10.0 → 0.13.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.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Amit Paz
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Migration CLI Tests (S-8.4)
3
+ *
4
+ * Tests for the `agentlens migrate` command: SQLite export,
5
+ * progress tracking, resume, and reverse migration.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=migrate.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/migrate.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,153 @@
1
+ /**
2
+ * Migration CLI Tests (S-8.4)
3
+ *
4
+ * Tests for the `agentlens migrate` command: SQLite export,
5
+ * progress tracking, resume, and reverse migration.
6
+ */
7
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
8
+ import { existsSync, writeFileSync, readFileSync, mkdirSync, unlinkSync, rmSync } from 'node:fs';
9
+ import { join } from 'node:path';
10
+ function getErrorMessage(err) {
11
+ if (err instanceof Error)
12
+ return err.message;
13
+ return String(err);
14
+ }
15
+ import { tmpdir } from 'node:os';
16
+ import { exportFromSqlite } from '../commands/migrate.js';
17
+ // ═══════════════════════════════════════════
18
+ // SQLite Export Tests
19
+ // ═══════════════════════════════════════════
20
+ describe('S-8.4: Migration CLI', () => {
21
+ describe('exportFromSqlite', () => {
22
+ it('throws if database file not found', async () => {
23
+ await expect(exportFromSqlite('/nonexistent/db.sqlite')).rejects.toThrow('SQLite database not found');
24
+ });
25
+ // Note: Tests that require better-sqlite3 are integration tests.
26
+ // Unit tests mock at the boundary.
27
+ it('throws if better-sqlite3 is not available', async () => {
28
+ // Create a dummy file so the existence check passes
29
+ const tmpFile = join(tmpdir(), `test-migrate-${Date.now()}.db`);
30
+ writeFileSync(tmpFile, '');
31
+ // The import will fail because better-sqlite3 isn't typically available in test env
32
+ // This test verifies the error message is helpful
33
+ try {
34
+ await exportFromSqlite(tmpFile);
35
+ // If better-sqlite3 IS installed, the file won't be a valid SQLite DB
36
+ // so it will throw a different error — that's fine too
37
+ }
38
+ catch (err) {
39
+ expect(getErrorMessage(err)).toMatch(/better-sqlite3|not a database|SQLite/i);
40
+ }
41
+ finally {
42
+ try {
43
+ unlinkSync(tmpFile);
44
+ }
45
+ catch { }
46
+ }
47
+ });
48
+ });
49
+ describe('NDJSON format', () => {
50
+ it('each record has _type and _version fields', () => {
51
+ const records = [
52
+ { _type: 'agent', _version: 1, id: 'a1', name: 'Test' },
53
+ { _type: 'session', _version: 1, id: 's1', agent_id: 'a1' },
54
+ { _type: 'event', _version: 1, id: 'e1', session_id: 's1', type: 'llm_call' },
55
+ ];
56
+ for (const rec of records) {
57
+ const line = JSON.stringify(rec);
58
+ const parsed = JSON.parse(line);
59
+ expect(parsed._type).toBeDefined();
60
+ expect(parsed._version).toBe(1);
61
+ }
62
+ });
63
+ it('checksum record has sha256 and counts', () => {
64
+ const checksum = {
65
+ _type: 'checksum',
66
+ sha256: 'a'.repeat(64),
67
+ counts: { agent: 1, session: 2, event: 5 },
68
+ exported_at: '2026-01-15T12:00:00Z',
69
+ };
70
+ const parsed = JSON.parse(JSON.stringify(checksum));
71
+ expect(parsed.sha256).toHaveLength(64);
72
+ expect(parsed.counts.agent).toBe(1);
73
+ expect(parsed.counts.session).toBe(2);
74
+ expect(parsed.counts.event).toBe(5);
75
+ });
76
+ });
77
+ describe('progress tracking', () => {
78
+ it('state file tracks migration progress', () => {
79
+ const state = {
80
+ direction: 'up',
81
+ phase: 'upload',
82
+ exportFile: '/tmp/export.ndjson',
83
+ lastUploadedLine: 250,
84
+ totalLines: 1000,
85
+ counts: { agent: 5, session: 20, event: 225 },
86
+ };
87
+ // Verify state structure is serializable
88
+ const serialized = JSON.stringify(state);
89
+ const deserialized = JSON.parse(serialized);
90
+ expect(deserialized.lastUploadedLine).toBe(250);
91
+ expect(deserialized.phase).toBe('upload');
92
+ });
93
+ it('resume starts from lastUploadedLine', () => {
94
+ const state = {
95
+ direction: 'up',
96
+ phase: 'upload',
97
+ lastUploadedLine: 500,
98
+ totalLines: 1000,
99
+ };
100
+ // Simulate batch calculation
101
+ const batchSize = 100;
102
+ const startLine = state.lastUploadedLine;
103
+ const batches = [];
104
+ for (let i = startLine; i < state.totalLines; i += batchSize) {
105
+ batches.push(i);
106
+ }
107
+ expect(batches[0]).toBe(500); // Starts from where we left off
108
+ expect(batches.length).toBe(5); // 500-1000 in batches of 100
109
+ });
110
+ });
111
+ describe('verification', () => {
112
+ it('count comparison detects mismatches', () => {
113
+ const localCounts = { agent: 5, session: 20, event: 100 };
114
+ const remoteCounts = { agent: 5, session: 20, event: 95 };
115
+ const mismatches = [];
116
+ for (const [type, count] of Object.entries(localCounts)) {
117
+ const remote = remoteCounts[type] ?? 0;
118
+ if (remote < count) {
119
+ mismatches.push(type);
120
+ }
121
+ }
122
+ expect(mismatches).toContain('event');
123
+ expect(mismatches).not.toContain('agent');
124
+ });
125
+ it('count comparison passes when all match', () => {
126
+ const localCounts = { agent: 5, session: 20, event: 100 };
127
+ const remoteCounts = { agent: 5, session: 20, event: 100 };
128
+ let allMatch = true;
129
+ for (const [type, count] of Object.entries(localCounts)) {
130
+ const remote = remoteCounts[type] ?? 0;
131
+ if (remote < count)
132
+ allMatch = false;
133
+ }
134
+ expect(allMatch).toBe(true);
135
+ });
136
+ });
137
+ describe('reverse migration (cloud → self-hosted)', () => {
138
+ it('NDJSON export file can be parsed line by line', () => {
139
+ const ndjson = [
140
+ '{"_type":"agent","_version":1,"id":"a1","name":"Test"}',
141
+ '{"_type":"session","_version":1,"id":"s1","agent_id":"a1","created_at":"2026-01-15T10:00:00Z"}',
142
+ '{"_type":"event","_version":1,"id":"e1","session_id":"s1","type":"llm_call","timestamp":"2026-01-15T10:00:01Z","data":{}}',
143
+ '{"_type":"checksum","sha256":"abc123","counts":{"agent":1,"session":1,"event":1},"exported_at":"2026-01-15T12:00:00Z"}',
144
+ ].join('\n');
145
+ const lines = ndjson.split('\n').filter(Boolean);
146
+ expect(lines.length).toBe(4);
147
+ const records = lines.map((l) => JSON.parse(l));
148
+ const types = records.map((r) => r._type);
149
+ expect(types).toEqual(['agent', 'session', 'event', 'checksum']);
150
+ });
151
+ });
152
+ });
153
+ //# sourceMappingURL=migrate.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.test.js","sourceRoot":"","sources":["../../src/__tests__/migrate.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function runAuditCommand(argv: string[]): Promise<void>;
2
+ //# sourceMappingURL=audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"AA0BA,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAYnE"}
@@ -0,0 +1,119 @@
1
+ /**
2
+ * agentlens audit — Audit trail verification
3
+ */
4
+ import { parseArgs } from 'node:util';
5
+ import { writeFileSync } from 'node:fs';
6
+ import { createClientFromConfig } from '../lib/client.js';
7
+ import { printJson } from '../lib/output.js';
8
+ const HELP = `Usage: agentlens audit verify [options]
9
+
10
+ Verify audit trail hash chain integrity.
11
+
12
+ Options:
13
+ --from <date> Start date (ISO 8601)
14
+ --to <date> End date (ISO 8601)
15
+ --session-id <id> Verify a single session
16
+ --output <path> Save signed JSON report to file
17
+ --format <fmt> Output format: table (default) or json
18
+ --url <url> Server URL (overrides config)
19
+ -h, --help Show help
20
+
21
+ Examples:
22
+ agentlens audit verify --from 2026-01-01 --to 2026-02-01
23
+ agentlens audit verify --session-id sess_abc
24
+ agentlens audit verify --from 2026-01-01 --to 2026-02-01 --output report.json`;
25
+ export async function runAuditCommand(argv) {
26
+ const subcommand = argv[0];
27
+ if (subcommand === 'verify') {
28
+ await runAuditVerify(argv.slice(1));
29
+ }
30
+ else if (subcommand === '--help' || subcommand === '-h' || !subcommand) {
31
+ console.log(HELP);
32
+ }
33
+ else {
34
+ console.error(`Unknown audit subcommand: ${subcommand}`);
35
+ console.log(HELP);
36
+ process.exit(1);
37
+ }
38
+ }
39
+ async function runAuditVerify(argv) {
40
+ const { values } = parseArgs({
41
+ args: argv,
42
+ options: {
43
+ from: { type: 'string' },
44
+ to: { type: 'string' },
45
+ 'session-id': { type: 'string' },
46
+ output: { type: 'string' },
47
+ format: { type: 'string', default: 'table' },
48
+ url: { type: 'string' },
49
+ help: { type: 'boolean', short: 'h' },
50
+ },
51
+ strict: true,
52
+ });
53
+ if (values.help) {
54
+ console.log(HELP);
55
+ return;
56
+ }
57
+ const sessionId = values['session-id'];
58
+ const from = values.from;
59
+ const to = values.to;
60
+ if (!sessionId && (!from || !to)) {
61
+ console.error('Error: Provide --from/--to or --session-id');
62
+ console.log(HELP);
63
+ process.exit(1);
64
+ }
65
+ const client = createClientFromConfig(values.url);
66
+ const report = await client.verifyAudit({
67
+ from: from || undefined,
68
+ to: to || undefined,
69
+ sessionId: sessionId || undefined,
70
+ });
71
+ // Save to file if requested
72
+ if (values.output) {
73
+ writeFileSync(values.output, JSON.stringify(report, null, 2));
74
+ console.log(`Report saved to ${values.output}`);
75
+ }
76
+ // Output
77
+ if (values.format === 'json') {
78
+ printJson(report);
79
+ }
80
+ else {
81
+ // Human-readable table output
82
+ const statusIcon = report.verified ? '\x1b[32m✓ VERIFIED\x1b[0m' : '\x1b[31m✗ FAILED\x1b[0m';
83
+ console.log('');
84
+ console.log('Audit Trail Verification');
85
+ console.log('========================');
86
+ console.log(`Status: ${statusIcon}`);
87
+ console.log(`Verified: ${report.verifiedAt}`);
88
+ if (report.range) {
89
+ console.log(`Range: ${report.range.from} → ${report.range.to}`);
90
+ }
91
+ if (report.sessionId) {
92
+ console.log(`Session: ${report.sessionId}`);
93
+ }
94
+ console.log(`Sessions: ${report.sessionsVerified}`);
95
+ console.log(`Events: ${report.totalEvents.toLocaleString()}`);
96
+ console.log(`First Hash: ${report.firstHash ?? 'N/A'}`);
97
+ console.log(`Last Hash: ${report.lastHash ?? 'N/A'}`);
98
+ console.log(`Signed: ${report.signature ? 'Yes (hmac-sha256)' : 'No'}`);
99
+ if (report.brokenChains.length > 0) {
100
+ console.log('');
101
+ console.log('Broken Chains:');
102
+ console.log(' Session | Failed At | Event ID | Reason');
103
+ console.log(' ' + '─'.repeat(80));
104
+ for (const bc of report.brokenChains) {
105
+ console.log(` ${bc.sessionId.padEnd(12)}| index ${String(bc.failedAtIndex).padEnd(4)}| ${bc.failedEventId.padEnd(21)}| ${bc.reason}`);
106
+ }
107
+ }
108
+ else {
109
+ console.log('');
110
+ console.log('Broken Chains: None');
111
+ }
112
+ console.log('');
113
+ }
114
+ // Exit code
115
+ if (!report.verified) {
116
+ process.exit(1);
117
+ }
118
+ }
119
+ //# sourceMappingURL=audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function runDiagnoseCommand(argv: string[]): Promise<void>;
2
+ //# sourceMappingURL=diagnose.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnose.d.ts","sourceRoot":"","sources":["../../src/commands/diagnose.ts"],"names":[],"mappings":"AAyBA,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoEtE"}
@@ -0,0 +1,148 @@
1
+ /**
2
+ * agentlens diagnose — AI-powered diagnostics & root cause analysis [F18-S9]
3
+ */
4
+ import { parseArgs } from 'node:util';
5
+ import { loadConfig } from '../lib/config.js';
6
+ import { printJson } from '../lib/output.js';
7
+ const HELP = `Usage: agentlens diagnose <agentId> [options]
8
+ agentlens diagnose --session <sessionId> [options]
9
+
10
+ Run AI-powered diagnostics on an agent or session.
11
+
12
+ Options:
13
+ --session <id> Diagnose a specific session instead of an agent
14
+ --window <N> Time window in days (default: 7, agent-level only)
15
+ --refresh Bypass cache and force fresh analysis
16
+ --url <url> Server URL (overrides config)
17
+ -j, --json Output raw JSON
18
+ -h, --help Show help
19
+
20
+ Examples:
21
+ agentlens diagnose my-coding-agent
22
+ agentlens diagnose my-agent --window 14 --refresh
23
+ agentlens diagnose --session sess_abc123 --json`;
24
+ export async function runDiagnoseCommand(argv) {
25
+ const { values, positionals } = parseArgs({
26
+ args: argv,
27
+ options: {
28
+ session: { type: 'string', short: 's' },
29
+ window: { type: 'string', short: 'w' },
30
+ refresh: { type: 'boolean', default: false },
31
+ url: { type: 'string' },
32
+ json: { type: 'boolean', short: 'j', default: false },
33
+ help: { type: 'boolean', short: 'h', default: false },
34
+ },
35
+ allowPositionals: true,
36
+ });
37
+ if (values.help) {
38
+ console.log(HELP);
39
+ return;
40
+ }
41
+ const config = loadConfig();
42
+ const baseUrl = values.url ?? config.url;
43
+ const isSession = !!values.session;
44
+ if (!isSession && positionals.length === 0) {
45
+ console.error('Error: Provide an agent ID or use --session <id>');
46
+ console.log(HELP);
47
+ process.exit(1);
48
+ }
49
+ try {
50
+ const headers = { 'Content-Type': 'application/json' };
51
+ if (config.apiKey)
52
+ headers['Authorization'] = `Bearer ${config.apiKey}`;
53
+ let report;
54
+ if (isSession) {
55
+ const params = new URLSearchParams();
56
+ if (values.refresh)
57
+ params.set('refresh', 'true');
58
+ const qs = params.toString() ? `?${params}` : '';
59
+ const res = await fetch(`${baseUrl}/api/sessions/${values.session}/diagnose${qs}`, {
60
+ method: 'POST',
61
+ headers,
62
+ });
63
+ report = (await res.json());
64
+ }
65
+ else {
66
+ const agentId = positionals[0];
67
+ const params = new URLSearchParams();
68
+ if (values.window)
69
+ params.set('window', values.window);
70
+ if (values.refresh)
71
+ params.set('refresh', 'true');
72
+ const qs = params.toString() ? `?${params}` : '';
73
+ const res = await fetch(`${baseUrl}/api/agents/${agentId}/diagnose${qs}`, {
74
+ method: 'POST',
75
+ headers,
76
+ });
77
+ report = (await res.json());
78
+ }
79
+ if (values.json) {
80
+ printJson(report);
81
+ return;
82
+ }
83
+ formatReport(report);
84
+ }
85
+ catch (err) {
86
+ const msg = err instanceof Error ? err.message : String(err);
87
+ console.error(`Error: ${msg}`);
88
+ process.exit(1);
89
+ }
90
+ }
91
+ function formatReport(r) {
92
+ const severity = r.severity;
93
+ const icon = severity === 'critical'
94
+ ? '🔴'
95
+ : severity === 'warning'
96
+ ? '⚠️'
97
+ : severity === 'info'
98
+ ? 'ℹ️'
99
+ : '✅';
100
+ const label = severity.toUpperCase();
101
+ const target = r.type === 'session' ? `Session: ${r.targetId}` : `Agent: ${r.targetId}`;
102
+ console.log('');
103
+ console.log(`╔${'═'.repeat(50)}╗`);
104
+ console.log(`║ ${icon} ${label} — ${target}`.padEnd(51) + '║');
105
+ console.log(`╚${'═'.repeat(50)}╝`);
106
+ if (r.healthScore !== undefined) {
107
+ console.log(`\nHealth Score: ${r.healthScore}/100`);
108
+ }
109
+ console.log(`\nSummary:\n ${r.summary}`);
110
+ const rootCauses = r.rootCauses;
111
+ if (rootCauses && rootCauses.length > 0) {
112
+ console.log('\nRoot Causes:');
113
+ for (let i = 0; i < rootCauses.length; i++) {
114
+ const rc = rootCauses[i];
115
+ const conf = rc.confidence ?? 0;
116
+ const level = conf >= 0.7 ? 'HIGH' : conf >= 0.4 ? 'MED ' : 'LOW ';
117
+ console.log(` ${i + 1}. [${level} ${conf.toFixed(2)}] ${rc.description}`);
118
+ console.log(` Category: ${rc.category}`);
119
+ const evidence = rc.evidence;
120
+ if (evidence && evidence.length > 0) {
121
+ console.log(' Evidence:');
122
+ for (const e of evidence) {
123
+ console.log(` • ${e.summary}`);
124
+ }
125
+ }
126
+ }
127
+ }
128
+ const recs = r.recommendations;
129
+ if (recs && recs.length > 0) {
130
+ console.log('\nRecommendations:');
131
+ for (const rec of recs) {
132
+ const p = (rec.priority ?? 'low').toUpperCase();
133
+ console.log(` ▸ [${p}] ${rec.action}`);
134
+ }
135
+ }
136
+ const meta = r.llmMeta;
137
+ if (meta && meta.provider !== 'none') {
138
+ console.log('');
139
+ console.log('─'.repeat(52));
140
+ const cost = meta.estimatedCostUsd ?? 0;
141
+ console.log(`Model: ${meta.model} | Tokens: ${meta.inputTokens} in / ${meta.outputTokens} out | Cost: ~$${cost.toFixed(4)} | ${(meta.latencyMs / 1000).toFixed(1)}s`);
142
+ }
143
+ if (r.source === 'fallback') {
144
+ console.log('\n⚠ AI diagnostics unavailable — showing heuristic analysis');
145
+ }
146
+ console.log('');
147
+ }
148
+ //# sourceMappingURL=diagnose.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnose.js","sourceRoot":"","sources":["../../src/commands/diagnose.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,8 @@
1
- export declare function runLessonsCommand(argv: string[]): Promise<void>;
1
+ /**
2
+ * agentlens lessons — DEPRECATED
3
+ *
4
+ * Lesson methods have been removed from AgentLens SDK.
5
+ * Use lore-sdk directly: https://github.com/amitpaz1/lore
6
+ */
7
+ export declare function lessonsCommand(_args: string[]): Promise<void>;
2
8
  //# sourceMappingURL=lessons.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"lessons.d.ts","sourceRoot":"","sources":["../../src/commands/lessons.ts"],"names":[],"mappings":"AAqDA,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiCrE"}
1
+ {"version":3,"file":"lessons.d.ts","sourceRoot":"","sources":["../../src/commands/lessons.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,wBAAsB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAGnE"}