@agentlensai/cli 0.11.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 +21 -0
- package/dist/__tests__/migrate.test.js +6 -1
- package/dist/__tests__/migrate.test.js.map +1 -1
- package/dist/commands/audit.d.ts +2 -0
- package/dist/commands/audit.d.ts.map +1 -0
- package/dist/commands/audit.js +119 -0
- package/dist/commands/audit.js.map +1 -0
- package/dist/commands/diagnose.d.ts +2 -0
- package/dist/commands/diagnose.d.ts.map +1 -0
- package/dist/commands/diagnose.js +148 -0
- package/dist/commands/diagnose.js.map +1 -0
- package/dist/commands/lessons.d.ts +7 -1
- package/dist/commands/lessons.d.ts.map +1 -1
- package/dist/commands/lessons.js +13 -367
- package/dist/commands/lessons.js.map +1 -1
- package/dist/index.js +12 -2
- package/dist/index.js.map +1 -1
- package/package.json +8 -8
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.
|
|
@@ -7,6 +7,11 @@
|
|
|
7
7
|
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
8
8
|
import { existsSync, writeFileSync, readFileSync, mkdirSync, unlinkSync, rmSync } from 'node:fs';
|
|
9
9
|
import { join } from 'node:path';
|
|
10
|
+
function getErrorMessage(err) {
|
|
11
|
+
if (err instanceof Error)
|
|
12
|
+
return err.message;
|
|
13
|
+
return String(err);
|
|
14
|
+
}
|
|
10
15
|
import { tmpdir } from 'node:os';
|
|
11
16
|
import { exportFromSqlite } from '../commands/migrate.js';
|
|
12
17
|
// ═══════════════════════════════════════════
|
|
@@ -31,7 +36,7 @@ describe('S-8.4: Migration CLI', () => {
|
|
|
31
36
|
// so it will throw a different error — that's fine too
|
|
32
37
|
}
|
|
33
38
|
catch (err) {
|
|
34
|
-
expect(err
|
|
39
|
+
expect(getErrorMessage(err)).toMatch(/better-sqlite3|not a database|SQLite/i);
|
|
35
40
|
}
|
|
36
41
|
finally {
|
|
37
42
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.test.js","sourceRoot":"","sources":["../../src/__tests__/migrate.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjG,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"migrate.test.js","sourceRoot":"","sources":["../../src/__tests__/migrate.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -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 @@
|
|
|
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
|
-
|
|
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":"
|
|
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"}
|
package/dist/commands/lessons.js
CHANGED
|
@@ -1,373 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* agentlens lessons —
|
|
2
|
+
* agentlens lessons — DEPRECATED
|
|
3
|
+
*
|
|
4
|
+
* Lesson methods have been removed from AgentLens SDK.
|
|
5
|
+
* Use lore-sdk directly: https://github.com/amitpaz1/lore
|
|
3
6
|
*/
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
import { printTable, printJson, truncate, formatTimestamp } from '../lib/output.js';
|
|
7
|
-
const HELP = `Usage: agentlens lessons <subcommand> [options]
|
|
7
|
+
const DEPRECATION_NOTICE = `
|
|
8
|
+
⚠️ The "agentlens lessons" command is deprecated.
|
|
8
9
|
|
|
9
|
-
|
|
10
|
+
Lesson management has moved to the standalone Lore SDK.
|
|
11
|
+
See: https://github.com/amitpaz1/lore
|
|
10
12
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
delete <id> Delete (archive) a lesson
|
|
17
|
-
search <query> Search lessons by text
|
|
18
|
-
|
|
19
|
-
Options (common):
|
|
20
|
-
--url <url> Server URL (overrides config)
|
|
21
|
-
-j, --json Output raw JSON
|
|
22
|
-
-h, --help Show help
|
|
23
|
-
|
|
24
|
-
Options (list):
|
|
25
|
-
--category <cat> Filter by category
|
|
26
|
-
--importance <level> Filter by importance: low|normal|high|critical
|
|
27
|
-
--agent <id> Filter by agent ID
|
|
28
|
-
--limit <n> Max results (default: 20)
|
|
29
|
-
--offset <n> Pagination offset
|
|
30
|
-
|
|
31
|
-
Options (create):
|
|
32
|
-
--title <title> Lesson title (required)
|
|
33
|
-
--content <text> Lesson content (required)
|
|
34
|
-
--category <cat> Category (default: general)
|
|
35
|
-
--importance <level> Importance: low|normal|high|critical (default: normal)
|
|
36
|
-
--agent <id> Agent ID to scope the lesson to
|
|
37
|
-
|
|
38
|
-
Options (update):
|
|
39
|
-
--title <title> New title
|
|
40
|
-
--content <text> New content
|
|
41
|
-
--category <cat> New category
|
|
42
|
-
--importance <level> New importance level
|
|
43
|
-
|
|
44
|
-
Examples:
|
|
45
|
-
agentlens lessons list
|
|
46
|
-
agentlens lessons list --category deployment --importance high
|
|
47
|
-
agentlens lessons create --title "Always run tests" --content "Run test suite before deploying" --category deployment
|
|
48
|
-
agentlens lessons get abc123
|
|
49
|
-
agentlens lessons update abc123 --content "updated content"
|
|
50
|
-
agentlens lessons delete abc123
|
|
51
|
-
agentlens lessons search "deployment best practices"`;
|
|
52
|
-
export async function runLessonsCommand(argv) {
|
|
53
|
-
const subcommand = argv[0];
|
|
54
|
-
const rest = argv.slice(1);
|
|
55
|
-
switch (subcommand) {
|
|
56
|
-
case 'list':
|
|
57
|
-
await runLessonsList(rest);
|
|
58
|
-
break;
|
|
59
|
-
case 'create':
|
|
60
|
-
await runLessonsCreate(rest);
|
|
61
|
-
break;
|
|
62
|
-
case 'get':
|
|
63
|
-
await runLessonsGet(rest);
|
|
64
|
-
break;
|
|
65
|
-
case 'update':
|
|
66
|
-
await runLessonsUpdate(rest);
|
|
67
|
-
break;
|
|
68
|
-
case 'delete':
|
|
69
|
-
await runLessonsDelete(rest);
|
|
70
|
-
break;
|
|
71
|
-
case 'search':
|
|
72
|
-
await runLessonsSearch(rest);
|
|
73
|
-
break;
|
|
74
|
-
case '--help':
|
|
75
|
-
case '-h':
|
|
76
|
-
case undefined:
|
|
77
|
-
console.log(HELP);
|
|
78
|
-
break;
|
|
79
|
-
default:
|
|
80
|
-
console.error(`Unknown lessons subcommand: ${subcommand}`);
|
|
81
|
-
console.log(HELP);
|
|
82
|
-
process.exit(1);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
function parseLessonsArgs(argv) {
|
|
86
|
-
return parseArgs({
|
|
87
|
-
args: argv,
|
|
88
|
-
options: {
|
|
89
|
-
title: { type: 'string' },
|
|
90
|
-
content: { type: 'string' },
|
|
91
|
-
category: { type: 'string' },
|
|
92
|
-
importance: { type: 'string' },
|
|
93
|
-
agent: { type: 'string', short: 'a' },
|
|
94
|
-
limit: { type: 'string', short: 'l' },
|
|
95
|
-
offset: { type: 'string' },
|
|
96
|
-
url: { type: 'string' },
|
|
97
|
-
json: { type: 'boolean', short: 'j', default: false },
|
|
98
|
-
help: { type: 'boolean', short: 'h', default: false },
|
|
99
|
-
},
|
|
100
|
-
allowPositionals: true,
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* agentlens lessons list
|
|
105
|
-
*/
|
|
106
|
-
async function runLessonsList(argv) {
|
|
107
|
-
const { values } = parseLessonsArgs(argv);
|
|
108
|
-
if (values.help) {
|
|
109
|
-
console.log(`Usage: agentlens lessons list [options]
|
|
110
|
-
|
|
111
|
-
List lessons with optional filters.
|
|
112
|
-
|
|
113
|
-
Options:
|
|
114
|
-
--category <cat> Filter by category
|
|
115
|
-
--importance <level> Filter by importance: low|normal|high|critical
|
|
116
|
-
--agent <id> Filter by agent ID
|
|
117
|
-
--limit <n> Max results (default: 20)
|
|
118
|
-
--offset <n> Pagination offset
|
|
119
|
-
--url <url> Server URL
|
|
120
|
-
-j, --json Output raw JSON
|
|
121
|
-
-h, --help Show help`);
|
|
122
|
-
return;
|
|
123
|
-
}
|
|
124
|
-
const client = createClientFromConfig(values.url);
|
|
125
|
-
const result = await client.getLessons({
|
|
126
|
-
category: values.category ?? undefined,
|
|
127
|
-
importance: values.importance ?? undefined,
|
|
128
|
-
agentId: values.agent ?? undefined,
|
|
129
|
-
limit: values.limit ? parseInt(values.limit, 10) : 20,
|
|
130
|
-
offset: values.offset ? parseInt(values.offset, 10) : undefined,
|
|
131
|
-
});
|
|
132
|
-
if (values.json) {
|
|
133
|
-
printJson(result);
|
|
134
|
-
return;
|
|
135
|
-
}
|
|
136
|
-
if (result.lessons.length === 0) {
|
|
137
|
-
console.log('No lessons found.');
|
|
138
|
-
return;
|
|
139
|
-
}
|
|
140
|
-
const headers = ['ID', 'Category', 'Importance', 'Title', 'Created'];
|
|
141
|
-
const rows = result.lessons.map((l) => [
|
|
142
|
-
truncate(l.id, 16),
|
|
143
|
-
l.category,
|
|
144
|
-
l.importance,
|
|
145
|
-
truncate(l.title, 40),
|
|
146
|
-
formatTimestamp(l.createdAt),
|
|
147
|
-
]);
|
|
148
|
-
printTable(headers, rows);
|
|
149
|
-
console.log(`\n${result.lessons.length} of ${result.total} lesson(s).`);
|
|
150
|
-
}
|
|
151
|
-
/**
|
|
152
|
-
* agentlens lessons create
|
|
153
|
-
*/
|
|
154
|
-
async function runLessonsCreate(argv) {
|
|
155
|
-
const { values } = parseLessonsArgs(argv);
|
|
156
|
-
if (values.help) {
|
|
157
|
-
console.log(`Usage: agentlens lessons create [options]
|
|
158
|
-
|
|
159
|
-
Create a new lesson.
|
|
160
|
-
|
|
161
|
-
Options:
|
|
162
|
-
--title <title> Lesson title (required)
|
|
163
|
-
--content <text> Lesson content (required)
|
|
164
|
-
--category <cat> Category (default: general)
|
|
165
|
-
--importance <level> Importance: low|normal|high|critical (default: normal)
|
|
166
|
-
--agent <id> Agent ID
|
|
167
|
-
--url <url> Server URL
|
|
168
|
-
-j, --json Output raw JSON
|
|
169
|
-
-h, --help Show help`);
|
|
170
|
-
return;
|
|
171
|
-
}
|
|
172
|
-
if (!values.title) {
|
|
173
|
-
console.error('Error: --title is required.');
|
|
174
|
-
process.exit(1);
|
|
175
|
-
}
|
|
176
|
-
if (!values.content) {
|
|
177
|
-
console.error('Error: --content is required.');
|
|
178
|
-
process.exit(1);
|
|
179
|
-
}
|
|
180
|
-
const client = createClientFromConfig(values.url);
|
|
181
|
-
const lesson = await client.createLesson({
|
|
182
|
-
title: values.title,
|
|
183
|
-
content: values.content,
|
|
184
|
-
category: values.category ?? undefined,
|
|
185
|
-
importance: values.importance ?? undefined,
|
|
186
|
-
agentId: values.agent ?? undefined,
|
|
187
|
-
});
|
|
188
|
-
if (values.json) {
|
|
189
|
-
printJson(lesson);
|
|
190
|
-
return;
|
|
191
|
-
}
|
|
192
|
-
console.log(`\nLesson created: ${lesson.id}`);
|
|
193
|
-
console.log(` Title: ${lesson.title}`);
|
|
194
|
-
console.log(` Category: ${lesson.category}`);
|
|
195
|
-
console.log(` Importance: ${lesson.importance}`);
|
|
196
|
-
console.log('');
|
|
197
|
-
}
|
|
198
|
-
/**
|
|
199
|
-
* agentlens lessons get <id>
|
|
200
|
-
*/
|
|
201
|
-
async function runLessonsGet(argv) {
|
|
202
|
-
const { values, positionals } = parseLessonsArgs(argv);
|
|
203
|
-
if (values.help) {
|
|
204
|
-
console.log(`Usage: agentlens lessons get <id> [options]
|
|
205
|
-
|
|
206
|
-
Get a lesson by ID with full details.
|
|
207
|
-
|
|
208
|
-
Options:
|
|
209
|
-
--url <url> Server URL
|
|
210
|
-
-j, --json Output raw JSON
|
|
211
|
-
-h, --help Show help`);
|
|
212
|
-
return;
|
|
213
|
-
}
|
|
214
|
-
const id = positionals[0];
|
|
215
|
-
if (!id) {
|
|
216
|
-
console.error('Error: Lesson ID is required.');
|
|
217
|
-
process.exit(1);
|
|
218
|
-
}
|
|
219
|
-
const client = createClientFromConfig(values.url);
|
|
220
|
-
const lesson = await client.getLesson(id);
|
|
221
|
-
if (values.json) {
|
|
222
|
-
printJson(lesson);
|
|
223
|
-
return;
|
|
224
|
-
}
|
|
225
|
-
console.log('');
|
|
226
|
-
console.log(`Lesson: ${lesson.id}`);
|
|
227
|
-
console.log(` Title: ${lesson.title}`);
|
|
228
|
-
console.log(` Category: ${lesson.category}`);
|
|
229
|
-
console.log(` Importance: ${lesson.importance}`);
|
|
230
|
-
console.log(` Created: ${formatTimestamp(lesson.createdAt)}`);
|
|
231
|
-
console.log(` Updated: ${formatTimestamp(lesson.updatedAt)}`);
|
|
232
|
-
console.log(` Access Count: ${lesson.accessCount}`);
|
|
233
|
-
if (lesson.agentId) {
|
|
234
|
-
console.log(` Agent: ${lesson.agentId}`);
|
|
235
|
-
}
|
|
236
|
-
if (lesson.sourceSessionId) {
|
|
237
|
-
console.log(` Source Session: ${lesson.sourceSessionId}`);
|
|
238
|
-
}
|
|
239
|
-
console.log('');
|
|
240
|
-
console.log('Content:');
|
|
241
|
-
console.log(` ${lesson.content}`);
|
|
242
|
-
console.log('');
|
|
243
|
-
}
|
|
244
|
-
/**
|
|
245
|
-
* agentlens lessons update <id>
|
|
246
|
-
*/
|
|
247
|
-
async function runLessonsUpdate(argv) {
|
|
248
|
-
const { values, positionals } = parseLessonsArgs(argv);
|
|
249
|
-
if (values.help) {
|
|
250
|
-
console.log(`Usage: agentlens lessons update <id> [options]
|
|
251
|
-
|
|
252
|
-
Update an existing lesson.
|
|
253
|
-
|
|
254
|
-
Options:
|
|
255
|
-
--title <title> New title
|
|
256
|
-
--content <text> New content
|
|
257
|
-
--category <cat> New category
|
|
258
|
-
--importance <level> New importance level
|
|
259
|
-
--url <url> Server URL
|
|
260
|
-
-j, --json Output raw JSON
|
|
261
|
-
-h, --help Show help`);
|
|
262
|
-
return;
|
|
263
|
-
}
|
|
264
|
-
const id = positionals[0];
|
|
265
|
-
if (!id) {
|
|
266
|
-
console.error('Error: Lesson ID is required.');
|
|
267
|
-
process.exit(1);
|
|
268
|
-
}
|
|
269
|
-
const updates = {};
|
|
270
|
-
if (values.title)
|
|
271
|
-
updates.title = values.title;
|
|
272
|
-
if (values.content)
|
|
273
|
-
updates.content = values.content;
|
|
274
|
-
if (values.category)
|
|
275
|
-
updates.category = values.category;
|
|
276
|
-
if (values.importance)
|
|
277
|
-
updates.importance = values.importance;
|
|
278
|
-
if (Object.keys(updates).length === 0) {
|
|
279
|
-
console.error('Error: At least one field to update is required (--title, --content, --category, --importance).');
|
|
280
|
-
process.exit(1);
|
|
281
|
-
}
|
|
282
|
-
const client = createClientFromConfig(values.url);
|
|
283
|
-
const lesson = await client.updateLesson(id, updates);
|
|
284
|
-
if (values.json) {
|
|
285
|
-
printJson(lesson);
|
|
286
|
-
return;
|
|
287
|
-
}
|
|
288
|
-
console.log(`\nLesson updated: ${lesson.id}`);
|
|
289
|
-
console.log(` Title: ${lesson.title}`);
|
|
290
|
-
console.log(` Category: ${lesson.category}`);
|
|
291
|
-
console.log(` Importance: ${lesson.importance}`);
|
|
292
|
-
console.log('');
|
|
293
|
-
}
|
|
294
|
-
/**
|
|
295
|
-
* agentlens lessons delete <id>
|
|
296
|
-
*/
|
|
297
|
-
async function runLessonsDelete(argv) {
|
|
298
|
-
const { values, positionals } = parseLessonsArgs(argv);
|
|
299
|
-
if (values.help) {
|
|
300
|
-
console.log(`Usage: agentlens lessons delete <id> [options]
|
|
301
|
-
|
|
302
|
-
Delete (archive) a lesson.
|
|
303
|
-
|
|
304
|
-
Options:
|
|
305
|
-
--url <url> Server URL
|
|
306
|
-
-j, --json Output raw JSON
|
|
307
|
-
-h, --help Show help`);
|
|
308
|
-
return;
|
|
309
|
-
}
|
|
310
|
-
const id = positionals[0];
|
|
311
|
-
if (!id) {
|
|
312
|
-
console.error('Error: Lesson ID is required.');
|
|
313
|
-
process.exit(1);
|
|
314
|
-
}
|
|
315
|
-
const client = createClientFromConfig(values.url);
|
|
316
|
-
const result = await client.deleteLesson(id);
|
|
317
|
-
if (values.json) {
|
|
318
|
-
printJson(result);
|
|
319
|
-
return;
|
|
320
|
-
}
|
|
321
|
-
console.log(`Lesson ${id} archived successfully.`);
|
|
322
|
-
}
|
|
323
|
-
/**
|
|
324
|
-
* agentlens lessons search <query>
|
|
325
|
-
*/
|
|
326
|
-
async function runLessonsSearch(argv) {
|
|
327
|
-
const { values, positionals } = parseLessonsArgs(argv);
|
|
328
|
-
if (values.help) {
|
|
329
|
-
console.log(`Usage: agentlens lessons search <query> [options]
|
|
330
|
-
|
|
331
|
-
Search lessons by text.
|
|
332
|
-
|
|
333
|
-
Options:
|
|
334
|
-
--category <cat> Filter by category
|
|
335
|
-
--agent <id> Filter by agent ID
|
|
336
|
-
--limit <n> Max results (default: 20)
|
|
337
|
-
--url <url> Server URL
|
|
338
|
-
-j, --json Output raw JSON
|
|
339
|
-
-h, --help Show help`);
|
|
340
|
-
return;
|
|
341
|
-
}
|
|
342
|
-
const query = positionals[0];
|
|
343
|
-
if (!query) {
|
|
344
|
-
console.error('Error: Search query is required.');
|
|
345
|
-
process.exit(1);
|
|
346
|
-
}
|
|
347
|
-
const client = createClientFromConfig(values.url);
|
|
348
|
-
const result = await client.getLessons({
|
|
349
|
-
search: query,
|
|
350
|
-
category: values.category ?? undefined,
|
|
351
|
-
agentId: values.agent ?? undefined,
|
|
352
|
-
limit: values.limit ? parseInt(values.limit, 10) : 20,
|
|
353
|
-
});
|
|
354
|
-
if (values.json) {
|
|
355
|
-
printJson(result);
|
|
356
|
-
return;
|
|
357
|
-
}
|
|
358
|
-
if (result.lessons.length === 0) {
|
|
359
|
-
console.log(`No lessons found matching "${query}".`);
|
|
360
|
-
return;
|
|
361
|
-
}
|
|
362
|
-
const headers = ['ID', 'Category', 'Importance', 'Title', 'Preview'];
|
|
363
|
-
const rows = result.lessons.map((l) => [
|
|
364
|
-
truncate(l.id, 16),
|
|
365
|
-
l.category,
|
|
366
|
-
l.importance,
|
|
367
|
-
truncate(l.title, 30),
|
|
368
|
-
truncate(l.content.replace(/\n/g, ' '), 40),
|
|
369
|
-
]);
|
|
370
|
-
printTable(headers, rows);
|
|
371
|
-
console.log(`\n${result.lessons.length} of ${result.total} lesson(s) matching "${query}".`);
|
|
13
|
+
Install: npm install lore-sdk
|
|
14
|
+
`;
|
|
15
|
+
export async function lessonsCommand(_args) {
|
|
16
|
+
console.log(DEPRECATION_NOTICE);
|
|
17
|
+
process.exit(0);
|
|
372
18
|
}
|
|
373
19
|
//# sourceMappingURL=lessons.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lessons.js","sourceRoot":"","sources":["../../src/commands/lessons.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"lessons.js","sourceRoot":"","sources":["../../src/commands/lessons.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,kBAAkB,GAAG;;;;;;;CAO1B,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAe;IAClD,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAChC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -4,12 +4,14 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Uses node:util parseArgs for lightweight argument parsing.
|
|
6
6
|
*/
|
|
7
|
+
import { runAuditCommand } from './commands/audit.js';
|
|
7
8
|
import { runConfigCommand } from './commands/config.js';
|
|
9
|
+
import { runDiagnoseCommand } from './commands/diagnose.js';
|
|
8
10
|
import { runContextCommand } from './commands/context.js';
|
|
9
11
|
import { runEventsCommand } from './commands/events.js';
|
|
10
12
|
import { runGuardrailsCommand } from './commands/guardrails.js';
|
|
11
13
|
import { runHealthCommand } from './commands/health.js';
|
|
12
|
-
import {
|
|
14
|
+
import { lessonsCommand } from './commands/lessons.js';
|
|
13
15
|
import { runLlmCommand } from './commands/llm.js';
|
|
14
16
|
import { runOptimizeCommand } from './commands/optimize.js';
|
|
15
17
|
import { runRecallCommand } from './commands/recall.js';
|
|
@@ -22,7 +24,9 @@ const HELP = `AgentLens CLI — Observability for AI agents
|
|
|
22
24
|
Usage: agentlens <command> [options]
|
|
23
25
|
|
|
24
26
|
Commands:
|
|
27
|
+
audit Verify audit trail integrity
|
|
25
28
|
config Get or set configuration (url, api-key)
|
|
29
|
+
diagnose AI-powered diagnostics & root cause analysis
|
|
26
30
|
context Retrieve cross-session context for a topic
|
|
27
31
|
events Query events
|
|
28
32
|
guardrails Manage guardrail rules (list, get, create, enable, disable, history, delete)
|
|
@@ -48,12 +52,18 @@ async function main() {
|
|
|
48
52
|
const command = args[0];
|
|
49
53
|
const rest = args.slice(1);
|
|
50
54
|
switch (command) {
|
|
55
|
+
case 'audit':
|
|
56
|
+
await runAuditCommand(rest);
|
|
57
|
+
break;
|
|
51
58
|
case 'config':
|
|
52
59
|
runConfigCommand(rest);
|
|
53
60
|
break;
|
|
54
61
|
case 'context':
|
|
55
62
|
await runContextCommand(rest);
|
|
56
63
|
break;
|
|
64
|
+
case 'diagnose':
|
|
65
|
+
await runDiagnoseCommand(rest);
|
|
66
|
+
break;
|
|
57
67
|
case 'events':
|
|
58
68
|
await runEventsCommand(rest);
|
|
59
69
|
break;
|
|
@@ -64,7 +74,7 @@ async function main() {
|
|
|
64
74
|
await runHealthCommand(rest);
|
|
65
75
|
break;
|
|
66
76
|
case 'lessons':
|
|
67
|
-
await
|
|
77
|
+
await lessonsCommand(rest);
|
|
68
78
|
break;
|
|
69
79
|
case 'llm':
|
|
70
80
|
await runLlmCommand(rest);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentlensai/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.13.0",
|
|
4
4
|
"description": "Command-line interface for AgentLens — query events, sessions, and manage your observability server",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"author": "Amit Paz",
|
|
8
8
|
"repository": {
|
|
9
9
|
"type": "git",
|
|
10
|
-
"url": "https://github.com/
|
|
10
|
+
"url": "https://github.com/agentkitai/agentlens.git",
|
|
11
11
|
"directory": "packages/cli"
|
|
12
12
|
},
|
|
13
|
-
"homepage": "https://github.com/
|
|
13
|
+
"homepage": "https://github.com/agentkitai/agentlens/tree/main/packages/cli",
|
|
14
14
|
"bugs": {
|
|
15
|
-
"url": "https://github.com/
|
|
15
|
+
"url": "https://github.com/agentkitai/agentlens/issues"
|
|
16
16
|
},
|
|
17
17
|
"keywords": [
|
|
18
18
|
"agentlens",
|
|
@@ -36,14 +36,14 @@
|
|
|
36
36
|
"files": [
|
|
37
37
|
"dist"
|
|
38
38
|
],
|
|
39
|
+
"dependencies": {
|
|
40
|
+
"@agentlensai/sdk": "0.13.0"
|
|
41
|
+
},
|
|
39
42
|
"scripts": {
|
|
40
43
|
"build": "tsc -b",
|
|
41
44
|
"dev": "tsc -b --watch",
|
|
42
45
|
"typecheck": "tsc --noEmit",
|
|
43
46
|
"test": "vitest run",
|
|
44
47
|
"test:watch": "vitest"
|
|
45
|
-
},
|
|
46
|
-
"dependencies": {
|
|
47
|
-
"@agentlensai/sdk": "^0.8.0"
|
|
48
48
|
}
|
|
49
|
-
}
|
|
49
|
+
}
|