@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.
Files changed (72) hide show
  1. package/dist/db/benchmark-store.d.ts +74 -0
  2. package/dist/db/benchmark-store.d.ts.map +1 -0
  3. package/dist/db/benchmark-store.js +268 -0
  4. package/dist/db/benchmark-store.js.map +1 -0
  5. package/dist/db/guardrail-store.d.ts +34 -0
  6. package/dist/db/guardrail-store.d.ts.map +1 -0
  7. package/dist/db/guardrail-store.js +221 -0
  8. package/dist/db/guardrail-store.js.map +1 -0
  9. package/dist/db/migrate.d.ts.map +1 -1
  10. package/dist/db/migrate.js +112 -0
  11. package/dist/db/migrate.js.map +1 -1
  12. package/dist/db/schema.sqlite.d.ts +58 -1
  13. package/dist/db/schema.sqlite.d.ts.map +1 -1
  14. package/dist/db/schema.sqlite.js +6 -0
  15. package/dist/db/schema.sqlite.js.map +1 -1
  16. package/dist/db/sqlite-store.d.ts +12 -0
  17. package/dist/db/sqlite-store.d.ts.map +1 -1
  18. package/dist/db/sqlite-store.js +47 -0
  19. package/dist/db/sqlite-store.js.map +1 -1
  20. package/dist/db/tenant-scoped-store.d.ts +1 -0
  21. package/dist/db/tenant-scoped-store.d.ts.map +1 -1
  22. package/dist/db/tenant-scoped-store.js +3 -0
  23. package/dist/db/tenant-scoped-store.js.map +1 -1
  24. package/dist/index.d.ts +4 -0
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +32 -0
  27. package/dist/index.js.map +1 -1
  28. package/dist/lib/benchmark/engine.d.ts +24 -0
  29. package/dist/lib/benchmark/engine.d.ts.map +1 -0
  30. package/dist/lib/benchmark/engine.js +159 -0
  31. package/dist/lib/benchmark/engine.js.map +1 -0
  32. package/dist/lib/benchmark/metric-aggregator.d.ts +38 -0
  33. package/dist/lib/benchmark/metric-aggregator.d.ts.map +1 -0
  34. package/dist/lib/benchmark/metric-aggregator.js +159 -0
  35. package/dist/lib/benchmark/metric-aggregator.js.map +1 -0
  36. package/dist/lib/benchmark/statistical.d.ts +51 -0
  37. package/dist/lib/benchmark/statistical.d.ts.map +1 -0
  38. package/dist/lib/benchmark/statistical.js +381 -0
  39. package/dist/lib/benchmark/statistical.js.map +1 -0
  40. package/dist/lib/guardrails/actions.d.ts +28 -0
  41. package/dist/lib/guardrails/actions.d.ts.map +1 -0
  42. package/dist/lib/guardrails/actions.js +126 -0
  43. package/dist/lib/guardrails/actions.js.map +1 -0
  44. package/dist/lib/guardrails/conditions.d.ts +13 -0
  45. package/dist/lib/guardrails/conditions.d.ts.map +1 -0
  46. package/dist/lib/guardrails/conditions.js +188 -0
  47. package/dist/lib/guardrails/conditions.js.map +1 -0
  48. package/dist/lib/guardrails/engine.d.ts +24 -0
  49. package/dist/lib/guardrails/engine.d.ts.map +1 -0
  50. package/dist/lib/guardrails/engine.js +122 -0
  51. package/dist/lib/guardrails/engine.js.map +1 -0
  52. package/dist/lib/replay/builder.d.ts +28 -0
  53. package/dist/lib/replay/builder.d.ts.map +1 -0
  54. package/dist/lib/replay/builder.js +482 -0
  55. package/dist/lib/replay/builder.js.map +1 -0
  56. package/dist/routes/agents.d.ts +4 -3
  57. package/dist/routes/agents.d.ts.map +1 -1
  58. package/dist/routes/agents.js +37 -12
  59. package/dist/routes/agents.js.map +1 -1
  60. package/dist/routes/benchmarks.d.ts +18 -0
  61. package/dist/routes/benchmarks.d.ts.map +1 -0
  62. package/dist/routes/benchmarks.js +312 -0
  63. package/dist/routes/benchmarks.js.map +1 -0
  64. package/dist/routes/guardrails.d.ts +18 -0
  65. package/dist/routes/guardrails.d.ts.map +1 -0
  66. package/dist/routes/guardrails.js +184 -0
  67. package/dist/routes/guardrails.js.map +1 -0
  68. package/dist/routes/replay.d.ts +28 -0
  69. package/dist/routes/replay.d.ts.map +1 -0
  70. package/dist/routes/replay.js +140 -0
  71. package/dist/routes/replay.js.map +1 -0
  72. package/package.json +2 -2
@@ -0,0 +1,381 @@
1
+ /**
2
+ * StatisticalComparator (Story 3.3)
3
+ *
4
+ * Hypothesis testing for benchmark variant comparisons.
5
+ * Implements Welch's t-test and chi-squared test with numerical p-value computation.
6
+ */
7
+ // ─── Metric Classification ────────────────────────────────
8
+ /** Continuous metrics → Welch's t-test */
9
+ const CONTINUOUS_METRICS = new Set([
10
+ 'avg_cost',
11
+ 'avg_latency',
12
+ 'avg_tokens',
13
+ 'avg_duration',
14
+ 'health_score',
15
+ ]);
16
+ /** Proportion metrics → chi-squared test */
17
+ const PROPORTION_METRICS = new Set([
18
+ 'error_rate',
19
+ 'completion_rate',
20
+ 'tool_success_rate',
21
+ ]);
22
+ /**
23
+ * Lower-is-better metrics. For these, a *lower* mean in variant B means B is "better".
24
+ * For higher-is-better metrics, a *higher* mean in B means B is better.
25
+ */
26
+ const LOWER_IS_BETTER = new Set([
27
+ 'avg_cost',
28
+ 'avg_latency',
29
+ 'error_rate',
30
+ 'avg_duration',
31
+ ]);
32
+ // ─── Numerical Approximations ──────────────────────────────
33
+ /**
34
+ * Error function approximation (Abramowitz and Stegun, formula 7.1.26).
35
+ * Maximum error: 1.5×10⁻⁷.
36
+ */
37
+ function erf(x) {
38
+ const sign = x >= 0 ? 1 : -1;
39
+ const a = Math.abs(x);
40
+ const p = 0.3275911;
41
+ const a1 = 0.254829592;
42
+ const a2 = -0.284496736;
43
+ const a3 = 1.421413741;
44
+ const a4 = -1.453152027;
45
+ const a5 = 1.061405429;
46
+ const t = 1.0 / (1.0 + p * a);
47
+ const t2 = t * t;
48
+ const t3 = t2 * t;
49
+ const t4 = t3 * t;
50
+ const t5 = t4 * t;
51
+ const y = 1.0 - (a1 * t + a2 * t2 + a3 * t3 + a4 * t4 + a5 * t5) * Math.exp(-a * a);
52
+ return sign * y;
53
+ }
54
+ /**
55
+ * Standard normal CDF using error function.
56
+ */
57
+ function normalCDF(x) {
58
+ return 0.5 * (1.0 + erf(x / Math.SQRT2));
59
+ }
60
+ /**
61
+ * Log-gamma function using Stirling's approximation (Lanczos).
62
+ */
63
+ function logGamma(x) {
64
+ const g = 7;
65
+ const c = [
66
+ 0.99999999999980993, 676.5203681218851, -1259.1392167224028, 771.32342877765313,
67
+ -176.61502916214059, 12.507343278686905, -0.13857109526572012, 9.9843695780195716e-6,
68
+ 1.5056327351493116e-7,
69
+ ];
70
+ if (x < 0.5) {
71
+ return Math.log(Math.PI / Math.sin(Math.PI * x)) - logGamma(1 - x);
72
+ }
73
+ x -= 1;
74
+ let a = c[0];
75
+ const t = x + g + 0.5;
76
+ for (let i = 1; i < g + 2; i++) {
77
+ a += c[i] / (x + i);
78
+ }
79
+ return 0.5 * Math.log(2 * Math.PI) + (x + 0.5) * Math.log(t) - t + Math.log(a);
80
+ }
81
+ /**
82
+ * Regularized incomplete beta function I_x(a, b) using continued fraction.
83
+ * Used for computing t-distribution CDF.
84
+ */
85
+ function regularizedBeta(x, a, b) {
86
+ if (x <= 0)
87
+ return 0;
88
+ if (x >= 1)
89
+ return 1;
90
+ // Use symmetry relation if needed for better convergence
91
+ if (x > (a + 1) / (a + b + 2)) {
92
+ return 1 - regularizedBeta(1 - x, b, a);
93
+ }
94
+ const lnBeta = logGamma(a) + logGamma(b) - logGamma(a + b);
95
+ const front = Math.exp(Math.log(x) * a + Math.log(1 - x) * b - lnBeta) / a;
96
+ // Lentz's continued fraction
97
+ const maxIter = 200;
98
+ const eps = 1e-14;
99
+ let f = 1;
100
+ let c = 1;
101
+ let d = 1 - (a + b) * x / (a + 1);
102
+ if (Math.abs(d) < 1e-30)
103
+ d = 1e-30;
104
+ d = 1 / d;
105
+ f = d;
106
+ for (let m = 1; m <= maxIter; m++) {
107
+ // Even step
108
+ let num = m * (b - m) * x / ((a + 2 * m - 1) * (a + 2 * m));
109
+ d = 1 + num * d;
110
+ if (Math.abs(d) < 1e-30)
111
+ d = 1e-30;
112
+ c = 1 + num / c;
113
+ if (Math.abs(c) < 1e-30)
114
+ c = 1e-30;
115
+ d = 1 / d;
116
+ f *= c * d;
117
+ // Odd step
118
+ num = -(a + m) * (a + b + m) * x / ((a + 2 * m) * (a + 2 * m + 1));
119
+ d = 1 + num * d;
120
+ if (Math.abs(d) < 1e-30)
121
+ d = 1e-30;
122
+ c = 1 + num / c;
123
+ if (Math.abs(c) < 1e-30)
124
+ c = 1e-30;
125
+ d = 1 / d;
126
+ const delta = c * d;
127
+ f *= delta;
128
+ if (Math.abs(delta - 1) < eps)
129
+ break;
130
+ }
131
+ return front * f;
132
+ }
133
+ /**
134
+ * Student's t-distribution CDF using the regularized incomplete beta function.
135
+ */
136
+ function tCDF(t, df) {
137
+ const x = df / (df + t * t);
138
+ const prob = 0.5 * regularizedBeta(x, df / 2, 0.5);
139
+ return t >= 0 ? 1 - prob : prob;
140
+ }
141
+ /**
142
+ * Two-tailed p-value from t-statistic and degrees of freedom.
143
+ */
144
+ function twoTailedPValue(t, df) {
145
+ return 2 * (1 - tCDF(Math.abs(t), df));
146
+ }
147
+ /**
148
+ * Chi-squared CDF for 1 degree of freedom using error function.
149
+ * P(X ≤ x) for X ~ χ²(1) = P(Z² ≤ x) = erf(√(x/2))
150
+ */
151
+ function chiSquaredCDF1(x) {
152
+ if (x <= 0)
153
+ return 0;
154
+ return erf(Math.sqrt(x / 2));
155
+ }
156
+ /**
157
+ * t critical value for 95% CI (two-tailed).
158
+ * Approximation for large df; uses normal for df > 200.
159
+ */
160
+ function tCritical95(df) {
161
+ if (df > 200)
162
+ return 1.96;
163
+ // Newton-Raphson or use a simple lookup for common values
164
+ // Use an approximation: t ≈ z * (1 + (z² + 1) / (4 * df))
165
+ // where z = 1.96 for 95% CI
166
+ const z = 1.96;
167
+ if (df <= 1)
168
+ return 12.706;
169
+ if (df <= 2)
170
+ return 4.303;
171
+ if (df <= 3)
172
+ return 3.182;
173
+ if (df <= 4)
174
+ return 2.776;
175
+ if (df <= 5)
176
+ return 2.571;
177
+ // Cornish-Fisher approximation
178
+ return z + (z * z * z + z) / (4 * df);
179
+ }
180
+ // ─── StatisticalComparator ─────────────────────────────────
181
+ export class StatisticalComparator {
182
+ /**
183
+ * Welch's t-test for comparing two sets of continuous metric statistics.
184
+ */
185
+ welchTTest(statsA, statsB) {
186
+ // Edge case: insufficient samples
187
+ if (statsA.count < 2 || statsB.count < 2) {
188
+ const diff = statsB.mean - statsA.mean;
189
+ return {
190
+ tStatistic: 0,
191
+ degreesOfFreedom: 0,
192
+ pValue: 1,
193
+ confidenceInterval: { lower: diff, upper: diff },
194
+ cohenD: 0,
195
+ };
196
+ }
197
+ const nA = statsA.count;
198
+ const nB = statsB.count;
199
+ const varA = statsA.stddev * statsA.stddev;
200
+ const varB = statsB.stddev * statsB.stddev;
201
+ const seA = varA / nA;
202
+ const seB = varB / nB;
203
+ const seDiff = Math.sqrt(seA + seB);
204
+ // Edge case: zero variance in both groups
205
+ if (seDiff === 0) {
206
+ const diff = statsB.mean - statsA.mean;
207
+ return {
208
+ tStatistic: diff === 0 ? 0 : Infinity,
209
+ degreesOfFreedom: nA + nB - 2,
210
+ pValue: diff === 0 ? 1 : 0,
211
+ confidenceInterval: { lower: diff, upper: diff },
212
+ cohenD: 0,
213
+ };
214
+ }
215
+ // t-statistic
216
+ const t = (statsA.mean - statsB.mean) / seDiff;
217
+ // Welch-Satterthwaite degrees of freedom
218
+ const num = (seA + seB) ** 2;
219
+ const denom = (seA * seA) / (nA - 1) + (seB * seB) / (nB - 1);
220
+ const df = num / denom;
221
+ // p-value (two-tailed)
222
+ const pValue = twoTailedPValue(t, df);
223
+ // 95% CI for difference of means
224
+ const diffMeans = statsB.mean - statsA.mean;
225
+ const tCrit = tCritical95(df);
226
+ const marginOfError = tCrit * seDiff;
227
+ // Cohen's d — pooled standard deviation
228
+ const pooledVar = ((nA - 1) * varA + (nB - 1) * varB) / (nA + nB - 2);
229
+ const pooledSD = Math.sqrt(pooledVar);
230
+ const cohenD = pooledSD > 0 ? Math.abs(statsA.mean - statsB.mean) / pooledSD : 0;
231
+ return {
232
+ tStatistic: t,
233
+ degreesOfFreedom: df,
234
+ pValue: Math.min(1, Math.max(0, pValue)),
235
+ confidenceInterval: {
236
+ lower: diffMeans - marginOfError,
237
+ upper: diffMeans + marginOfError,
238
+ },
239
+ cohenD,
240
+ };
241
+ }
242
+ /**
243
+ * Chi-squared test with Yates' continuity correction for comparing two proportions.
244
+ */
245
+ chiSquaredTest(successesA, totalA, successesB, totalB) {
246
+ const failuresA = totalA - successesA;
247
+ const failuresB = totalB - successesB;
248
+ const n = totalA + totalB;
249
+ // Edge case: empty samples
250
+ if (n === 0 || totalA === 0 || totalB === 0) {
251
+ return { chiSquared: 0, pValue: 1, phi: 0 };
252
+ }
253
+ // Expected counts
254
+ const totalSuccess = successesA + successesB;
255
+ const totalFailure = failuresA + failuresB;
256
+ // Edge case: no variation (all successes or all failures)
257
+ if (totalSuccess === 0 || totalFailure === 0) {
258
+ return { chiSquared: 0, pValue: 1, phi: 0 };
259
+ }
260
+ const eA1 = (totalA * totalSuccess) / n;
261
+ const eA0 = (totalA * totalFailure) / n;
262
+ const eB1 = (totalB * totalSuccess) / n;
263
+ const eB0 = (totalB * totalFailure) / n;
264
+ // Chi-squared with Yates' correction
265
+ const yates = (observed, expected) => {
266
+ const diff = Math.abs(observed - expected) - 0.5;
267
+ return diff > 0 ? (diff * diff) / expected : 0;
268
+ };
269
+ const chiSq = yates(successesA, eA1) + yates(failuresA, eA0) +
270
+ yates(successesB, eB1) + yates(failuresB, eB0);
271
+ // p-value using chi-squared CDF with 1 df
272
+ const pValue = 1 - chiSquaredCDF1(chiSq);
273
+ // Phi coefficient
274
+ const phi = Math.sqrt(chiSq / n);
275
+ return {
276
+ chiSquared: chiSq,
277
+ pValue: Math.min(1, Math.max(0, pValue)),
278
+ phi,
279
+ };
280
+ }
281
+ /**
282
+ * Compare two variants on a single metric. Selects appropriate test.
283
+ */
284
+ compare(variantA, variantB, metric) {
285
+ const statsA = variantA.metrics[metric];
286
+ const statsB = variantB.metrics[metric];
287
+ if (!statsA || !statsB) {
288
+ throw new Error(`Metric ${metric} not found in one or both variants`);
289
+ }
290
+ const lowerIsBetter = LOWER_IS_BETTER.has(metric);
291
+ if (PROPORTION_METRICS.has(metric)) {
292
+ return this.compareProportions(variantA, variantB, metric, statsA, statsB, lowerIsBetter);
293
+ }
294
+ return this.compareContinuous(variantA, variantB, metric, statsA, statsB, lowerIsBetter);
295
+ }
296
+ compareContinuous(variantA, variantB, metric, statsA, statsB, lowerIsBetter) {
297
+ const result = this.welchTTest(statsA, statsB);
298
+ const diff = statsB.mean - statsA.mean;
299
+ const percentDiff = statsA.mean !== 0 ? (diff / statsA.mean) * 100 : 0;
300
+ // Determine winner based on metric direction
301
+ let winner;
302
+ if (result.pValue < 0.05) {
303
+ if (lowerIsBetter) {
304
+ winner = statsA.mean < statsB.mean ? variantA.id : variantB.id;
305
+ }
306
+ else {
307
+ winner = statsA.mean > statsB.mean ? variantA.id : variantB.id;
308
+ }
309
+ }
310
+ return {
311
+ metric,
312
+ variantA: { id: variantA.id, name: variantA.name, stats: statsA },
313
+ variantB: { id: variantB.id, name: variantB.name, stats: statsB },
314
+ absoluteDiff: diff,
315
+ percentDiff,
316
+ testType: 'welch_t',
317
+ testStatistic: result.tStatistic,
318
+ pValue: result.pValue,
319
+ confidenceInterval: result.confidenceInterval,
320
+ effectSize: result.cohenD,
321
+ significant: result.pValue < 0.05,
322
+ winner,
323
+ confidence: this.confidenceStars(result.pValue),
324
+ };
325
+ }
326
+ compareProportions(variantA, variantB, metric, statsA, statsB, lowerIsBetter) {
327
+ // For proportions, mean represents the rate, count is total observations
328
+ // Successes = mean * count (since mean = successes / total)
329
+ const successesA = Math.round(statsA.mean * statsA.count);
330
+ const successesB = Math.round(statsB.mean * statsB.count);
331
+ const result = this.chiSquaredTest(successesA, statsA.count, successesB, statsB.count);
332
+ const diff = statsB.mean - statsA.mean;
333
+ const percentDiff = statsA.mean !== 0 ? (diff / statsA.mean) * 100 : 0;
334
+ // For chi-squared we also compute a CI on the difference of proportions
335
+ const pA = statsA.count > 0 ? successesA / statsA.count : 0;
336
+ const pB = statsB.count > 0 ? successesB / statsB.count : 0;
337
+ const sePropDiff = Math.sqrt((pA * (1 - pA)) / Math.max(statsA.count, 1) +
338
+ (pB * (1 - pB)) / Math.max(statsB.count, 1));
339
+ const marginOfError = 1.96 * sePropDiff;
340
+ let winner;
341
+ if (result.pValue < 0.05) {
342
+ if (lowerIsBetter) {
343
+ winner = statsA.mean < statsB.mean ? variantA.id : variantB.id;
344
+ }
345
+ else {
346
+ winner = statsA.mean > statsB.mean ? variantA.id : variantB.id;
347
+ }
348
+ }
349
+ return {
350
+ metric,
351
+ variantA: { id: variantA.id, name: variantA.name, stats: statsA },
352
+ variantB: { id: variantB.id, name: variantB.name, stats: statsB },
353
+ absoluteDiff: diff,
354
+ percentDiff,
355
+ testType: 'chi_squared',
356
+ testStatistic: result.chiSquared,
357
+ pValue: result.pValue,
358
+ confidenceInterval: {
359
+ lower: diff - marginOfError,
360
+ upper: diff + marginOfError,
361
+ },
362
+ effectSize: result.phi,
363
+ significant: result.pValue < 0.05,
364
+ winner,
365
+ confidence: this.confidenceStars(result.pValue),
366
+ };
367
+ }
368
+ /**
369
+ * Confidence star rating based on p-value.
370
+ */
371
+ confidenceStars(pValue) {
372
+ if (pValue < 0.01)
373
+ return '★★★';
374
+ if (pValue < 0.05)
375
+ return '★★';
376
+ if (pValue < 0.1)
377
+ return '★';
378
+ return '—';
379
+ }
380
+ }
381
+ //# sourceMappingURL=statistical.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"statistical.js","sourceRoot":"","sources":["../../../src/lib/benchmark/statistical.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Guardrail Action Executors (v0.8.0 — Story 1.5)
3
+ *
4
+ * All executors are FAIL-SAFE — catch errors and return a result string.
5
+ */
6
+ import type { GuardrailRule, GuardrailConditionResult } from '@agentlensai/core';
7
+ export interface ActionResult {
8
+ success: boolean;
9
+ result: string;
10
+ }
11
+ /**
12
+ * Store interface for agent-level DB updates.
13
+ * B1 (Story 1.2) wires this to the real SqliteEventStore methods
14
+ * that UPDATE the agents table's paused_at, pause_reason, model_override columns.
15
+ */
16
+ export interface AgentStore {
17
+ pauseAgent(tenantId: string, agentId: string, reason: string): Promise<boolean> | void;
18
+ unpauseAgent(tenantId: string, agentId: string, clearModelOverride?: boolean): Promise<boolean> | void;
19
+ setModelOverride(tenantId: string, agentId: string, model: string): Promise<boolean> | void;
20
+ }
21
+ export declare function setAgentStore(store: AgentStore | null): void;
22
+ export declare function getAgentStore(): AgentStore | null;
23
+ export declare function executePauseAgent(rule: GuardrailRule, conditionResult: GuardrailConditionResult, _agentId: string): Promise<ActionResult>;
24
+ export declare function executeNotifyWebhook(rule: GuardrailRule, conditionResult: GuardrailConditionResult, agentId: string): Promise<ActionResult>;
25
+ export declare function executeDowngradeModel(rule: GuardrailRule, conditionResult: GuardrailConditionResult, _agentId: string): Promise<ActionResult>;
26
+ export declare function executeAgentgatePolicy(rule: GuardrailRule, conditionResult: GuardrailConditionResult, agentId: string): Promise<ActionResult>;
27
+ export declare function executeAction(rule: GuardrailRule, conditionResult: GuardrailConditionResult, agentId: string): Promise<ActionResult>;
28
+ //# sourceMappingURL=actions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../../src/lib/guardrails/actions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAGjF,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;IACvF,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,kBAAkB,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;IACvG,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;CAC7F;AAKD,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,GAAG,IAAI,CAE5D;AAED,wBAAgB,aAAa,IAAI,UAAU,GAAG,IAAI,CAEjD;AAED,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,aAAa,EACnB,eAAe,EAAE,wBAAwB,EACzC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,YAAY,CAAC,CA6BvB;AAED,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,aAAa,EACnB,eAAe,EAAE,wBAAwB,EACzC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,YAAY,CAAC,CAsBvB;AAED,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,aAAa,EACnB,eAAe,EAAE,wBAAwB,EACzC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,YAAY,CAAC,CA6BvB;AAED,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,aAAa,EACnB,eAAe,EAAE,wBAAwB,EACzC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,YAAY,CAAC,CAqBvB;AAED,wBAAsB,aAAa,CACjC,IAAI,EAAE,aAAa,EACnB,eAAe,EAAE,wBAAwB,EACzC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,YAAY,CAAC,CAQvB"}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Guardrail Action Executors (v0.8.0 — Story 1.5)
3
+ *
4
+ * All executors are FAIL-SAFE — catch errors and return a result string.
5
+ */
6
+ import { eventBus } from '../event-bus.js';
7
+ /** Module-level agent store — set via `setAgentStore()` when available (Story 1.2). */
8
+ let agentStore = null;
9
+ export function setAgentStore(store) {
10
+ agentStore = store;
11
+ }
12
+ export function getAgentStore() {
13
+ return agentStore;
14
+ }
15
+ export async function executePauseAgent(rule, conditionResult, _agentId) {
16
+ try {
17
+ const config = rule.actionConfig;
18
+ const message = config.message ?? `Guardrail "${rule.name}" triggered: ${conditionResult.message}`;
19
+ // B1 (Story 1.2): Update agents table with paused_at + pause_reason
20
+ if (agentStore?.pauseAgent) {
21
+ await agentStore.pauseAgent(rule.tenantId, _agentId, message);
22
+ }
23
+ eventBus.emit({
24
+ type: 'alert_triggered',
25
+ rule: {
26
+ id: rule.id, name: `guardrail:${rule.name}`, enabled: rule.enabled,
27
+ condition: 'error_rate_exceeds', threshold: conditionResult.threshold, windowMinutes: 0,
28
+ scope: rule.agentId ? { agentId: rule.agentId } : {},
29
+ notifyChannels: [], createdAt: rule.createdAt, updatedAt: rule.updatedAt, tenantId: rule.tenantId,
30
+ },
31
+ history: {
32
+ id: `gh_${Date.now()}`, ruleId: rule.id, triggeredAt: new Date().toISOString(),
33
+ currentValue: conditionResult.currentValue, threshold: conditionResult.threshold,
34
+ message, tenantId: rule.tenantId,
35
+ },
36
+ timestamp: new Date().toISOString(),
37
+ });
38
+ return { success: true, result: 'success' };
39
+ }
40
+ catch (err) {
41
+ return { success: false, result: `failed: ${err instanceof Error ? err.message : 'Unknown'}` };
42
+ }
43
+ }
44
+ export async function executeNotifyWebhook(rule, conditionResult, agentId) {
45
+ try {
46
+ const config = rule.actionConfig;
47
+ if (!config.url)
48
+ return { success: false, result: 'failed: no webhook URL configured' };
49
+ const payload = {
50
+ guardrailId: rule.id, guardrailName: rule.name, conditionType: rule.conditionType,
51
+ conditionValue: conditionResult.currentValue, conditionThreshold: conditionResult.threshold,
52
+ message: conditionResult.message, agentId, triggeredAt: new Date().toISOString(),
53
+ };
54
+ const response = await fetch(config.url, {
55
+ method: 'POST',
56
+ headers: { 'Content-Type': 'application/json', ...(config.headers ?? {}) },
57
+ body: JSON.stringify(payload),
58
+ signal: AbortSignal.timeout(10000),
59
+ });
60
+ return response.ok ? { success: true, result: 'success' } : { success: false, result: `failed: HTTP ${response.status}` };
61
+ }
62
+ catch (err) {
63
+ return { success: false, result: `failed: ${err instanceof Error ? err.message : 'Unknown'}` };
64
+ }
65
+ }
66
+ export async function executeDowngradeModel(rule, conditionResult, _agentId) {
67
+ try {
68
+ const config = rule.actionConfig;
69
+ const message = config.message ?? `Guardrail "${rule.name}" recommends downgrading model`;
70
+ // B1 (Story 1.2): Update agents table with model_override
71
+ if (agentStore?.setModelOverride && config.targetModel) {
72
+ await agentStore.setModelOverride(rule.tenantId, _agentId, config.targetModel);
73
+ }
74
+ eventBus.emit({
75
+ type: 'alert_triggered',
76
+ rule: {
77
+ id: rule.id, name: `guardrail:downgrade:${rule.name}`, enabled: rule.enabled,
78
+ condition: 'error_rate_exceeds', threshold: conditionResult.threshold, windowMinutes: 0,
79
+ scope: rule.agentId ? { agentId: rule.agentId } : {},
80
+ notifyChannels: [], createdAt: rule.createdAt, updatedAt: rule.updatedAt, tenantId: rule.tenantId,
81
+ },
82
+ history: {
83
+ id: `gh_${Date.now()}`, ruleId: rule.id, triggeredAt: new Date().toISOString(),
84
+ currentValue: conditionResult.currentValue, threshold: conditionResult.threshold,
85
+ message: `${message} (target: ${config.targetModel ?? 'unknown'})`, tenantId: rule.tenantId,
86
+ },
87
+ timestamp: new Date().toISOString(),
88
+ });
89
+ return { success: true, result: 'success' };
90
+ }
91
+ catch (err) {
92
+ return { success: false, result: `failed: ${err instanceof Error ? err.message : 'Unknown'}` };
93
+ }
94
+ }
95
+ export async function executeAgentgatePolicy(rule, conditionResult, agentId) {
96
+ try {
97
+ const config = rule.actionConfig;
98
+ if (!config.agentgateUrl)
99
+ return { success: false, result: 'failed: no AgentGate URL configured' };
100
+ const url = `${config.agentgateUrl.replace(/\/$/, '')}/api/policies/${config.policyId ?? 'default'}`;
101
+ const response = await fetch(url, {
102
+ method: 'PUT',
103
+ headers: { 'Content-Type': 'application/json' },
104
+ body: JSON.stringify({
105
+ action: config.action ?? 'restrict',
106
+ reason: `Guardrail "${rule.name}" triggered: ${conditionResult.message}`,
107
+ agentId, triggeredBy: 'agentlens-guardrail', ruleId: rule.id,
108
+ }),
109
+ signal: AbortSignal.timeout(10000),
110
+ });
111
+ return response.ok ? { success: true, result: 'success' } : { success: false, result: `failed: HTTP ${response.status}` };
112
+ }
113
+ catch (err) {
114
+ return { success: false, result: `failed: ${err instanceof Error ? err.message : 'Unknown'}` };
115
+ }
116
+ }
117
+ export async function executeAction(rule, conditionResult, agentId) {
118
+ switch (rule.actionType) {
119
+ case 'pause_agent': return executePauseAgent(rule, conditionResult, agentId);
120
+ case 'notify_webhook': return executeNotifyWebhook(rule, conditionResult, agentId);
121
+ case 'downgrade_model': return executeDowngradeModel(rule, conditionResult, agentId);
122
+ case 'agentgate_policy': return executeAgentgatePolicy(rule, conditionResult, agentId);
123
+ default: return { success: false, result: `unknown action type: ${rule.actionType}` };
124
+ }
125
+ }
126
+ //# sourceMappingURL=actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions.js","sourceRoot":"","sources":["../../../src/lib/guardrails/actions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Guardrail Condition Evaluators (v0.8.0 — Story 1.4)
3
+ *
4
+ * Each condition type has an evaluator that queries the store
5
+ * and returns whether the condition is triggered.
6
+ */
7
+ import type { IEventStore, GuardrailRule, GuardrailConditionResult } from '@agentlensai/core';
8
+ export declare function evaluateErrorRateThreshold(store: IEventStore, rule: GuardrailRule, agentId: string): Promise<GuardrailConditionResult>;
9
+ export declare function evaluateCostLimit(store: IEventStore, rule: GuardrailRule, agentId: string, sessionId?: string): Promise<GuardrailConditionResult>;
10
+ export declare function evaluateHealthScoreThreshold(store: IEventStore, rule: GuardrailRule, agentId: string): Promise<GuardrailConditionResult>;
11
+ export declare function evaluateCustomMetric(store: IEventStore, rule: GuardrailRule, agentId: string): Promise<GuardrailConditionResult>;
12
+ export declare function evaluateCondition(store: IEventStore, rule: GuardrailRule, agentId: string, sessionId?: string): Promise<GuardrailConditionResult>;
13
+ //# sourceMappingURL=conditions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conditions.d.ts","sourceRoot":"","sources":["../../../src/lib/guardrails/conditions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAI9F,wBAAsB,0BAA0B,CAC9C,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,aAAa,EACnB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,wBAAwB,CAAC,CA+BnC;AAED,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,aAAa,EACnB,OAAO,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,wBAAwB,CAAC,CA+BnC;AAED,wBAAsB,4BAA4B,CAChD,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,aAAa,EACnB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,wBAAwB,CAAC,CAsBnC;AA2BD,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,aAAa,EACnB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,wBAAwB,CAAC,CAgFnC;AAED,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,aAAa,EACnB,OAAO,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,wBAAwB,CAAC,CAQnC"}