@agentlensai/server 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/dist/db/health-snapshot-store.d.ts +33 -0
  2. package/dist/db/health-snapshot-store.d.ts.map +1 -0
  3. package/dist/db/health-snapshot-store.js +112 -0
  4. package/dist/db/health-snapshot-store.js.map +1 -0
  5. package/dist/db/migrate.d.ts.map +1 -1
  6. package/dist/db/migrate.js +19 -0
  7. package/dist/db/migrate.js.map +1 -1
  8. package/dist/db/sqlite-store.d.ts +5 -0
  9. package/dist/db/sqlite-store.d.ts.map +1 -1
  10. package/dist/db/sqlite-store.js +15 -0
  11. package/dist/db/sqlite-store.js.map +1 -1
  12. package/dist/index.d.ts +2 -0
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +13 -1
  15. package/dist/index.js.map +1 -1
  16. package/dist/lib/alert-engine.d.ts.map +1 -1
  17. package/dist/lib/alert-engine.js +5 -2
  18. package/dist/lib/alert-engine.js.map +1 -1
  19. package/dist/lib/analysis/cost-analysis.d.ts.map +1 -1
  20. package/dist/lib/analysis/cost-analysis.js +5 -2
  21. package/dist/lib/analysis/cost-analysis.js.map +1 -1
  22. package/dist/lib/analysis/error-patterns.d.ts.map +1 -1
  23. package/dist/lib/analysis/error-patterns.js +5 -2
  24. package/dist/lib/analysis/error-patterns.js.map +1 -1
  25. package/dist/lib/analysis/performance-trends.d.ts.map +1 -1
  26. package/dist/lib/analysis/performance-trends.js +4 -1
  27. package/dist/lib/analysis/performance-trends.js.map +1 -1
  28. package/dist/lib/analysis/tool-sequences.d.ts.map +1 -1
  29. package/dist/lib/analysis/tool-sequences.js +5 -2
  30. package/dist/lib/analysis/tool-sequences.js.map +1 -1
  31. package/dist/lib/context/retrieval.d.ts +4 -0
  32. package/dist/lib/context/retrieval.d.ts.map +1 -1
  33. package/dist/lib/context/retrieval.js +4 -0
  34. package/dist/lib/context/retrieval.js.map +1 -1
  35. package/dist/lib/embeddings/local.js +2 -2
  36. package/dist/lib/embeddings/local.js.map +1 -1
  37. package/dist/lib/health/computer.d.ts +28 -0
  38. package/dist/lib/health/computer.d.ts.map +1 -0
  39. package/dist/lib/health/computer.js +270 -0
  40. package/dist/lib/health/computer.js.map +1 -0
  41. package/dist/lib/optimization/classifier.d.ts +34 -0
  42. package/dist/lib/optimization/classifier.d.ts.map +1 -0
  43. package/dist/lib/optimization/classifier.js +108 -0
  44. package/dist/lib/optimization/classifier.js.map +1 -0
  45. package/dist/lib/optimization/engine.d.ts +24 -0
  46. package/dist/lib/optimization/engine.d.ts.map +1 -0
  47. package/dist/lib/optimization/engine.js +202 -0
  48. package/dist/lib/optimization/engine.js.map +1 -0
  49. package/dist/lib/optimization/index.d.ts +10 -0
  50. package/dist/lib/optimization/index.d.ts.map +1 -0
  51. package/dist/lib/optimization/index.js +9 -0
  52. package/dist/lib/optimization/index.js.map +1 -0
  53. package/dist/routes/health.d.ts +21 -0
  54. package/dist/routes/health.d.ts.map +1 -0
  55. package/dist/routes/health.js +142 -0
  56. package/dist/routes/health.js.map +1 -0
  57. package/dist/routes/optimize.d.ts +15 -0
  58. package/dist/routes/optimize.d.ts.map +1 -0
  59. package/dist/routes/optimize.js +55 -0
  60. package/dist/routes/optimize.js.map +1 -0
  61. package/dist/routes/recall.d.ts +2 -0
  62. package/dist/routes/recall.d.ts.map +1 -1
  63. package/dist/routes/recall.js +21 -1
  64. package/dist/routes/recall.js.map +1 -1
  65. package/dist/routes/reflect.d.ts.map +1 -1
  66. package/dist/routes/reflect.js +0 -1
  67. package/dist/routes/reflect.js.map +1 -1
  68. package/dist/routes/tenant-helper.d.ts.map +1 -1
  69. package/dist/routes/tenant-helper.js +12 -0
  70. package/dist/routes/tenant-helper.js.map +1 -1
  71. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../src/lib/optimization/engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Cost Optimization Module (Stories 2.2 & 2.3)
3
+ *
4
+ * Provides complexity classification and model recommendation
5
+ * for cost optimization of LLM calls.
6
+ */
7
+ export { classifyCallComplexity } from './classifier.js';
8
+ export type { ClassificationSignals, ClassificationResult } from './classifier.js';
9
+ export { OptimizationEngine } from './engine.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/optimization/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,YAAY,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEnF,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Cost Optimization Module (Stories 2.2 & 2.3)
3
+ *
4
+ * Provides complexity classification and model recommendation
5
+ * for cost optimization of LLM calls.
6
+ */
7
+ export { classifyCallComplexity } from './classifier.js';
8
+ export { OptimizationEngine } from './engine.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/optimization/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAGzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Health REST Endpoints (Story 1.4)
3
+ *
4
+ * GET /api/agents/:id/health?window=7 — Single agent health score
5
+ * GET /api/health/overview?window=7 — All agents overview
6
+ * GET /api/health/history?agentId=X&days=30 — Snapshot history
7
+ * GET /api/config/health-weights — Current health weights
8
+ * PUT /api/config/health-weights — Update weights (501 placeholder)
9
+ */
10
+ import { Hono } from 'hono';
11
+ import type { IEventStore } from '@agentlensai/core';
12
+ import type { AuthVariables } from '../middleware/auth.js';
13
+ import type { SqliteDb } from '../db/index.js';
14
+ /**
15
+ * Register all health-related routes directly on the provided Hono app.
16
+ * Call this from index.ts passing the main app.
17
+ */
18
+ export declare function registerHealthRoutes(app: Hono<{
19
+ Variables: AuthVariables;
20
+ }>, store: IEventStore, db?: SqliteDb): void;
21
+ //# sourceMappingURL=health.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/routes/health.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAI3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAsB/C;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,IAAI,CAAC;IAAE,SAAS,EAAE,aAAa,CAAA;CAAE,CAAC,EACvC,KAAK,EAAE,WAAW,EAClB,EAAE,CAAC,EAAE,QAAQ,GACZ,IAAI,CA4IN"}
@@ -0,0 +1,142 @@
1
+ /**
2
+ * Health REST Endpoints (Story 1.4)
3
+ *
4
+ * GET /api/agents/:id/health?window=7 — Single agent health score
5
+ * GET /api/health/overview?window=7 — All agents overview
6
+ * GET /api/health/history?agentId=X&days=30 — Snapshot history
7
+ * GET /api/config/health-weights — Current health weights
8
+ * PUT /api/config/health-weights — Update weights (501 placeholder)
9
+ */
10
+ import { Hono } from 'hono';
11
+ import { DEFAULT_HEALTH_WEIGHTS, HealthWeightsSchema as WeightsSchema } from '@agentlensai/core';
12
+ import { getTenantStore } from './tenant-helper.js';
13
+ import { HealthComputer } from '../lib/health/computer.js';
14
+ import { HealthSnapshotStore } from '../db/health-snapshot-store.js';
15
+ /** Parse and validate `window` query param (integer 1-90, default 7) */
16
+ function parseWindow(raw) {
17
+ if (raw === undefined || raw === '')
18
+ return 7;
19
+ const val = parseInt(raw, 10);
20
+ if (isNaN(val) || val < 1 || val > 90) {
21
+ return { error: 'window must be an integer between 1 and 90' };
22
+ }
23
+ return val;
24
+ }
25
+ /** Parse and validate `days` query param (integer 1-365, default 30) */
26
+ function parseDays(raw) {
27
+ if (raw === undefined || raw === '')
28
+ return 30;
29
+ const val = parseInt(raw, 10);
30
+ if (isNaN(val) || val < 1 || val > 365) {
31
+ return { error: 'days must be an integer between 1 and 365' };
32
+ }
33
+ return val;
34
+ }
35
+ /**
36
+ * Register all health-related routes directly on the provided Hono app.
37
+ * Call this from index.ts passing the main app.
38
+ */
39
+ export function registerHealthRoutes(app, store, db) {
40
+ const snapshotStore = db ? new HealthSnapshotStore(db) : null;
41
+ // ─── GET /api/agents/:id/health ───────────────────────
42
+ app.get('/api/agents/:id/health', async (c) => {
43
+ const tenantStore = getTenantStore(store, c);
44
+ const agentId = c.req.param('id');
45
+ const window = parseWindow(c.req.query('window'));
46
+ if (typeof window === 'object') {
47
+ return c.json({ error: window.error, status: 400 }, 400);
48
+ }
49
+ try {
50
+ const computer = new HealthComputer(DEFAULT_HEALTH_WEIGHTS);
51
+ const score = await computer.compute(tenantStore, agentId, window);
52
+ if (!score) {
53
+ return c.json({ error: 'No sessions found for agent in window' }, 404);
54
+ }
55
+ // Lazy snapshot: save if first query of the day
56
+ if (snapshotStore) {
57
+ const apiKeyInfo = c.get('apiKey');
58
+ const tenantId = apiKeyInfo?.tenantId ?? 'default';
59
+ const today = new Date().toISOString().slice(0, 10);
60
+ const existing = snapshotStore.get(tenantId, agentId, today);
61
+ if (!existing) {
62
+ const dim = (name) => score.dimensions.find((d) => d.name === name)?.score ?? 0;
63
+ snapshotStore.save(tenantId, {
64
+ agentId,
65
+ date: today,
66
+ overallScore: score.overallScore,
67
+ errorRateScore: dim('error_rate'),
68
+ costEfficiencyScore: dim('cost_efficiency'),
69
+ toolSuccessScore: dim('tool_success'),
70
+ latencyScore: dim('latency'),
71
+ completionRateScore: dim('completion_rate'),
72
+ sessionCount: score.sessionCount,
73
+ });
74
+ }
75
+ }
76
+ return c.json(score);
77
+ }
78
+ catch (error) {
79
+ const message = error instanceof Error ? error.message : 'Internal error';
80
+ return c.json({ error: message, status: 500 }, 500);
81
+ }
82
+ });
83
+ // ─── GET /api/health/overview ─────────────────────────
84
+ app.get('/api/health/overview', async (c) => {
85
+ const tenantStore = getTenantStore(store, c);
86
+ const window = parseWindow(c.req.query('window'));
87
+ if (typeof window === 'object') {
88
+ return c.json({ error: window.error, status: 400 }, 400);
89
+ }
90
+ try {
91
+ const computer = new HealthComputer(DEFAULT_HEALTH_WEIGHTS);
92
+ const agents = await computer.computeOverview(tenantStore, window);
93
+ return c.json({
94
+ agents,
95
+ computedAt: new Date().toISOString(),
96
+ });
97
+ }
98
+ catch (error) {
99
+ const message = error instanceof Error ? error.message : 'Internal error';
100
+ return c.json({ error: message, status: 500 }, 500);
101
+ }
102
+ });
103
+ // ─── GET /api/health/history ──────────────────────────
104
+ app.get('/api/health/history', async (c) => {
105
+ const agentId = c.req.query('agentId');
106
+ if (!agentId) {
107
+ return c.json({ error: 'Missing required query parameter: agentId', status: 400 }, 400);
108
+ }
109
+ const days = parseDays(c.req.query('days'));
110
+ if (typeof days === 'object') {
111
+ return c.json({ error: days.error, status: 400 }, 400);
112
+ }
113
+ if (!snapshotStore) {
114
+ return c.json({ error: 'Snapshot store not available', status: 500 }, 500);
115
+ }
116
+ const apiKeyInfo = c.get('apiKey');
117
+ const tenantId = apiKeyInfo?.tenantId ?? 'default';
118
+ const snapshots = snapshotStore.getHistory(tenantId, agentId, days);
119
+ return c.json({ snapshots, agentId, days });
120
+ });
121
+ // ─── GET /api/config/health-weights ───────────────────
122
+ app.get('/api/config/health-weights', async (c) => {
123
+ return c.json(DEFAULT_HEALTH_WEIGHTS);
124
+ });
125
+ // ─── PUT /api/config/health-weights ───────────────────
126
+ app.put('/api/config/health-weights', async (c) => {
127
+ const rawBody = await c.req.json().catch(() => null);
128
+ if (!rawBody) {
129
+ return c.json({ error: 'Invalid JSON body', status: 400 }, 400);
130
+ }
131
+ // Validate with schema
132
+ const result = WeightsSchema.safeParse(rawBody);
133
+ if (!result.success) {
134
+ return c.json({
135
+ error: result.error.issues.map((i) => i.message).join('; '),
136
+ status: 400,
137
+ }, 400);
138
+ }
139
+ return c.json({ error: 'Weight customization coming in a future release', status: 501 }, 501);
140
+ });
141
+ }
142
+ //# sourceMappingURL=health.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/routes/health.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Optimize REST Endpoint (Story 2.4)
3
+ *
4
+ * GET /api/optimize/recommendations?agentId=X&period=7&limit=10
5
+ *
6
+ * Returns cost optimization recommendations based on LLM call patterns.
7
+ * Requires auth (tenant-scoped).
8
+ */
9
+ import { Hono } from 'hono';
10
+ import type { IEventStore } from '@agentlensai/core';
11
+ import type { AuthVariables } from '../middleware/auth.js';
12
+ export declare function optimizeRoutes(store: IEventStore): Hono<{
13
+ Variables: AuthVariables;
14
+ }, import("hono/types").BlankSchema, "/">;
15
+ //# sourceMappingURL=optimize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optimize.d.ts","sourceRoot":"","sources":["../../src/routes/optimize.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAI3D,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW;eACb,aAAa;0CAqDhD"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Optimize REST Endpoint (Story 2.4)
3
+ *
4
+ * GET /api/optimize/recommendations?agentId=X&period=7&limit=10
5
+ *
6
+ * Returns cost optimization recommendations based on LLM call patterns.
7
+ * Requires auth (tenant-scoped).
8
+ */
9
+ import { Hono } from 'hono';
10
+ import { getTenantStore } from './tenant-helper.js';
11
+ import { OptimizationEngine } from '../lib/optimization/index.js';
12
+ export function optimizeRoutes(store) {
13
+ const app = new Hono();
14
+ // GET /api/optimize/recommendations
15
+ app.get('/recommendations', async (c) => {
16
+ const tenantStore = getTenantStore(store, c);
17
+ // Parse and validate query params
18
+ const agentId = c.req.query('agentId') || undefined;
19
+ const periodStr = c.req.query('period');
20
+ const limitStr = c.req.query('limit');
21
+ // period: integer 1-90, default 7
22
+ let period = 7;
23
+ if (periodStr !== undefined && periodStr !== '') {
24
+ const parsed = parseInt(periodStr, 10);
25
+ if (isNaN(parsed) || parsed < 1 || parsed > 90) {
26
+ return c.json({ error: 'Invalid period: must be an integer between 1 and 90', status: 400 }, 400);
27
+ }
28
+ period = parsed;
29
+ }
30
+ // limit: integer 1-50, default 10
31
+ let limit = 10;
32
+ if (limitStr !== undefined && limitStr !== '') {
33
+ const parsed = parseInt(limitStr, 10);
34
+ if (isNaN(parsed) || parsed < 1 || parsed > 50) {
35
+ return c.json({ error: 'Invalid limit: must be an integer between 1 and 50', status: 400 }, 400);
36
+ }
37
+ limit = parsed;
38
+ }
39
+ try {
40
+ const engine = new OptimizationEngine();
41
+ const result = await engine.getRecommendations(tenantStore, {
42
+ agentId,
43
+ period,
44
+ limit,
45
+ });
46
+ return c.json(result);
47
+ }
48
+ catch (error) {
49
+ const message = error instanceof Error ? error.message : 'Internal error';
50
+ return c.json({ error: message, status: 500 }, 500);
51
+ }
52
+ });
53
+ return app;
54
+ }
55
+ //# sourceMappingURL=optimize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optimize.js","sourceRoot":"","sources":["../../src/routes/optimize.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAElE,MAAM,UAAU,cAAc,CAAC,KAAkB;IAC/C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAgC,CAAC;IAErD,oCAAoC;IACpC,GAAG,CAAC,GAAG,CAAC,kBAAkB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACtC,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAE7C,kCAAkC;QAClC,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC;QACpD,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAEtC,kCAAkC;QAClC,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,EAAE,EAAE,CAAC;YAChD,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YACvC,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,EAAE,EAAE,CAAC;gBAC/C,OAAO,CAAC,CAAC,IAAI,CACX,EAAE,KAAK,EAAE,qDAAqD,EAAE,MAAM,EAAE,GAAG,EAAE,EAC7E,GAAG,CACJ,CAAC;YACJ,CAAC;YACD,MAAM,GAAG,MAAM,CAAC;QAClB,CAAC;QAED,kCAAkC;QAClC,IAAI,KAAK,GAAG,EAAE,CAAC;QACf,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,EAAE,EAAE,CAAC;YAC9C,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YACtC,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,EAAE,EAAE,CAAC;gBAC/C,OAAO,CAAC,CAAC,IAAI,CACX,EAAE,KAAK,EAAE,oDAAoD,EAAE,MAAM,EAAE,GAAG,EAAE,EAC5E,GAAG,CACJ,CAAC;YACJ,CAAC;YACD,KAAK,GAAG,MAAM,CAAC;QACjB,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,kBAAkB,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,WAAW,EAAE;gBAC1D,OAAO;gBACP,MAAM;gBACN,KAAK;aACN,CAAC,CAAC;YAEH,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC;YAC1E,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC;QACtD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -7,12 +7,14 @@
7
7
  * and returns enriched results.
8
8
  */
9
9
  import { Hono } from 'hono';
10
+ import type { IEventStore } from '@agentlensai/core';
10
11
  import type { AuthVariables } from '../middleware/auth.js';
11
12
  import type { EmbeddingService } from '../lib/embeddings/index.js';
12
13
  import type { EmbeddingStore } from '../db/embedding-store.js';
13
14
  export interface RecallRouteDeps {
14
15
  embeddingService: EmbeddingService | null;
15
16
  embeddingStore: EmbeddingStore | null;
17
+ eventStore?: IEventStore;
16
18
  }
17
19
  export declare function recallRoutes(deps: RecallRouteDeps): Hono<{
18
20
  Variables: AuthVariables;
@@ -1 +1 @@
1
- {"version":3,"file":"recall.d.ts","sourceRoot":"","sources":["../../src/routes/recall.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAA2B,MAAM,0BAA0B,CAAC;AAExF,MAAM,WAAW,eAAe;IAC9B,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC1C,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;CACvC;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,eAAe;eACd,aAAa;0CAgFhD"}
1
+ {"version":3,"file":"recall.d.ts","sourceRoot":"","sources":["../../src/routes/recall.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAA2B,MAAM,0BAA0B,CAAC;AAExF,MAAM,WAAW,eAAe;IAC9B,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC1C,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;IACtC,UAAU,CAAC,EAAE,WAAW,CAAC;CAC1B;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,eAAe;eACd,aAAa;0CAsGhD"}
@@ -20,6 +20,7 @@ export function recallRoutes(deps) {
20
20
  return c.json({ error: 'query parameter is required', status: 400 }, 400);
21
21
  }
22
22
  const scope = c.req.query('scope'); // 'events' | 'sessions' | 'lessons' | 'all'
23
+ const agentId = c.req.query('agentId');
23
24
  const limitStr = c.req.query('limit');
24
25
  const minScoreStr = c.req.query('minScore');
25
26
  const from = c.req.query('from');
@@ -45,7 +46,26 @@ export function recallRoutes(deps) {
45
46
  limit,
46
47
  minScore,
47
48
  };
48
- const results = await embeddingStore.similaritySearch(tenantId, queryVector, searchOpts);
49
+ let results = await embeddingStore.similaritySearch(tenantId, queryVector, searchOpts);
50
+ // Post-hoc agentId filter: if agentId is specified, keep only results
51
+ // whose source session belongs to that agent.
52
+ if (agentId && deps.eventStore) {
53
+ const filtered = [];
54
+ for (const r of results) {
55
+ // For session-scoped embeddings, sourceId is the sessionId
56
+ if (r.sourceType === 'session' || r.sourceType === 'event') {
57
+ const session = await deps.eventStore.getSession(r.sourceType === 'session' ? r.sourceId : r.sourceId);
58
+ if (session && session.agentId === agentId) {
59
+ filtered.push(r);
60
+ }
61
+ }
62
+ else {
63
+ // Lessons and other types don't have agentId — include them
64
+ filtered.push(r);
65
+ }
66
+ }
67
+ results = filtered;
68
+ }
49
69
  return c.json({
50
70
  results: results.map((r) => ({
51
71
  sourceType: r.sourceType,
@@ -1 +1 @@
1
- {"version":3,"file":"recall.js","sourceRoot":"","sources":["../../src/routes/recall.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"recall.js","sourceRoot":"","sources":["../../src/routes/recall.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"reflect.d.ts","sourceRoot":"","sources":["../../src/routes/reflect.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAY3D,wBAAgB,aAAa,CAAC,KAAK,EAAE,WAAW;eACZ,aAAa;0CA8ChD"}
1
+ {"version":3,"file":"reflect.d.ts","sourceRoot":"","sources":["../../src/routes/reflect.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAW3D,wBAAgB,aAAa,CAAC,KAAK,EAAE,WAAW;eACZ,aAAa;0CA8ChD"}
@@ -14,7 +14,6 @@ const VALID_ANALYSES = [
14
14
  'tool_sequences',
15
15
  'cost_analysis',
16
16
  'performance_trends',
17
- 'session_comparison',
18
17
  ];
19
18
  export function reflectRoutes(store) {
20
19
  const app = new Hono();
@@ -1 +1 @@
1
- {"version":3,"file":"reflect.js","sourceRoot":"","sources":["../../src/routes/reflect.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,MAAM,cAAc,GAAG;IACrB,gBAAgB;IAChB,gBAAgB;IAChB,eAAe;IACf,oBAAoB;IACpB,oBAAoB;CACrB,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,KAAkB;IAC9C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAgC,CAAC;IAErD,mBAAmB;IACnB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACvB,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAE7C,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACzC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,CAAC,CAAC,IAAI,CACX,EAAE,KAAK,EAAE,4CAA4C,EAAE,MAAM,EAAE,GAAG,EAAE,EACpE,GAAG,CACJ,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvC,OAAO,CAAC,CAAC,IAAI,CACX;gBACE,KAAK,EAAE,0BAA0B,QAAQ,qBAAqB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACzF,MAAM,EAAE,GAAG;aACZ,EACD,GAAG,CACJ,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC;QACpD,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC;QAC9C,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC;QAC1C,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAE5D,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,QAAQ,EAAE,WAAW,EAAE;gBACtD,OAAO;gBACP,IAAI;gBACJ,EAAE;gBACF,KAAK;aACN,CAAC,CAAC;YAEH,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC;YAC1E,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC;QACtD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"reflect.js","sourceRoot":"","sources":["../../src/routes/reflect.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,MAAM,cAAc,GAAG;IACrB,gBAAgB;IAChB,gBAAgB;IAChB,eAAe;IACf,oBAAoB;CACrB,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,KAAkB;IAC9C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAgC,CAAC;IAErD,mBAAmB;IACnB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACvB,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAE7C,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACzC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,CAAC,CAAC,IAAI,CACX,EAAE,KAAK,EAAE,4CAA4C,EAAE,MAAM,EAAE,GAAG,EAAE,EACpE,GAAG,CACJ,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvC,OAAO,CAAC,CAAC,IAAI,CACX;gBACE,KAAK,EAAE,0BAA0B,QAAQ,qBAAqB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACzF,MAAM,EAAE,GAAG;aACZ,EACD,GAAG,CACJ,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC;QACpD,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC;QAC9C,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC;QAC1C,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAE5D,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,QAAQ,EAAE,WAAW,EAAE;gBACtD,OAAO;gBACP,IAAI;gBACJ,EAAE;gBACF,KAAK;aACN,CAAC,CAAC;YAEH,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC;YAC1E,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC;QACtD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"tenant-helper.d.ts","sourceRoot":"","sources":["../../src/routes/tenant-helper.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAI3D;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,WAAW,EAClB,CAAC,EAAE,OAAO,CAAC;IAAE,SAAS,EAAE,aAAa,CAAA;CAAE,CAAC,GACvC,WAAW,CAMb"}
1
+ {"version":3,"file":"tenant-helper.d.ts","sourceRoot":"","sources":["../../src/routes/tenant-helper.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAI3D;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,WAAW,EAClB,CAAC,EAAE,OAAO,CAAC;IAAE,SAAS,EAAE,aAAa,CAAA;CAAE,CAAC,GACvC,WAAW,CAuBb"}
@@ -18,6 +18,18 @@ export function getTenantStore(store, c) {
18
18
  if (apiKeyInfo?.tenantId && store instanceof SqliteEventStore) {
19
19
  return new TenantScopedStore(store, apiKeyInfo.tenantId);
20
20
  }
21
+ // If auth provided a tenantId but the store isn't SqliteEventStore,
22
+ // tenant isolation cannot be applied — warn or reject.
23
+ if (apiKeyInfo?.tenantId && !(store instanceof SqliteEventStore)) {
24
+ const isTest = process.env['NODE_ENV'] === 'test' || process.env['VITEST'];
25
+ if (isTest) {
26
+ console.warn(`[tenant-helper] Store is not SqliteEventStore; tenant isolation skipped for tenant "${apiKeyInfo.tenantId}".`);
27
+ }
28
+ else {
29
+ throw new Error(`Tenant isolation requires SqliteEventStore but got ${store.constructor.name}. ` +
30
+ `Cannot safely scope data for tenant "${apiKeyInfo.tenantId}".`);
31
+ }
32
+ }
21
33
  return store;
22
34
  }
23
35
  //# sourceMappingURL=tenant-helper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tenant-helper.js","sourceRoot":"","sources":["../../src/routes/tenant-helper.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEjE;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAC5B,KAAkB,EAClB,CAAwC;IAExC,MAAM,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,UAAU,EAAE,QAAQ,IAAI,KAAK,YAAY,gBAAgB,EAAE,CAAC;QAC9D,OAAO,IAAI,iBAAiB,CAAC,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"tenant-helper.js","sourceRoot":"","sources":["../../src/routes/tenant-helper.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEjE;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAC5B,KAAkB,EAClB,CAAwC;IAExC,MAAM,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,UAAU,EAAE,QAAQ,IAAI,KAAK,YAAY,gBAAgB,EAAE,CAAC;QAC9D,OAAO,IAAI,iBAAiB,CAAC,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC3D,CAAC;IAED,oEAAoE;IACpE,uDAAuD;IACvD,IAAI,UAAU,EAAE,QAAQ,IAAI,CAAC,CAAC,KAAK,YAAY,gBAAgB,CAAC,EAAE,CAAC;QACjE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC3E,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CACV,uFAAuF,UAAU,CAAC,QAAQ,IAAI,CAC/G,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CACb,sDAAsD,KAAK,CAAC,WAAW,CAAC,IAAI,IAAI;gBAC9E,wCAAwC,UAAU,CAAC,QAAQ,IAAI,CAClE,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentlensai/server",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
4
  "description": "AgentLens API server — event ingestion, querying, dashboard, and alerting for AI agents",
5
5
  "type": "module",
6
6
  "license": "MIT",