@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.
- 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 +19 -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 +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -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/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/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/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 +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"}
|
package/dist/routes/recall.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/routes/recall.js
CHANGED
|
@@ -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
|
-
|
|
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":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"recall.js","sourceRoot":"","sources":["../../src/routes/recall.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAY5B,MAAM,UAAU,YAAY,CAAC,IAAqB;IAChD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAgC,CAAC;IAErD,yFAAyF;IACzF,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACvB,MAAM,EAAE,gBAAgB,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;QAElD,IAAI,CAAC,gBAAgB,IAAI,CAAC,cAAc,EAAE,CAAC;YACzC,OAAO,CAAC,CAAC,IAAI,CACX,EAAE,KAAK,EAAE,kCAAkC,EAAE,MAAM,EAAE,GAAG,EAAE,EAC1D,GAAG,CACJ,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,6BAA6B,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC;QAC5E,CAAC;QAED,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,4CAA4C;QAChF,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE7B,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvF,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE1F,iCAAiC;QACjC,MAAM,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACnC,MAAM,QAAQ,GAAG,UAAU,EAAE,QAAQ,IAAI,SAAS,CAAC;QAEnD,IAAI,CAAC;YACH,uBAAuB;YACvB,MAAM,WAAW,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAExD,wCAAwC;YACxC,IAAI,UAA8B,CAAC;YACnC,IAAI,KAAK,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;gBAC7B,iFAAiF;gBACjF,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACvC,CAAC;YAED,MAAM,UAAU,GAA4B;gBAC1C,UAAU;gBACV,IAAI,EAAE,IAAI,IAAI,SAAS;gBACvB,EAAE,EAAE,EAAE,IAAI,SAAS;gBACnB,KAAK;gBACL,QAAQ;aACT,CAAC;YAEF,IAAI,OAAO,GAAG,MAAM,cAAc,CAAC,gBAAgB,CACjD,QAAQ,EACR,WAAW,EACX,UAAU,CACX,CAAC;YAEF,sEAAsE;YACtE,8CAA8C;YAC9C,IAAI,OAAO,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC/B,MAAM,QAAQ,GAAG,EAAE,CAAC;gBACpB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;oBACxB,2DAA2D;oBAC3D,IAAI,CAAC,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,CAAC,UAAU,KAAK,OAAO,EAAE,CAAC;wBAC3D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,CAC9C,CAAC,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CACrD,CAAC;wBACF,IAAI,OAAO,IAAI,OAAO,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;4BAC3C,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBACnB,CAAC;oBACH,CAAC;yBAAM,CAAC;wBACN,4DAA4D;wBAC5D,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACnB,CAAC;gBACH,CAAC;gBACD,OAAO,GAAG,QAAQ,CAAC;YACrB,CAAC;YAED,OAAO,CAAC,CAAC,IAAI,CAAC;gBACZ,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC3B,UAAU,EAAE,CAAC,CAAC,UAAU;oBACxB,QAAQ,EAAE,CAAC,CAAC,QAAQ;oBACpB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,KAAK,EAAE,mBAAmB;oBAC/D,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,QAAQ,EAAE;wBACR,cAAc,EAAE,CAAC,CAAC,cAAc;wBAChC,SAAS,EAAE,CAAC,CAAC,SAAS;qBACvB;iBACF,CAAC,CAAC;gBACH,KAAK;gBACL,YAAY,EAAE,OAAO,CAAC,MAAM;aAC7B,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACnF,OAAO,CAAC,CAAC,IAAI,CACX,EAAE,KAAK,EAAE,sBAAsB,EAAE,MAAM,EAAE,GAAG,EAAE,EAC9C,GAAG,CACJ,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -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;
|
|
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"}
|
package/dist/routes/reflect.js
CHANGED
|
@@ -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;
|
|
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,
|
|
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;
|
|
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"}
|