@agentlensai/server 0.6.0 → 0.8.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/guardrail-store.d.ts +34 -0
- package/dist/db/guardrail-store.d.ts.map +1 -0
- package/dist/db/guardrail-store.js +221 -0
- package/dist/db/guardrail-store.js.map +1 -0
- package/dist/db/migrate.d.ts.map +1 -1
- package/dist/db/migrate.js +112 -0
- package/dist/db/migrate.js.map +1 -1
- package/dist/db/schema.sqlite.d.ts +58 -1
- package/dist/db/schema.sqlite.d.ts.map +1 -1
- package/dist/db/schema.sqlite.js +6 -0
- package/dist/db/schema.sqlite.js.map +1 -1
- package/dist/db/sqlite-store.d.ts +12 -0
- package/dist/db/sqlite-store.d.ts.map +1 -1
- package/dist/db/sqlite-store.js +47 -0
- package/dist/db/sqlite-store.js.map +1 -1
- package/dist/db/tenant-scoped-store.d.ts +1 -0
- package/dist/db/tenant-scoped-store.d.ts.map +1 -1
- package/dist/db/tenant-scoped-store.js +3 -0
- package/dist/db/tenant-scoped-store.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +32 -0
- package/dist/index.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/guardrails/actions.d.ts +28 -0
- package/dist/lib/guardrails/actions.d.ts.map +1 -0
- package/dist/lib/guardrails/actions.js +126 -0
- package/dist/lib/guardrails/actions.js.map +1 -0
- package/dist/lib/guardrails/conditions.d.ts +13 -0
- package/dist/lib/guardrails/conditions.d.ts.map +1 -0
- package/dist/lib/guardrails/conditions.js +188 -0
- package/dist/lib/guardrails/conditions.js.map +1 -0
- package/dist/lib/guardrails/engine.d.ts +24 -0
- package/dist/lib/guardrails/engine.d.ts.map +1 -0
- package/dist/lib/guardrails/engine.js +122 -0
- package/dist/lib/guardrails/engine.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/agents.d.ts +4 -3
- package/dist/routes/agents.d.ts.map +1 -1
- package/dist/routes/agents.js +37 -12
- package/dist/routes/agents.js.map +1 -1
- 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/guardrails.d.ts +18 -0
- package/dist/routes/guardrails.d.ts.map +1 -0
- package/dist/routes/guardrails.js +184 -0
- package/dist/routes/guardrails.js.map +1 -0
- 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/package.json +2 -2
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Replay REST Endpoint (Stories 2.2, 2.3)
|
|
3
|
+
*
|
|
4
|
+
* GET /api/sessions/:id/replay — Returns ReplayState for session replay UI.
|
|
5
|
+
*
|
|
6
|
+
* Supports pagination, event type filtering, and server-side LRU caching.
|
|
7
|
+
*/
|
|
8
|
+
import { Hono } from 'hono';
|
|
9
|
+
import { EVENT_TYPES } from '@agentlensai/core';
|
|
10
|
+
import { getTenantStore } from './tenant-helper.js';
|
|
11
|
+
import { ReplayBuilder } from '../lib/replay/builder.js';
|
|
12
|
+
// ─── LRU Cache (Story 2.3) ────────────────────────────────
|
|
13
|
+
const MAX_CACHE_SIZE = 100;
|
|
14
|
+
const CACHE_TTL_MS = 10 * 60 * 1000; // 10 minutes
|
|
15
|
+
const LLM_HISTORY_CAP = 50;
|
|
16
|
+
/** Simple Map-based LRU cache with TTL. Exported for testing. */
|
|
17
|
+
export const replayCache = new Map();
|
|
18
|
+
function cacheKey(tenantId, sessionId) {
|
|
19
|
+
return `${tenantId}:${sessionId}`;
|
|
20
|
+
}
|
|
21
|
+
function getCached(tenantId, sessionId) {
|
|
22
|
+
const key = cacheKey(tenantId, sessionId);
|
|
23
|
+
const entry = replayCache.get(key);
|
|
24
|
+
if (!entry)
|
|
25
|
+
return null;
|
|
26
|
+
// TTL check
|
|
27
|
+
if (Date.now() - entry.createdAt > CACHE_TTL_MS) {
|
|
28
|
+
replayCache.delete(key);
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
// Move to end (most-recently-used)
|
|
32
|
+
replayCache.delete(key);
|
|
33
|
+
replayCache.set(key, entry);
|
|
34
|
+
return entry.state;
|
|
35
|
+
}
|
|
36
|
+
function putCache(tenantId, sessionId, state) {
|
|
37
|
+
const key = cacheKey(tenantId, sessionId);
|
|
38
|
+
// Evict if at capacity (remove oldest = first entry)
|
|
39
|
+
if (replayCache.size >= MAX_CACHE_SIZE && !replayCache.has(key)) {
|
|
40
|
+
const firstKey = replayCache.keys().next().value;
|
|
41
|
+
if (firstKey !== undefined) {
|
|
42
|
+
replayCache.delete(firstKey);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
replayCache.set(key, { state, createdAt: Date.now() });
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Cap LLM history in context to the last N entries (memory guard).
|
|
49
|
+
*/
|
|
50
|
+
function capLlmHistory(state) {
|
|
51
|
+
for (const step of state.steps) {
|
|
52
|
+
if (step.context.llmHistory.length > LLM_HISTORY_CAP) {
|
|
53
|
+
step.context.llmHistory = step.context.llmHistory.slice(-LLM_HISTORY_CAP);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return state;
|
|
57
|
+
}
|
|
58
|
+
// ─── Route Registration ────────────────────────────────────
|
|
59
|
+
/**
|
|
60
|
+
* Register the replay route directly on the provided Hono app.
|
|
61
|
+
* Path: GET /api/sessions/:id/replay
|
|
62
|
+
*
|
|
63
|
+
* Uses `registerReplayRoutes(app, store)` pattern (like health routes)
|
|
64
|
+
* since the path nests under /api/sessions which already has auth middleware.
|
|
65
|
+
*/
|
|
66
|
+
export function registerReplayRoutes(app, store) {
|
|
67
|
+
app.get('/api/sessions/:id/replay', async (c) => {
|
|
68
|
+
const tenantStore = getTenantStore(store, c);
|
|
69
|
+
const sessionId = c.req.param('id');
|
|
70
|
+
// ── Parse & validate query params ──
|
|
71
|
+
// offset
|
|
72
|
+
const offsetStr = c.req.query('offset');
|
|
73
|
+
let offset = 0;
|
|
74
|
+
if (offsetStr !== undefined && offsetStr !== '') {
|
|
75
|
+
const parsed = parseInt(offsetStr, 10);
|
|
76
|
+
if (isNaN(parsed) || parsed < 0) {
|
|
77
|
+
return c.json({ error: 'Invalid offset: must be a non-negative integer', status: 400 }, 400);
|
|
78
|
+
}
|
|
79
|
+
offset = parsed;
|
|
80
|
+
}
|
|
81
|
+
// limit
|
|
82
|
+
const limitStr = c.req.query('limit');
|
|
83
|
+
let limit = 1000;
|
|
84
|
+
if (limitStr !== undefined && limitStr !== '') {
|
|
85
|
+
const parsed = parseInt(limitStr, 10);
|
|
86
|
+
if (isNaN(parsed) || parsed < 1 || parsed > 5000) {
|
|
87
|
+
return c.json({ error: 'Invalid limit: must be an integer between 1 and 5000', status: 400 }, 400);
|
|
88
|
+
}
|
|
89
|
+
limit = parsed;
|
|
90
|
+
}
|
|
91
|
+
// eventTypes
|
|
92
|
+
const eventTypesStr = c.req.query('eventTypes');
|
|
93
|
+
let eventTypes;
|
|
94
|
+
if (eventTypesStr !== undefined && eventTypesStr !== '') {
|
|
95
|
+
const types = eventTypesStr.split(',').map((s) => s.trim());
|
|
96
|
+
const validTypes = new Set(EVENT_TYPES);
|
|
97
|
+
for (const t of types) {
|
|
98
|
+
if (!validTypes.has(t)) {
|
|
99
|
+
return c.json({ error: `Invalid event type: ${t}`, status: 400 }, 400);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
eventTypes = types;
|
|
103
|
+
}
|
|
104
|
+
// includeContext
|
|
105
|
+
const includeContextStr = c.req.query('includeContext');
|
|
106
|
+
let includeContext = true;
|
|
107
|
+
if (includeContextStr !== undefined && includeContextStr !== '') {
|
|
108
|
+
if (includeContextStr === 'false' || includeContextStr === '0') {
|
|
109
|
+
includeContext = false;
|
|
110
|
+
}
|
|
111
|
+
else if (includeContextStr !== 'true' && includeContextStr !== '1') {
|
|
112
|
+
return c.json({ error: 'Invalid includeContext: must be true or false', status: 400 }, 400);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
try {
|
|
116
|
+
const builder = new ReplayBuilder(tenantStore);
|
|
117
|
+
const state = await builder.build(sessionId, {
|
|
118
|
+
offset,
|
|
119
|
+
limit,
|
|
120
|
+
eventTypes,
|
|
121
|
+
includeContext,
|
|
122
|
+
});
|
|
123
|
+
if (!state) {
|
|
124
|
+
return c.json({ error: 'Session not found', status: 404 }, 404);
|
|
125
|
+
}
|
|
126
|
+
// Apply memory guard: cap LLM history
|
|
127
|
+
capLlmHistory(state);
|
|
128
|
+
// Cache the state (LLM history has been capped for memory efficiency)
|
|
129
|
+
const apiKeyInfo = c.get('apiKey');
|
|
130
|
+
const tenantId = apiKeyInfo?.tenantId ?? 'default';
|
|
131
|
+
putCache(tenantId, sessionId, state);
|
|
132
|
+
return c.json(state);
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
const message = error instanceof Error ? error.message : 'Internal error';
|
|
136
|
+
return c.json({ error: message, status: 500 }, 500);
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=replay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replay.js","sourceRoot":"","sources":["../../src/routes/replay.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentlensai/server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "AgentLens API server — event ingestion, querying, dashboard, and alerting for AI agents",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"dev": "tsx watch src/index.ts"
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
|
-
"@agentlensai/core": "
|
|
48
|
+
"@agentlensai/core": "^0.8.0",
|
|
49
49
|
"drizzle-orm": "^0.44.2",
|
|
50
50
|
"better-sqlite3": "^11.9.1",
|
|
51
51
|
"hono": "^4.7.10",
|