@agentlensai/server 0.5.0 → 0.7.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/dist/db/benchmark-store.d.ts +74 -0
- package/dist/db/benchmark-store.d.ts.map +1 -0
- package/dist/db/benchmark-store.js +268 -0
- package/dist/db/benchmark-store.js.map +1 -0
- package/dist/db/health-snapshot-store.d.ts +33 -0
- package/dist/db/health-snapshot-store.d.ts.map +1 -0
- package/dist/db/health-snapshot-store.js +112 -0
- package/dist/db/health-snapshot-store.js.map +1 -0
- package/dist/db/migrate.d.ts.map +1 -1
- package/dist/db/migrate.js +67 -0
- package/dist/db/migrate.js.map +1 -1
- package/dist/db/sqlite-store.d.ts +5 -0
- package/dist/db/sqlite-store.d.ts.map +1 -1
- package/dist/db/sqlite-store.js +15 -0
- package/dist/db/sqlite-store.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +25 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/alert-engine.d.ts.map +1 -1
- package/dist/lib/alert-engine.js +5 -2
- package/dist/lib/alert-engine.js.map +1 -1
- package/dist/lib/analysis/cost-analysis.d.ts.map +1 -1
- package/dist/lib/analysis/cost-analysis.js +5 -2
- package/dist/lib/analysis/cost-analysis.js.map +1 -1
- package/dist/lib/analysis/error-patterns.d.ts.map +1 -1
- package/dist/lib/analysis/error-patterns.js +5 -2
- package/dist/lib/analysis/error-patterns.js.map +1 -1
- package/dist/lib/analysis/performance-trends.d.ts.map +1 -1
- package/dist/lib/analysis/performance-trends.js +4 -1
- package/dist/lib/analysis/performance-trends.js.map +1 -1
- package/dist/lib/analysis/tool-sequences.d.ts.map +1 -1
- package/dist/lib/analysis/tool-sequences.js +5 -2
- package/dist/lib/analysis/tool-sequences.js.map +1 -1
- package/dist/lib/benchmark/engine.d.ts +24 -0
- package/dist/lib/benchmark/engine.d.ts.map +1 -0
- package/dist/lib/benchmark/engine.js +159 -0
- package/dist/lib/benchmark/engine.js.map +1 -0
- package/dist/lib/benchmark/metric-aggregator.d.ts +38 -0
- package/dist/lib/benchmark/metric-aggregator.d.ts.map +1 -0
- package/dist/lib/benchmark/metric-aggregator.js +159 -0
- package/dist/lib/benchmark/metric-aggregator.js.map +1 -0
- package/dist/lib/benchmark/statistical.d.ts +51 -0
- package/dist/lib/benchmark/statistical.d.ts.map +1 -0
- package/dist/lib/benchmark/statistical.js +381 -0
- package/dist/lib/benchmark/statistical.js.map +1 -0
- package/dist/lib/context/retrieval.d.ts +4 -0
- package/dist/lib/context/retrieval.d.ts.map +1 -1
- package/dist/lib/context/retrieval.js +4 -0
- package/dist/lib/context/retrieval.js.map +1 -1
- package/dist/lib/embeddings/local.js +2 -2
- package/dist/lib/embeddings/local.js.map +1 -1
- package/dist/lib/health/computer.d.ts +28 -0
- package/dist/lib/health/computer.d.ts.map +1 -0
- package/dist/lib/health/computer.js +270 -0
- package/dist/lib/health/computer.js.map +1 -0
- package/dist/lib/optimization/classifier.d.ts +34 -0
- package/dist/lib/optimization/classifier.d.ts.map +1 -0
- package/dist/lib/optimization/classifier.js +108 -0
- package/dist/lib/optimization/classifier.js.map +1 -0
- package/dist/lib/optimization/engine.d.ts +24 -0
- package/dist/lib/optimization/engine.d.ts.map +1 -0
- package/dist/lib/optimization/engine.js +202 -0
- package/dist/lib/optimization/engine.js.map +1 -0
- package/dist/lib/optimization/index.d.ts +10 -0
- package/dist/lib/optimization/index.d.ts.map +1 -0
- package/dist/lib/optimization/index.js +9 -0
- package/dist/lib/optimization/index.js.map +1 -0
- package/dist/lib/replay/builder.d.ts +28 -0
- package/dist/lib/replay/builder.d.ts.map +1 -0
- package/dist/lib/replay/builder.js +482 -0
- package/dist/lib/replay/builder.js.map +1 -0
- package/dist/routes/benchmarks.d.ts +18 -0
- package/dist/routes/benchmarks.d.ts.map +1 -0
- package/dist/routes/benchmarks.js +312 -0
- package/dist/routes/benchmarks.js.map +1 -0
- package/dist/routes/health.d.ts +21 -0
- package/dist/routes/health.d.ts.map +1 -0
- package/dist/routes/health.js +142 -0
- package/dist/routes/health.js.map +1 -0
- package/dist/routes/optimize.d.ts +15 -0
- package/dist/routes/optimize.d.ts.map +1 -0
- package/dist/routes/optimize.js +55 -0
- package/dist/routes/optimize.js.map +1 -0
- package/dist/routes/recall.d.ts +2 -0
- package/dist/routes/recall.d.ts.map +1 -1
- package/dist/routes/recall.js +21 -1
- package/dist/routes/recall.js.map +1 -1
- package/dist/routes/reflect.d.ts.map +1 -1
- package/dist/routes/reflect.js +0 -1
- package/dist/routes/reflect.js.map +1 -1
- package/dist/routes/replay.d.ts +28 -0
- package/dist/routes/replay.d.ts.map +1 -0
- package/dist/routes/replay.js +140 -0
- package/dist/routes/replay.js.map +1 -0
- package/dist/routes/tenant-helper.d.ts.map +1 -1
- package/dist/routes/tenant-helper.js +12 -0
- package/dist/routes/tenant-helper.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Benchmark Store (Story 3.1)
|
|
3
|
+
*
|
|
4
|
+
* CRUD operations for benchmarks, variants, and cached results.
|
|
5
|
+
* All operations are tenant-isolated.
|
|
6
|
+
*/
|
|
7
|
+
import type { SqliteDb } from './index.js';
|
|
8
|
+
import type { Benchmark, BenchmarkMetric, BenchmarkStatus, BenchmarkVariant, BenchmarkResults } from '@agentlensai/core';
|
|
9
|
+
export interface CreateBenchmarkInput {
|
|
10
|
+
name: string;
|
|
11
|
+
description?: string;
|
|
12
|
+
agentId?: string;
|
|
13
|
+
metrics: BenchmarkMetric[];
|
|
14
|
+
minSessionsPerVariant?: number;
|
|
15
|
+
timeRange?: {
|
|
16
|
+
from: string;
|
|
17
|
+
to: string;
|
|
18
|
+
};
|
|
19
|
+
variants: Array<{
|
|
20
|
+
name: string;
|
|
21
|
+
description?: string;
|
|
22
|
+
tag: string;
|
|
23
|
+
agentId?: string;
|
|
24
|
+
}>;
|
|
25
|
+
}
|
|
26
|
+
export interface ListBenchmarkFilters {
|
|
27
|
+
status?: BenchmarkStatus;
|
|
28
|
+
agentId?: string;
|
|
29
|
+
limit?: number;
|
|
30
|
+
offset?: number;
|
|
31
|
+
}
|
|
32
|
+
/** Benchmark with its variants */
|
|
33
|
+
export interface BenchmarkWithVariants extends Benchmark {
|
|
34
|
+
variants: BenchmarkVariant[];
|
|
35
|
+
}
|
|
36
|
+
export declare class BenchmarkStore {
|
|
37
|
+
private readonly db;
|
|
38
|
+
constructor(db: SqliteDb);
|
|
39
|
+
/**
|
|
40
|
+
* Create a benchmark with variants in a single transaction.
|
|
41
|
+
* Validates 2-10 variants.
|
|
42
|
+
*/
|
|
43
|
+
create(tenantId: string, input: CreateBenchmarkInput): BenchmarkWithVariants;
|
|
44
|
+
/**
|
|
45
|
+
* Get a benchmark by ID with its variants. Returns null if not found.
|
|
46
|
+
*/
|
|
47
|
+
getById(tenantId: string, id: string): BenchmarkWithVariants | null;
|
|
48
|
+
/**
|
|
49
|
+
* List benchmarks with optional filters. Returns paginated results.
|
|
50
|
+
*/
|
|
51
|
+
list(tenantId: string, filters?: ListBenchmarkFilters): {
|
|
52
|
+
benchmarks: BenchmarkWithVariants[];
|
|
53
|
+
total: number;
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Update benchmark status with transition validation.
|
|
57
|
+
* Sets completedAt when transitioning to 'completed'.
|
|
58
|
+
*/
|
|
59
|
+
updateStatus(tenantId: string, id: string, newStatus: BenchmarkStatus): BenchmarkWithVariants;
|
|
60
|
+
/**
|
|
61
|
+
* Delete a benchmark. Only draft/cancelled can be deleted.
|
|
62
|
+
* Returns true if deleted, false if the status doesn't allow deletion.
|
|
63
|
+
*/
|
|
64
|
+
delete(tenantId: string, id: string): boolean;
|
|
65
|
+
/**
|
|
66
|
+
* Upsert benchmark results (cached computation results).
|
|
67
|
+
*/
|
|
68
|
+
saveResults(tenantId: string, benchmarkId: string, results: BenchmarkResults): void;
|
|
69
|
+
/**
|
|
70
|
+
* Get cached results for a benchmark, or null if none.
|
|
71
|
+
*/
|
|
72
|
+
getResults(tenantId: string, benchmarkId: string): BenchmarkResults | null;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=benchmark-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"benchmark-store.d.ts","sourceRoot":"","sources":["../../src/db/benchmark-store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EACV,SAAS,EACT,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAGjB,MAAM,mBAAmB,CAAC;AA2C3B,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,SAAS,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACzC,QAAQ,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,GAAG,EAAE,MAAM,CAAC;QACZ,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,kCAAkC;AAClC,MAAM,WAAW,qBAAsB,SAAQ,SAAS;IACtD,QAAQ,EAAE,gBAAgB,EAAE,CAAC;CAC9B;AAiDD,qBAAa,cAAc;IACb,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ;IAEzC;;;OAGG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,GAAG,qBAAqB;IAsE5E;;OAEG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,qBAAqB,GAAG,IAAI;IAkBnE;;OAEG;IACH,IAAI,CACF,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,oBAAyB,GACjC;QAAE,UAAU,EAAE,qBAAqB,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;IAyCzD;;;OAGG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,GAAG,qBAAqB;IA0B7F;;;OAGG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO;IAc7C;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAqBnF;;OAEG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;CAgB3E"}
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Benchmark Store (Story 3.1)
|
|
3
|
+
*
|
|
4
|
+
* CRUD operations for benchmarks, variants, and cached results.
|
|
5
|
+
* All operations are tenant-isolated.
|
|
6
|
+
*/
|
|
7
|
+
import { randomUUID } from 'node:crypto';
|
|
8
|
+
import { sql } from 'drizzle-orm';
|
|
9
|
+
// ─── Valid Status Transitions ──────────────────────────────
|
|
10
|
+
const VALID_TRANSITIONS = {
|
|
11
|
+
draft: ['running', 'cancelled'],
|
|
12
|
+
running: ['completed', 'cancelled'],
|
|
13
|
+
completed: [],
|
|
14
|
+
cancelled: [],
|
|
15
|
+
};
|
|
16
|
+
// ─── Row Converters ────────────────────────────────────────
|
|
17
|
+
function rowToBenchmark(row) {
|
|
18
|
+
const benchmark = {
|
|
19
|
+
id: row.id,
|
|
20
|
+
tenantId: row.tenant_id,
|
|
21
|
+
name: row.name,
|
|
22
|
+
status: row.status,
|
|
23
|
+
metrics: JSON.parse(row.metrics),
|
|
24
|
+
minSessionsPerVariant: row.min_sessions_per_variant,
|
|
25
|
+
createdAt: row.created_at,
|
|
26
|
+
updatedAt: row.updated_at,
|
|
27
|
+
};
|
|
28
|
+
if (row.description)
|
|
29
|
+
benchmark.description = row.description;
|
|
30
|
+
if (row.agent_id)
|
|
31
|
+
benchmark.agentId = row.agent_id;
|
|
32
|
+
if (row.time_range_from && row.time_range_to) {
|
|
33
|
+
benchmark.timeRange = { from: row.time_range_from, to: row.time_range_to };
|
|
34
|
+
}
|
|
35
|
+
if (row.completed_at)
|
|
36
|
+
benchmark.completedAt = row.completed_at;
|
|
37
|
+
return benchmark;
|
|
38
|
+
}
|
|
39
|
+
function rowToVariant(row) {
|
|
40
|
+
const variant = {
|
|
41
|
+
id: row.id,
|
|
42
|
+
benchmarkId: row.benchmark_id,
|
|
43
|
+
tenantId: row.tenant_id,
|
|
44
|
+
name: row.name,
|
|
45
|
+
tag: row.tag,
|
|
46
|
+
sortOrder: row.sort_order,
|
|
47
|
+
};
|
|
48
|
+
if (row.description)
|
|
49
|
+
variant.description = row.description;
|
|
50
|
+
if (row.agent_id)
|
|
51
|
+
variant.agentId = row.agent_id;
|
|
52
|
+
return variant;
|
|
53
|
+
}
|
|
54
|
+
// ─── Store Class ───────────────────────────────────────────
|
|
55
|
+
export class BenchmarkStore {
|
|
56
|
+
db;
|
|
57
|
+
constructor(db) {
|
|
58
|
+
this.db = db;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Create a benchmark with variants in a single transaction.
|
|
62
|
+
* Validates 2-10 variants.
|
|
63
|
+
*/
|
|
64
|
+
create(tenantId, input) {
|
|
65
|
+
if (input.variants.length < 2 || input.variants.length > 10) {
|
|
66
|
+
throw new Error('Benchmark must have between 2 and 10 variants');
|
|
67
|
+
}
|
|
68
|
+
const benchmarkId = randomUUID();
|
|
69
|
+
const now = new Date().toISOString();
|
|
70
|
+
const metricsJson = JSON.stringify(input.metrics);
|
|
71
|
+
// Use transaction via raw SQLite (Drizzle wraps better-sqlite3)
|
|
72
|
+
const client = this.db.$client;
|
|
73
|
+
const txn = client.transaction(() => {
|
|
74
|
+
this.db.run(sql `
|
|
75
|
+
INSERT INTO benchmarks (id, tenant_id, name, description, status, agent_id, metrics, min_sessions_per_variant, time_range_from, time_range_to, created_at, updated_at)
|
|
76
|
+
VALUES (
|
|
77
|
+
${benchmarkId}, ${tenantId}, ${input.name}, ${input.description ?? null},
|
|
78
|
+
'draft', ${input.agentId ?? null}, ${metricsJson},
|
|
79
|
+
${input.minSessionsPerVariant ?? 10},
|
|
80
|
+
${input.timeRange?.from ?? null}, ${input.timeRange?.to ?? null},
|
|
81
|
+
${now}, ${now}
|
|
82
|
+
)
|
|
83
|
+
`);
|
|
84
|
+
const variants = [];
|
|
85
|
+
for (let i = 0; i < input.variants.length; i++) {
|
|
86
|
+
const v = input.variants[i];
|
|
87
|
+
const variantId = randomUUID();
|
|
88
|
+
this.db.run(sql `
|
|
89
|
+
INSERT INTO benchmark_variants (id, benchmark_id, tenant_id, name, description, tag, agent_id, sort_order)
|
|
90
|
+
VALUES (
|
|
91
|
+
${variantId}, ${benchmarkId}, ${tenantId}, ${v.name}, ${v.description ?? null},
|
|
92
|
+
${v.tag}, ${v.agentId ?? null}, ${i}
|
|
93
|
+
)
|
|
94
|
+
`);
|
|
95
|
+
const variant = {
|
|
96
|
+
id: variantId,
|
|
97
|
+
benchmarkId,
|
|
98
|
+
tenantId,
|
|
99
|
+
name: v.name,
|
|
100
|
+
tag: v.tag,
|
|
101
|
+
sortOrder: i,
|
|
102
|
+
};
|
|
103
|
+
if (v.description)
|
|
104
|
+
variant.description = v.description;
|
|
105
|
+
if (v.agentId)
|
|
106
|
+
variant.agentId = v.agentId;
|
|
107
|
+
variants.push(variant);
|
|
108
|
+
}
|
|
109
|
+
return variants;
|
|
110
|
+
});
|
|
111
|
+
const variants = txn();
|
|
112
|
+
const benchmark = {
|
|
113
|
+
id: benchmarkId,
|
|
114
|
+
tenantId,
|
|
115
|
+
name: input.name,
|
|
116
|
+
status: 'draft',
|
|
117
|
+
metrics: input.metrics,
|
|
118
|
+
minSessionsPerVariant: input.minSessionsPerVariant ?? 10,
|
|
119
|
+
createdAt: now,
|
|
120
|
+
updatedAt: now,
|
|
121
|
+
variants,
|
|
122
|
+
};
|
|
123
|
+
if (input.description)
|
|
124
|
+
benchmark.description = input.description;
|
|
125
|
+
if (input.agentId)
|
|
126
|
+
benchmark.agentId = input.agentId;
|
|
127
|
+
if (input.timeRange)
|
|
128
|
+
benchmark.timeRange = input.timeRange;
|
|
129
|
+
return benchmark;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Get a benchmark by ID with its variants. Returns null if not found.
|
|
133
|
+
*/
|
|
134
|
+
getById(tenantId, id) {
|
|
135
|
+
const row = this.db.get(sql `
|
|
136
|
+
SELECT * FROM benchmarks WHERE id = ${id} AND tenant_id = ${tenantId}
|
|
137
|
+
`);
|
|
138
|
+
if (!row)
|
|
139
|
+
return null;
|
|
140
|
+
const variantRows = this.db.all(sql `
|
|
141
|
+
SELECT * FROM benchmark_variants
|
|
142
|
+
WHERE benchmark_id = ${id} AND tenant_id = ${tenantId}
|
|
143
|
+
ORDER BY sort_order ASC
|
|
144
|
+
`);
|
|
145
|
+
return {
|
|
146
|
+
...rowToBenchmark(row),
|
|
147
|
+
variants: variantRows.map(rowToVariant),
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* List benchmarks with optional filters. Returns paginated results.
|
|
152
|
+
*/
|
|
153
|
+
list(tenantId, filters = {}) {
|
|
154
|
+
const { status, agentId, limit = 20, offset = 0 } = filters;
|
|
155
|
+
// Build WHERE conditions dynamically
|
|
156
|
+
let whereClause = sql `WHERE tenant_id = ${tenantId}`;
|
|
157
|
+
if (status) {
|
|
158
|
+
whereClause = sql `${whereClause} AND status = ${status}`;
|
|
159
|
+
}
|
|
160
|
+
if (agentId) {
|
|
161
|
+
whereClause = sql `${whereClause} AND agent_id = ${agentId}`;
|
|
162
|
+
}
|
|
163
|
+
// Get total count
|
|
164
|
+
const countRow = this.db.get(sql `
|
|
165
|
+
SELECT COUNT(*) as cnt FROM benchmarks ${whereClause}
|
|
166
|
+
`);
|
|
167
|
+
const total = countRow?.cnt ?? 0;
|
|
168
|
+
// Get paginated results
|
|
169
|
+
const rows = this.db.all(sql `
|
|
170
|
+
SELECT * FROM benchmarks ${whereClause}
|
|
171
|
+
ORDER BY created_at DESC
|
|
172
|
+
LIMIT ${limit} OFFSET ${offset}
|
|
173
|
+
`);
|
|
174
|
+
// Fetch variants for each benchmark
|
|
175
|
+
const benchmarks = rows.map((row) => {
|
|
176
|
+
const variantRows = this.db.all(sql `
|
|
177
|
+
SELECT * FROM benchmark_variants
|
|
178
|
+
WHERE benchmark_id = ${row.id} AND tenant_id = ${tenantId}
|
|
179
|
+
ORDER BY sort_order ASC
|
|
180
|
+
`);
|
|
181
|
+
return {
|
|
182
|
+
...rowToBenchmark(row),
|
|
183
|
+
variants: variantRows.map(rowToVariant),
|
|
184
|
+
};
|
|
185
|
+
});
|
|
186
|
+
return { benchmarks, total };
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Update benchmark status with transition validation.
|
|
190
|
+
* Sets completedAt when transitioning to 'completed'.
|
|
191
|
+
*/
|
|
192
|
+
updateStatus(tenantId, id, newStatus) {
|
|
193
|
+
const current = this.getById(tenantId, id);
|
|
194
|
+
if (!current) {
|
|
195
|
+
throw new Error(`Benchmark ${id} not found`);
|
|
196
|
+
}
|
|
197
|
+
const allowed = VALID_TRANSITIONS[current.status] ?? [];
|
|
198
|
+
if (!allowed.includes(newStatus)) {
|
|
199
|
+
throw new Error(`Invalid status transition: ${current.status} → ${newStatus}`);
|
|
200
|
+
}
|
|
201
|
+
const now = new Date().toISOString();
|
|
202
|
+
const completedAt = newStatus === 'completed' ? now : null;
|
|
203
|
+
this.db.run(sql `
|
|
204
|
+
UPDATE benchmarks
|
|
205
|
+
SET status = ${newStatus}, updated_at = ${now},
|
|
206
|
+
completed_at = COALESCE(${completedAt}, completed_at)
|
|
207
|
+
WHERE id = ${id} AND tenant_id = ${tenantId}
|
|
208
|
+
`);
|
|
209
|
+
return this.getById(tenantId, id);
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Delete a benchmark. Only draft/cancelled can be deleted.
|
|
213
|
+
* Returns true if deleted, false if the status doesn't allow deletion.
|
|
214
|
+
*/
|
|
215
|
+
delete(tenantId, id) {
|
|
216
|
+
const current = this.getById(tenantId, id);
|
|
217
|
+
if (!current)
|
|
218
|
+
return false;
|
|
219
|
+
if (current.status !== 'draft' && current.status !== 'cancelled') {
|
|
220
|
+
return false;
|
|
221
|
+
}
|
|
222
|
+
this.db.run(sql `
|
|
223
|
+
DELETE FROM benchmarks WHERE id = ${id} AND tenant_id = ${tenantId}
|
|
224
|
+
`);
|
|
225
|
+
return true;
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Upsert benchmark results (cached computation results).
|
|
229
|
+
*/
|
|
230
|
+
saveResults(tenantId, benchmarkId, results) {
|
|
231
|
+
const id = randomUUID();
|
|
232
|
+
const variantMetricsJson = JSON.stringify(results.variants);
|
|
233
|
+
const comparisonsJson = JSON.stringify(results.comparisons);
|
|
234
|
+
// Delete any existing results for this benchmark
|
|
235
|
+
this.db.run(sql `
|
|
236
|
+
DELETE FROM benchmark_results
|
|
237
|
+
WHERE benchmark_id = ${benchmarkId} AND tenant_id = ${tenantId}
|
|
238
|
+
`);
|
|
239
|
+
this.db.run(sql `
|
|
240
|
+
INSERT INTO benchmark_results (id, benchmark_id, tenant_id, variant_metrics, comparisons, summary, computed_at)
|
|
241
|
+
VALUES (
|
|
242
|
+
${id}, ${benchmarkId}, ${tenantId},
|
|
243
|
+
${variantMetricsJson}, ${comparisonsJson},
|
|
244
|
+
${results.summary ?? null}, ${results.computedAt}
|
|
245
|
+
)
|
|
246
|
+
`);
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Get cached results for a benchmark, or null if none.
|
|
250
|
+
*/
|
|
251
|
+
getResults(tenantId, benchmarkId) {
|
|
252
|
+
const row = this.db.get(sql `
|
|
253
|
+
SELECT * FROM benchmark_results
|
|
254
|
+
WHERE benchmark_id = ${benchmarkId} AND tenant_id = ${tenantId}
|
|
255
|
+
`);
|
|
256
|
+
if (!row)
|
|
257
|
+
return null;
|
|
258
|
+
return {
|
|
259
|
+
benchmarkId: row.benchmark_id,
|
|
260
|
+
tenantId: row.tenant_id,
|
|
261
|
+
variants: JSON.parse(row.variant_metrics),
|
|
262
|
+
comparisons: JSON.parse(row.comparisons),
|
|
263
|
+
summary: row.summary ?? '',
|
|
264
|
+
computedAt: row.computed_at,
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
//# sourceMappingURL=benchmark-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"benchmark-store.js","sourceRoot":"","sources":["../../src/db/benchmark-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Health Snapshot Store (Story 1.3)
|
|
3
|
+
*
|
|
4
|
+
* CRUD operations for the health_snapshots table with tenant isolation.
|
|
5
|
+
* Stores daily health score snapshots for historical tracking.
|
|
6
|
+
*/
|
|
7
|
+
import type { SqliteDb } from './index.js';
|
|
8
|
+
import type { HealthSnapshot } from '@agentlensai/core';
|
|
9
|
+
export declare class HealthSnapshotStore {
|
|
10
|
+
private readonly db;
|
|
11
|
+
constructor(db: SqliteDb);
|
|
12
|
+
/**
|
|
13
|
+
* Upsert a health snapshot (INSERT OR REPLACE by tenant_id + agent_id + date).
|
|
14
|
+
*/
|
|
15
|
+
save(tenantId: string, snapshot: HealthSnapshot): void;
|
|
16
|
+
/**
|
|
17
|
+
* Get a single snapshot by agent ID and date.
|
|
18
|
+
*/
|
|
19
|
+
get(tenantId: string, agentId: string, date: string): HealthSnapshot | null;
|
|
20
|
+
/**
|
|
21
|
+
* Get snapshot history for an agent, ordered by date DESC.
|
|
22
|
+
*/
|
|
23
|
+
getHistory(tenantId: string, agentId: string, days: number): HealthSnapshot[];
|
|
24
|
+
/**
|
|
25
|
+
* Get the latest snapshot for each agent in a tenant.
|
|
26
|
+
*/
|
|
27
|
+
getLatest(tenantId: string): Map<string, HealthSnapshot>;
|
|
28
|
+
/**
|
|
29
|
+
* Delete snapshots older than retention period.
|
|
30
|
+
*/
|
|
31
|
+
cleanup(tenantId: string, retentionDays: number): number;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=health-snapshot-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health-snapshot-store.d.ts","sourceRoot":"","sources":["../../src/db/health-snapshot-store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAiCxD,qBAAa,mBAAmB;IAClB,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ;IAEzC;;OAEG;IACH,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,IAAI;IAmBtD;;OAEG;IACH,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAW3E;;OAEG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,EAAE;IAgB7E;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC;IAoBxD;;OAEG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM;CAazD"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Health Snapshot Store (Story 1.3)
|
|
3
|
+
*
|
|
4
|
+
* CRUD operations for the health_snapshots table with tenant isolation.
|
|
5
|
+
* Stores daily health score snapshots for historical tracking.
|
|
6
|
+
*/
|
|
7
|
+
import { randomUUID } from 'node:crypto';
|
|
8
|
+
import { sql } from 'drizzle-orm';
|
|
9
|
+
/** Parse a DB row into a HealthSnapshot */
|
|
10
|
+
function rowToSnapshot(row) {
|
|
11
|
+
return {
|
|
12
|
+
agentId: row.agent_id,
|
|
13
|
+
date: row.date,
|
|
14
|
+
overallScore: row.overall_score,
|
|
15
|
+
errorRateScore: row.error_rate_score,
|
|
16
|
+
costEfficiencyScore: row.cost_efficiency_score,
|
|
17
|
+
toolSuccessScore: row.tool_success_score,
|
|
18
|
+
latencyScore: row.latency_score,
|
|
19
|
+
completionRateScore: row.completion_rate_score,
|
|
20
|
+
sessionCount: row.session_count,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export class HealthSnapshotStore {
|
|
24
|
+
db;
|
|
25
|
+
constructor(db) {
|
|
26
|
+
this.db = db;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Upsert a health snapshot (INSERT OR REPLACE by tenant_id + agent_id + date).
|
|
30
|
+
*/
|
|
31
|
+
save(tenantId, snapshot) {
|
|
32
|
+
const id = randomUUID();
|
|
33
|
+
const now = new Date().toISOString();
|
|
34
|
+
this.db.run(sql `
|
|
35
|
+
INSERT OR REPLACE INTO health_snapshots (
|
|
36
|
+
id, tenant_id, agent_id, date,
|
|
37
|
+
overall_score, error_rate_score, cost_efficiency_score,
|
|
38
|
+
tool_success_score, latency_score, completion_rate_score,
|
|
39
|
+
session_count, created_at
|
|
40
|
+
) VALUES (
|
|
41
|
+
${id}, ${tenantId}, ${snapshot.agentId}, ${snapshot.date},
|
|
42
|
+
${snapshot.overallScore}, ${snapshot.errorRateScore}, ${snapshot.costEfficiencyScore},
|
|
43
|
+
${snapshot.toolSuccessScore}, ${snapshot.latencyScore}, ${snapshot.completionRateScore},
|
|
44
|
+
${snapshot.sessionCount}, ${now}
|
|
45
|
+
)
|
|
46
|
+
`);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Get a single snapshot by agent ID and date.
|
|
50
|
+
*/
|
|
51
|
+
get(tenantId, agentId, date) {
|
|
52
|
+
const row = this.db.get(sql `
|
|
53
|
+
SELECT * FROM health_snapshots
|
|
54
|
+
WHERE tenant_id = ${tenantId}
|
|
55
|
+
AND agent_id = ${agentId}
|
|
56
|
+
AND date = ${date}
|
|
57
|
+
`);
|
|
58
|
+
return row ? rowToSnapshot(row) : null;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Get snapshot history for an agent, ordered by date DESC.
|
|
62
|
+
*/
|
|
63
|
+
getHistory(tenantId, agentId, days) {
|
|
64
|
+
const cutoff = new Date();
|
|
65
|
+
cutoff.setDate(cutoff.getDate() - days);
|
|
66
|
+
const cutoffDate = cutoff.toISOString().slice(0, 10);
|
|
67
|
+
const rows = this.db.all(sql `
|
|
68
|
+
SELECT * FROM health_snapshots
|
|
69
|
+
WHERE tenant_id = ${tenantId}
|
|
70
|
+
AND agent_id = ${agentId}
|
|
71
|
+
AND date >= ${cutoffDate}
|
|
72
|
+
ORDER BY date DESC
|
|
73
|
+
`);
|
|
74
|
+
return rows.map(rowToSnapshot);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Get the latest snapshot for each agent in a tenant.
|
|
78
|
+
*/
|
|
79
|
+
getLatest(tenantId) {
|
|
80
|
+
// Use a subquery to get the max date per agent
|
|
81
|
+
const rows = this.db.all(sql `
|
|
82
|
+
SELECT hs.* FROM health_snapshots hs
|
|
83
|
+
INNER JOIN (
|
|
84
|
+
SELECT agent_id, MAX(date) as max_date
|
|
85
|
+
FROM health_snapshots
|
|
86
|
+
WHERE tenant_id = ${tenantId}
|
|
87
|
+
GROUP BY agent_id
|
|
88
|
+
) latest ON hs.agent_id = latest.agent_id AND hs.date = latest.max_date
|
|
89
|
+
WHERE hs.tenant_id = ${tenantId}
|
|
90
|
+
`);
|
|
91
|
+
const result = new Map();
|
|
92
|
+
for (const row of rows) {
|
|
93
|
+
result.set(row.agent_id, rowToSnapshot(row));
|
|
94
|
+
}
|
|
95
|
+
return result;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Delete snapshots older than retention period.
|
|
99
|
+
*/
|
|
100
|
+
cleanup(tenantId, retentionDays) {
|
|
101
|
+
const cutoff = new Date();
|
|
102
|
+
cutoff.setDate(cutoff.getDate() - retentionDays);
|
|
103
|
+
const cutoffDate = cutoff.toISOString().slice(0, 10);
|
|
104
|
+
const result = this.db.run(sql `
|
|
105
|
+
DELETE FROM health_snapshots
|
|
106
|
+
WHERE tenant_id = ${tenantId}
|
|
107
|
+
AND date < ${cutoffDate}
|
|
108
|
+
`);
|
|
109
|
+
return result.changes;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=health-snapshot-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health-snapshot-store.js","sourceRoot":"","sources":["../../src/db/health-snapshot-store.ts"],"names":[],"mappings":"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"}
|
package/dist/db/migrate.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/db/migrate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/db/migrate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAgchD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,GAAG;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;CACtB,CAoBA"}
|
package/dist/db/migrate.js
CHANGED
|
@@ -350,6 +350,73 @@ export function runMigrations(db) {
|
|
|
350
350
|
}
|
|
351
351
|
// ─── Composite index for similarity search (M6) ──────────────────
|
|
352
352
|
db.run(sql `CREATE INDEX IF NOT EXISTS idx_embeddings_tenant_source_time ON embeddings(tenant_id, source_type, created_at)`);
|
|
353
|
+
// ─── Health Snapshots table (Epic 6 — Story 1.3) ──────────────────
|
|
354
|
+
db.run(sql `
|
|
355
|
+
CREATE TABLE IF NOT EXISTS health_snapshots (
|
|
356
|
+
id TEXT NOT NULL,
|
|
357
|
+
tenant_id TEXT NOT NULL,
|
|
358
|
+
agent_id TEXT NOT NULL,
|
|
359
|
+
date TEXT NOT NULL,
|
|
360
|
+
overall_score REAL NOT NULL,
|
|
361
|
+
error_rate_score REAL NOT NULL,
|
|
362
|
+
cost_efficiency_score REAL NOT NULL,
|
|
363
|
+
tool_success_score REAL NOT NULL,
|
|
364
|
+
latency_score REAL NOT NULL,
|
|
365
|
+
completion_rate_score REAL NOT NULL,
|
|
366
|
+
session_count INTEGER NOT NULL,
|
|
367
|
+
created_at TEXT NOT NULL,
|
|
368
|
+
PRIMARY KEY (tenant_id, agent_id, date)
|
|
369
|
+
)
|
|
370
|
+
`);
|
|
371
|
+
db.run(sql `CREATE INDEX IF NOT EXISTS idx_health_snapshots_agent ON health_snapshots(tenant_id, agent_id, date DESC)`);
|
|
372
|
+
// ─── Benchmark tables (v0.7.0 — Story 1.3) ──────────────────
|
|
373
|
+
db.run(sql `
|
|
374
|
+
CREATE TABLE IF NOT EXISTS benchmarks (
|
|
375
|
+
id TEXT PRIMARY KEY,
|
|
376
|
+
tenant_id TEXT NOT NULL,
|
|
377
|
+
name TEXT NOT NULL,
|
|
378
|
+
description TEXT,
|
|
379
|
+
status TEXT NOT NULL DEFAULT 'draft',
|
|
380
|
+
agent_id TEXT,
|
|
381
|
+
metrics TEXT NOT NULL DEFAULT '[]',
|
|
382
|
+
min_sessions_per_variant INTEGER NOT NULL DEFAULT 10,
|
|
383
|
+
time_range_from TEXT,
|
|
384
|
+
time_range_to TEXT,
|
|
385
|
+
created_at TEXT NOT NULL,
|
|
386
|
+
updated_at TEXT NOT NULL,
|
|
387
|
+
completed_at TEXT
|
|
388
|
+
)
|
|
389
|
+
`);
|
|
390
|
+
db.run(sql `
|
|
391
|
+
CREATE TABLE IF NOT EXISTS benchmark_variants (
|
|
392
|
+
id TEXT PRIMARY KEY,
|
|
393
|
+
benchmark_id TEXT NOT NULL REFERENCES benchmarks(id) ON DELETE CASCADE,
|
|
394
|
+
tenant_id TEXT NOT NULL,
|
|
395
|
+
name TEXT NOT NULL,
|
|
396
|
+
description TEXT,
|
|
397
|
+
tag TEXT NOT NULL,
|
|
398
|
+
agent_id TEXT,
|
|
399
|
+
sort_order INTEGER NOT NULL DEFAULT 0
|
|
400
|
+
)
|
|
401
|
+
`);
|
|
402
|
+
db.run(sql `
|
|
403
|
+
CREATE TABLE IF NOT EXISTS benchmark_results (
|
|
404
|
+
id TEXT PRIMARY KEY,
|
|
405
|
+
benchmark_id TEXT NOT NULL REFERENCES benchmarks(id) ON DELETE CASCADE,
|
|
406
|
+
tenant_id TEXT NOT NULL,
|
|
407
|
+
variant_metrics TEXT NOT NULL DEFAULT '[]',
|
|
408
|
+
comparisons TEXT NOT NULL DEFAULT '[]',
|
|
409
|
+
summary TEXT,
|
|
410
|
+
computed_at TEXT NOT NULL
|
|
411
|
+
)
|
|
412
|
+
`);
|
|
413
|
+
// Benchmark indexes
|
|
414
|
+
db.run(sql `CREATE INDEX IF NOT EXISTS idx_benchmarks_tenant_id ON benchmarks(tenant_id)`);
|
|
415
|
+
db.run(sql `CREATE INDEX IF NOT EXISTS idx_benchmarks_tenant_status ON benchmarks(tenant_id, status)`);
|
|
416
|
+
db.run(sql `CREATE INDEX IF NOT EXISTS idx_benchmark_variants_benchmark_id ON benchmark_variants(benchmark_id)`);
|
|
417
|
+
db.run(sql `CREATE INDEX IF NOT EXISTS idx_benchmark_variants_tenant_tag ON benchmark_variants(tenant_id, tag)`);
|
|
418
|
+
db.run(sql `CREATE INDEX IF NOT EXISTS idx_benchmark_results_benchmark_id ON benchmark_results(benchmark_id)`);
|
|
419
|
+
db.run(sql `CREATE INDEX IF NOT EXISTS idx_benchmark_results_tenant_id ON benchmark_results(tenant_id)`);
|
|
353
420
|
}
|
|
354
421
|
/**
|
|
355
422
|
* Verify that WAL mode is enabled.
|
package/dist/db/migrate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/db/migrate.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/db/migrate.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,6 +23,11 @@ export declare function safeJsonParse<T>(raw: string, fallback: T): T;
|
|
|
23
23
|
export declare class SqliteEventStore implements IEventStore {
|
|
24
24
|
private db;
|
|
25
25
|
constructor(db: SqliteDb);
|
|
26
|
+
/**
|
|
27
|
+
* Defense-in-depth: warn when a query method is called without tenantId.
|
|
28
|
+
* This helps catch missing tenant scoping in call chains.
|
|
29
|
+
*/
|
|
30
|
+
private warnIfNoTenant;
|
|
26
31
|
insertEvents(eventList: AgentLensEvent[]): Promise<void>;
|
|
27
32
|
private _handleSessionUpdate;
|
|
28
33
|
private _handleAgentUpsert;
|