@agentlensai/server 0.7.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/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 +64 -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 +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -1
- 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/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/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/package.json +2 -2
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Guardrail REST API Routes (v0.8.0 — Stories 2.1, 2.2)
|
|
3
|
+
*
|
|
4
|
+
* POST /api/guardrails — Create rule
|
|
5
|
+
* GET /api/guardrails — List rules
|
|
6
|
+
* GET /api/guardrails/:id — Get rule
|
|
7
|
+
* PUT /api/guardrails/:id — Update rule
|
|
8
|
+
* DELETE /api/guardrails/:id — Delete rule
|
|
9
|
+
* GET /api/guardrails/:id/status — Get rule status + recent triggers
|
|
10
|
+
* GET /api/guardrails/history — List trigger history
|
|
11
|
+
*/
|
|
12
|
+
import { Hono } from 'hono';
|
|
13
|
+
import { ulid } from 'ulid';
|
|
14
|
+
import { CreateGuardrailRuleSchema, UpdateGuardrailRuleSchema } from '@agentlensai/core';
|
|
15
|
+
/**
|
|
16
|
+
* Validate that conditionConfig contains required fields for the given condition type.
|
|
17
|
+
* Returns an error message string if invalid, or null if valid.
|
|
18
|
+
*/
|
|
19
|
+
function validateConditionConfig(conditionType, config) {
|
|
20
|
+
switch (conditionType) {
|
|
21
|
+
case 'error_rate_threshold':
|
|
22
|
+
if (config.threshold !== undefined && (typeof config.threshold !== 'number' || config.threshold < 0 || config.threshold > 100)) {
|
|
23
|
+
return 'error_rate_threshold requires threshold to be a number between 0 and 100';
|
|
24
|
+
}
|
|
25
|
+
break;
|
|
26
|
+
case 'cost_limit':
|
|
27
|
+
if (config.maxCostUsd !== undefined && (typeof config.maxCostUsd !== 'number' || config.maxCostUsd < 0)) {
|
|
28
|
+
return 'cost_limit requires maxCostUsd to be a non-negative number';
|
|
29
|
+
}
|
|
30
|
+
if (config.scope !== undefined && config.scope !== 'session' && config.scope !== 'daily') {
|
|
31
|
+
return 'cost_limit scope must be "session" or "daily"';
|
|
32
|
+
}
|
|
33
|
+
break;
|
|
34
|
+
case 'health_score_threshold':
|
|
35
|
+
if (config.minScore !== undefined && (typeof config.minScore !== 'number' || config.minScore < 0 || config.minScore > 100)) {
|
|
36
|
+
return 'health_score_threshold requires minScore to be a number between 0 and 100';
|
|
37
|
+
}
|
|
38
|
+
break;
|
|
39
|
+
case 'custom_metric':
|
|
40
|
+
if (config.operator !== undefined) {
|
|
41
|
+
const validOps = ['gt', 'gte', 'lt', 'lte', 'eq'];
|
|
42
|
+
if (!validOps.includes(config.operator)) {
|
|
43
|
+
return `custom_metric operator must be one of: ${validOps.join(', ')}`;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
break;
|
|
47
|
+
}
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
export function guardrailRoutes(guardrailStore) {
|
|
51
|
+
const app = new Hono();
|
|
52
|
+
// Helper to get tenant ID from auth
|
|
53
|
+
function getTenantId(c) {
|
|
54
|
+
const apiKeyInfo = c.get('apiKey');
|
|
55
|
+
return apiKeyInfo?.tenantId ?? 'default';
|
|
56
|
+
}
|
|
57
|
+
// POST / — Create guardrail rule
|
|
58
|
+
app.post('/', async (c) => {
|
|
59
|
+
const tenantId = getTenantId(c);
|
|
60
|
+
const rawBody = await c.req.json().catch(() => null);
|
|
61
|
+
if (!rawBody) {
|
|
62
|
+
return c.json({ error: 'Invalid JSON body', status: 400 }, 400);
|
|
63
|
+
}
|
|
64
|
+
const result = CreateGuardrailRuleSchema.safeParse(rawBody);
|
|
65
|
+
if (!result.success) {
|
|
66
|
+
return c.json({
|
|
67
|
+
error: 'Validation failed',
|
|
68
|
+
status: 400,
|
|
69
|
+
details: result.error.issues.map((i) => ({ path: i.path.join('.'), message: i.message })),
|
|
70
|
+
}, 400);
|
|
71
|
+
}
|
|
72
|
+
// H4: Validate that conditionConfig has required fields for the condition type
|
|
73
|
+
const configError = validateConditionConfig(result.data.conditionType, result.data.conditionConfig);
|
|
74
|
+
if (configError) {
|
|
75
|
+
return c.json({ error: 'Validation failed', status: 400, details: [{ path: 'conditionConfig', message: configError }] }, 400);
|
|
76
|
+
}
|
|
77
|
+
// H2: Validate webhook URL if action is notify_webhook
|
|
78
|
+
if (result.data.actionType === 'notify_webhook') {
|
|
79
|
+
const url = result.data.actionConfig?.url;
|
|
80
|
+
if (typeof url === 'string' && !/^https?:\/\//.test(url)) {
|
|
81
|
+
return c.json({ error: 'Validation failed', status: 400, details: [{ path: 'actionConfig.url', message: 'Webhook URL must start with http:// or https://' }] }, 400);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
const now = new Date().toISOString();
|
|
85
|
+
const rule = {
|
|
86
|
+
id: ulid(),
|
|
87
|
+
tenantId,
|
|
88
|
+
...result.data,
|
|
89
|
+
createdAt: now,
|
|
90
|
+
updatedAt: now,
|
|
91
|
+
};
|
|
92
|
+
guardrailStore.createRule(rule);
|
|
93
|
+
return c.json(rule, 201);
|
|
94
|
+
});
|
|
95
|
+
// GET / — List guardrail rules
|
|
96
|
+
app.get('/', async (c) => {
|
|
97
|
+
const tenantId = getTenantId(c);
|
|
98
|
+
const agentId = c.req.query('agentId');
|
|
99
|
+
const rules = guardrailStore.listRules(tenantId, agentId || undefined);
|
|
100
|
+
return c.json({ rules });
|
|
101
|
+
});
|
|
102
|
+
// GET /history — List trigger history (BEFORE :id routes to avoid route conflict)
|
|
103
|
+
app.get('/history', async (c) => {
|
|
104
|
+
const tenantId = getTenantId(c);
|
|
105
|
+
const ruleId = c.req.query('ruleId');
|
|
106
|
+
const limit = parseInt(c.req.query('limit') ?? '50', 10);
|
|
107
|
+
const offset = parseInt(c.req.query('offset') ?? '0', 10);
|
|
108
|
+
const { triggers, total } = guardrailStore.listTriggerHistory(tenantId, {
|
|
109
|
+
ruleId: ruleId || undefined,
|
|
110
|
+
limit: Math.min(Math.max(1, limit), 200),
|
|
111
|
+
offset: Math.max(0, offset),
|
|
112
|
+
});
|
|
113
|
+
return c.json({ triggers, total });
|
|
114
|
+
});
|
|
115
|
+
// GET /:id — Get single rule
|
|
116
|
+
app.get('/:id', async (c) => {
|
|
117
|
+
const tenantId = getTenantId(c);
|
|
118
|
+
const ruleId = c.req.param('id');
|
|
119
|
+
const rule = guardrailStore.getRule(tenantId, ruleId);
|
|
120
|
+
if (!rule) {
|
|
121
|
+
return c.json({ error: 'Guardrail rule not found', status: 404 }, 404);
|
|
122
|
+
}
|
|
123
|
+
return c.json(rule);
|
|
124
|
+
});
|
|
125
|
+
// PUT /:id — Update rule
|
|
126
|
+
app.put('/:id', async (c) => {
|
|
127
|
+
const tenantId = getTenantId(c);
|
|
128
|
+
const ruleId = c.req.param('id');
|
|
129
|
+
const rawBody = await c.req.json().catch(() => null);
|
|
130
|
+
if (!rawBody) {
|
|
131
|
+
return c.json({ error: 'Invalid JSON body', status: 400 }, 400);
|
|
132
|
+
}
|
|
133
|
+
const result = UpdateGuardrailRuleSchema.safeParse(rawBody);
|
|
134
|
+
if (!result.success) {
|
|
135
|
+
return c.json({
|
|
136
|
+
error: 'Validation failed',
|
|
137
|
+
status: 400,
|
|
138
|
+
details: result.error.issues.map((i) => ({ path: i.path.join('.'), message: i.message })),
|
|
139
|
+
}, 400);
|
|
140
|
+
}
|
|
141
|
+
// H2: Validate webhook URL if action is notify_webhook
|
|
142
|
+
if (result.data.actionType === 'notify_webhook') {
|
|
143
|
+
const url = result.data.actionConfig?.url;
|
|
144
|
+
if (typeof url === 'string' && !/^https?:\/\//.test(url)) {
|
|
145
|
+
return c.json({ error: 'Validation failed', status: 400, details: [{ path: 'actionConfig.url', message: 'Webhook URL must start with http:// or https://' }] }, 400);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
// Handle null agentId (clearing scope)
|
|
149
|
+
const updates = { ...result.data };
|
|
150
|
+
if (updates.agentId === null) {
|
|
151
|
+
updates.agentId = undefined;
|
|
152
|
+
}
|
|
153
|
+
const updated = guardrailStore.updateRule(tenantId, ruleId, updates);
|
|
154
|
+
if (!updated) {
|
|
155
|
+
return c.json({ error: 'Guardrail rule not found', status: 404 }, 404);
|
|
156
|
+
}
|
|
157
|
+
const rule = guardrailStore.getRule(tenantId, ruleId);
|
|
158
|
+
return c.json(rule);
|
|
159
|
+
});
|
|
160
|
+
// DELETE /:id — Delete rule
|
|
161
|
+
app.delete('/:id', async (c) => {
|
|
162
|
+
const tenantId = getTenantId(c);
|
|
163
|
+
const ruleId = c.req.param('id');
|
|
164
|
+
const deleted = guardrailStore.deleteRule(tenantId, ruleId);
|
|
165
|
+
if (!deleted) {
|
|
166
|
+
return c.json({ error: 'Guardrail rule not found', status: 404 }, 404);
|
|
167
|
+
}
|
|
168
|
+
return c.json({ ok: true });
|
|
169
|
+
});
|
|
170
|
+
// GET /:id/status — Get rule status + recent triggers
|
|
171
|
+
app.get('/:id/status', async (c) => {
|
|
172
|
+
const tenantId = getTenantId(c);
|
|
173
|
+
const ruleId = c.req.param('id');
|
|
174
|
+
const rule = guardrailStore.getRule(tenantId, ruleId);
|
|
175
|
+
if (!rule) {
|
|
176
|
+
return c.json({ error: 'Guardrail rule not found', status: 404 }, 404);
|
|
177
|
+
}
|
|
178
|
+
const state = guardrailStore.getState(tenantId, ruleId);
|
|
179
|
+
const recentTriggers = guardrailStore.getRecentTriggers(tenantId, ruleId, 10);
|
|
180
|
+
return c.json({ rule, state, recentTriggers });
|
|
181
|
+
});
|
|
182
|
+
return app;
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=guardrails.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guardrails.js","sourceRoot":"","sources":["../../src/routes/guardrails.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": "^0.
|
|
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",
|