@agentgazer/server 0.1.1 → 0.3.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 (51) hide show
  1. package/dist/alerts/evaluator.d.ts +21 -0
  2. package/dist/alerts/evaluator.d.ts.map +1 -1
  3. package/dist/alerts/evaluator.js +243 -79
  4. package/dist/alerts/evaluator.js.map +1 -1
  5. package/dist/db.d.ts +108 -2
  6. package/dist/db.d.ts.map +1 -1
  7. package/dist/db.js +536 -11
  8. package/dist/db.js.map +1 -1
  9. package/dist/index.d.ts +5 -3
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +8 -1
  12. package/dist/index.js.map +1 -1
  13. package/dist/middleware/auth.js +1 -1
  14. package/dist/middleware/auth.js.map +1 -1
  15. package/dist/routes/agents.d.ts.map +1 -1
  16. package/dist/routes/agents.js +116 -3
  17. package/dist/routes/agents.js.map +1 -1
  18. package/dist/routes/alerts.d.ts.map +1 -1
  19. package/dist/routes/alerts.js +55 -5
  20. package/dist/routes/alerts.js.map +1 -1
  21. package/dist/routes/events.d.ts.map +1 -1
  22. package/dist/routes/events.js +27 -14
  23. package/dist/routes/events.js.map +1 -1
  24. package/dist/routes/health.d.ts.map +1 -1
  25. package/dist/routes/health.js +13 -0
  26. package/dist/routes/health.js.map +1 -1
  27. package/dist/routes/openclaw.d.ts +3 -0
  28. package/dist/routes/openclaw.d.ts.map +1 -0
  29. package/dist/routes/openclaw.js +139 -0
  30. package/dist/routes/openclaw.js.map +1 -0
  31. package/dist/routes/overview.d.ts +9 -0
  32. package/dist/routes/overview.d.ts.map +1 -0
  33. package/dist/routes/overview.js +101 -0
  34. package/dist/routes/overview.js.map +1 -0
  35. package/dist/routes/providers.d.ts +15 -0
  36. package/dist/routes/providers.d.ts.map +1 -0
  37. package/dist/routes/providers.js +317 -0
  38. package/dist/routes/providers.js.map +1 -0
  39. package/dist/routes/settings.d.ts +7 -0
  40. package/dist/routes/settings.d.ts.map +1 -0
  41. package/dist/routes/settings.js +134 -0
  42. package/dist/routes/settings.js.map +1 -0
  43. package/dist/server.d.ts +8 -0
  44. package/dist/server.d.ts.map +1 -1
  45. package/dist/server.js +11 -0
  46. package/dist/server.js.map +1 -1
  47. package/dist/services/provider-validator.d.ts +2 -0
  48. package/dist/services/provider-validator.d.ts.map +1 -0
  49. package/dist/services/provider-validator.js +8 -0
  50. package/dist/services/provider-validator.js.map +1 -0
  51. package/package.json +2 -2
@@ -3,6 +3,27 @@ export interface EvaluatorOptions {
3
3
  db: Database.Database;
4
4
  interval?: number;
5
5
  }
6
+ export interface KillSwitchEventData {
7
+ agent_id: string;
8
+ score: number;
9
+ window_size: number;
10
+ threshold: number;
11
+ details: {
12
+ similarPrompts: number;
13
+ similarResponses: number;
14
+ repeatedToolCalls: number;
15
+ };
16
+ }
17
+ /**
18
+ * Fire kill_switch alerts for an agent.
19
+ * Called immediately when a kill_switch event is triggered by the proxy.
20
+ */
21
+ export declare function fireKillSwitchAlert(db: Database.Database, data: KillSwitchEventData): Promise<void>;
22
+ /**
23
+ * Reset kill_switch alert state when agent is reactivated.
24
+ * Called when agent status changes from inactive to active.
25
+ */
26
+ export declare function resetKillSwitchAlerts(db: Database.Database, agentId: string): void;
6
27
  export declare function startEvaluator(options: EvaluatorOptions): {
7
28
  stop: () => void;
8
29
  };
@@ -1 +1 @@
1
- {"version":3,"file":"evaluator.d.ts","sourceRoot":"","sources":["../../src/alerts/evaluator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAU3C,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAkbD,wBAAgB,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG;IAAE,IAAI,EAAE,MAAM,IAAI,CAAA;CAAE,CAuB9E"}
1
+ {"version":3,"file":"evaluator.d.ts","sourceRoot":"","sources":["../../src/alerts/evaluator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAU3C,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAgED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE;QACP,cAAc,EAAE,MAAM,CAAC;QACvB,gBAAgB,EAAE,MAAM,CAAC;QACzB,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;CACH;AA+fD;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,IAAI,CAAC,CAiDf;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAelF;AAMD,wBAAgB,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG;IAAE,IAAI,EAAE,MAAM,IAAI,CAAA;CAAE,CAuB9E"}
@@ -3,6 +3,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.fireKillSwitchAlert = fireKillSwitchAlert;
7
+ exports.resetKillSwitchAlerts = resetKillSwitchAlerts;
6
8
  exports.startEvaluator = startEvaluator;
7
9
  const nodemailer_1 = __importDefault(require("nodemailer"));
8
10
  const shared_1 = require("@agentgazer/shared");
@@ -11,6 +13,7 @@ const log = (0, shared_1.createLogger)("evaluator");
11
13
  // Prepared-statement SQL
12
14
  // ---------------------------------------------------------------------------
13
15
  const SQL_ENABLED_RULES = `SELECT * FROM alert_rules WHERE enabled = 1`;
16
+ const SQL_KILL_SWITCH_RULES = `SELECT * FROM alert_rules WHERE enabled = 1 AND rule_type = 'kill_switch' AND agent_id = ?`;
14
17
  const SQL_AGENT_BY_ID = `SELECT * FROM agents WHERE agent_id = ?`;
15
18
  const SQL_ERROR_RATE = `
16
19
  SELECT
@@ -21,17 +24,15 @@ const SQL_ERROR_RATE = `
21
24
  AND event_type IN ('llm_call', 'completion')
22
25
  AND timestamp >= ?
23
26
  `;
24
- const SQL_BUDGET_TODAY = `
27
+ const SQL_BUDGET_SPEND = `
25
28
  SELECT COALESCE(SUM(cost_usd), 0) AS total_cost
26
29
  FROM agent_events
27
30
  WHERE agent_id = ?
28
31
  AND event_type IN ('llm_call', 'completion')
29
32
  AND timestamp >= ?
30
33
  `;
31
- const SQL_COOLDOWN_CHECK = `
32
- SELECT id FROM alert_history
33
- WHERE alert_rule_id = ? AND delivered_at > datetime('now', '-15 minutes')
34
- LIMIT 1
34
+ const SQL_UPDATE_RULE_STATE = `
35
+ UPDATE alert_rules SET state = ?, last_triggered_at = ?, updated_at = datetime('now') WHERE id = ?
35
36
  `;
36
37
  const SQL_INSERT_HISTORY = `
37
38
  INSERT INTO alert_history (alert_rule_id, agent_id, rule_type, message, delivered_via)
@@ -161,16 +162,101 @@ async function sendTelegram(payload, telegramConfig) {
161
162
  }
162
163
  }
163
164
  // ---------------------------------------------------------------------------
164
- // Evaluation helpers
165
+ // Notification delivery helper
165
166
  // ---------------------------------------------------------------------------
167
+ async function deliverNotification(db, rule, message, isRecovery = false) {
168
+ const timestamp = new Date().toISOString();
169
+ const ruleType = isRecovery ? `${rule.rule_type}_recovery` : rule.rule_type;
170
+ const payload = {
171
+ agent_id: rule.agent_id,
172
+ rule_type: ruleType,
173
+ message,
174
+ timestamp,
175
+ };
176
+ const notificationType = rule.notification_type || "webhook";
177
+ if (notificationType === "webhook" && rule.webhook_url) {
178
+ postWebhook(rule.webhook_url, payload);
179
+ db.prepare(SQL_INSERT_HISTORY).run(rule.id, rule.agent_id, ruleType, message, "webhook");
180
+ }
181
+ else if (notificationType === "email") {
182
+ try {
183
+ let smtpConfig = null;
184
+ if (rule.smtp_config) {
185
+ try {
186
+ smtpConfig = JSON.parse(rule.smtp_config);
187
+ }
188
+ catch { /* ignore */ }
189
+ }
190
+ await sendEmail(payload, smtpConfig, rule.email);
191
+ db.prepare(SQL_INSERT_HISTORY).run(rule.id, rule.agent_id, ruleType, message, "email");
192
+ }
193
+ catch (emailErr) {
194
+ log.error("Email delivery failed, history not recorded", { ruleId: rule.id, err: String(emailErr) });
195
+ }
196
+ }
197
+ else if (notificationType === "telegram") {
198
+ try {
199
+ let telegramConfig = null;
200
+ if (rule.telegram_config) {
201
+ try {
202
+ telegramConfig = JSON.parse(rule.telegram_config);
203
+ }
204
+ catch { /* ignore */ }
205
+ }
206
+ if (telegramConfig) {
207
+ await sendTelegram(payload, telegramConfig);
208
+ db.prepare(SQL_INSERT_HISTORY).run(rule.id, rule.agent_id, ruleType, message, "telegram");
209
+ }
210
+ else {
211
+ log.warn("Telegram alert skipped: no telegram_config", { ruleId: rule.id });
212
+ }
213
+ }
214
+ catch (tgErr) {
215
+ log.error("Telegram delivery failed, history not recorded", { ruleId: rule.id, err: String(tgErr) });
216
+ }
217
+ }
218
+ }
219
+ // ---------------------------------------------------------------------------
220
+ // Budget period helpers
221
+ // ---------------------------------------------------------------------------
222
+ function getBudgetPeriodStart(period) {
223
+ const now = new Date();
224
+ switch (period) {
225
+ case "weekly": {
226
+ // Start of current week (Sunday)
227
+ const day = now.getUTCDay();
228
+ const diff = now.getUTCDate() - day;
229
+ const weekStart = new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), diff, 0, 0, 0, 0));
230
+ return weekStart.toISOString();
231
+ }
232
+ case "monthly": {
233
+ // Start of current month
234
+ const monthStart = new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), 1, 0, 0, 0, 0));
235
+ return monthStart.toISOString();
236
+ }
237
+ case "daily":
238
+ default: {
239
+ // Start of today (UTC midnight)
240
+ const todayStart = new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(), 0, 0, 0, 0));
241
+ return todayStart.toISOString();
242
+ }
243
+ }
244
+ }
166
245
  function evaluateAgentDown(db, rule, config) {
167
246
  const agent = db.prepare(SQL_AGENT_BY_ID).get(rule.agent_id);
168
247
  if (!agent) {
169
- // Agent has never been registered -- treat as inactive.
170
- return `Agent "${rule.agent_id}" has never been registered`;
248
+ return {
249
+ conditionMet: true,
250
+ message: `Agent "${rule.agent_id}" has never been registered`,
251
+ recoveryMessage: null,
252
+ };
171
253
  }
172
254
  if (!agent.updated_at) {
173
- return `Agent "${rule.agent_id}" has no recorded activity`;
255
+ return {
256
+ conditionMet: true,
257
+ message: `Agent "${rule.agent_id}" has no recorded activity`,
258
+ recoveryMessage: null,
259
+ };
174
260
  }
175
261
  const lastActivity = new Date(agent.updated_at.endsWith("Z") || agent.updated_at.includes("+")
176
262
  ? agent.updated_at
@@ -179,32 +265,62 @@ function evaluateAgentDown(db, rule, config) {
179
265
  const now = Date.now();
180
266
  if (now - lastActivity > threshold) {
181
267
  const minutesAgo = Math.round((now - lastActivity) / 60_000);
182
- return `Agent "${rule.agent_id}" has been inactive for ${minutesAgo} minutes (threshold: ${config.duration_minutes}m)`;
268
+ return {
269
+ conditionMet: true,
270
+ message: `Agent "${rule.agent_id}" has been inactive for ${minutesAgo} minutes (threshold: ${config.duration_minutes}m)`,
271
+ recoveryMessage: null,
272
+ };
183
273
  }
184
- return null;
274
+ // Agent is active - this is a recovery
275
+ return {
276
+ conditionMet: false,
277
+ message: null,
278
+ recoveryMessage: `Agent "${rule.agent_id}" is back online`,
279
+ };
185
280
  }
186
281
  function evaluateErrorRate(db, rule, config) {
187
282
  const windowStart = new Date(Date.now() - config.window_minutes * 60 * 1000).toISOString();
188
283
  const row = db.prepare(SQL_ERROR_RATE).get(rule.agent_id, windowStart);
189
284
  if (row.total === 0) {
190
- return null; // No events in window, nothing to evaluate.
285
+ // No events in window - if we were alerting, consider it recovered
286
+ return {
287
+ conditionMet: false,
288
+ message: null,
289
+ recoveryMessage: rule.state !== "normal" ? `Agent "${rule.agent_id}" error rate returned to normal (no events)` : null,
290
+ };
191
291
  }
192
292
  const rate = (row.errors / row.total) * 100;
193
293
  if (rate > config.threshold) {
194
- return `Agent "${rule.agent_id}" error rate is ${rate.toFixed(1)}% (${row.errors}/${row.total}) over the last ${config.window_minutes}m (threshold: ${config.threshold}%)`;
294
+ return {
295
+ conditionMet: true,
296
+ message: `Agent "${rule.agent_id}" error rate is ${rate.toFixed(1)}% (${row.errors}/${row.total}) over the last ${config.window_minutes}m (threshold: ${config.threshold}%)`,
297
+ recoveryMessage: null,
298
+ };
195
299
  }
196
- return null;
300
+ // Error rate is within threshold - recovery
301
+ return {
302
+ conditionMet: false,
303
+ message: null,
304
+ recoveryMessage: `Agent "${rule.agent_id}" error rate returned to normal (${rate.toFixed(1)}%)`,
305
+ };
197
306
  }
198
307
  function evaluateBudget(db, rule, config) {
199
- // UTC midnight today
200
- const todayUTC = new Date();
201
- todayUTC.setUTCHours(0, 0, 0, 0);
202
- const since = todayUTC.toISOString();
203
- const row = db.prepare(SQL_BUDGET_TODAY).get(rule.agent_id, since);
308
+ const since = getBudgetPeriodStart(rule.budget_period);
309
+ const row = db.prepare(SQL_BUDGET_SPEND).get(rule.agent_id, since);
310
+ const periodLabel = rule.budget_period || "daily";
204
311
  if (row.total_cost > config.threshold) {
205
- return `Agent "${rule.agent_id}" daily spend is $${row.total_cost.toFixed(4)} (threshold: $${config.threshold})`;
312
+ return {
313
+ conditionMet: true,
314
+ message: `Agent "${rule.agent_id}" ${periodLabel} spend is $${row.total_cost.toFixed(4)} (threshold: $${config.threshold})`,
315
+ recoveryMessage: null,
316
+ };
206
317
  }
207
- return null;
318
+ // Under budget - recovery (new period started or reset)
319
+ return {
320
+ conditionMet: false,
321
+ message: null,
322
+ recoveryMessage: `Agent "${rule.agent_id}" budget reset for new ${periodLabel} period`,
323
+ };
208
324
  }
209
325
  // ---------------------------------------------------------------------------
210
326
  // Core tick
@@ -220,80 +336,64 @@ async function tick(db) {
220
336
  }
221
337
  for (const rule of rules) {
222
338
  try {
339
+ // Skip kill_switch - handled separately via fireKillSwitchAlert()
340
+ if (rule.rule_type === "kill_switch") {
341
+ continue;
342
+ }
343
+ // Check if agent is inactive - skip evaluation
344
+ const agent = db.prepare(SQL_AGENT_BY_ID).get(rule.agent_id);
345
+ if (agent && agent.status === "inactive") {
346
+ log.debug("Skipping alert evaluation for inactive agent", { ruleId: rule.id, agentId: rule.agent_id });
347
+ continue;
348
+ }
223
349
  const config = JSON.parse(rule.config);
224
- let message = null;
350
+ let result;
225
351
  switch (rule.rule_type) {
226
352
  case "agent_down":
227
- message = evaluateAgentDown(db, rule, config);
353
+ result = evaluateAgentDown(db, rule, config);
228
354
  break;
229
355
  case "error_rate":
230
- message = evaluateErrorRate(db, rule, config);
356
+ result = evaluateErrorRate(db, rule, config);
231
357
  break;
232
358
  case "budget":
233
- message = evaluateBudget(db, rule, config);
359
+ result = evaluateBudget(db, rule, config);
234
360
  break;
235
361
  default:
236
362
  log.warn(`Unknown rule_type "${rule.rule_type}"`, { ruleId: rule.id });
237
363
  continue;
238
364
  }
239
- if (message === null) {
240
- continue; // Condition not met; nothing to fire.
241
- }
242
- // -- Cooldown check: skip if we already delivered for this rule recently.
243
- const recent = db.prepare(SQL_COOLDOWN_CHECK).get(rule.id);
244
- if (recent) {
245
- continue;
246
- }
247
- // -- Fire alert --------------------------------------------------------
248
- log.info(`Alert fired: ${message}`, { ruleId: rule.id, ruleType: rule.rule_type, agentId: rule.agent_id });
249
- const timestamp = new Date().toISOString();
250
- const payload = {
251
- agent_id: rule.agent_id,
252
- rule_type: rule.rule_type,
253
- message,
254
- timestamp,
255
- };
256
- const notificationType = rule.notification_type || "webhook";
257
- if (notificationType === "webhook" && rule.webhook_url) {
258
- postWebhook(rule.webhook_url, payload);
259
- db.prepare(SQL_INSERT_HISTORY).run(rule.id, rule.agent_id, rule.rule_type, message, "webhook");
260
- }
261
- else if (notificationType === "email") {
262
- try {
263
- let smtpConfig = null;
264
- if (rule.smtp_config) {
265
- try {
266
- smtpConfig = JSON.parse(rule.smtp_config);
267
- }
268
- catch { /* ignore */ }
269
- }
270
- await sendEmail(payload, smtpConfig, rule.email);
271
- db.prepare(SQL_INSERT_HISTORY).run(rule.id, rule.agent_id, rule.rule_type, message, "email");
365
+ const currentState = rule.state || "normal";
366
+ const now = new Date().toISOString();
367
+ if (result.conditionMet && result.message) {
368
+ // Condition is met
369
+ if (currentState === "normal") {
370
+ // First trigger - send notification and update state
371
+ log.info(`Alert fired: ${result.message}`, { ruleId: rule.id, ruleType: rule.rule_type, agentId: rule.agent_id });
372
+ await deliverNotification(db, rule, result.message);
373
+ const newState = rule.repeat_enabled ? "alerting" : "fired";
374
+ db.prepare(SQL_UPDATE_RULE_STATE).run(newState, now, rule.id);
272
375
  }
273
- catch (emailErr) {
274
- log.error("Email delivery failed, history not recorded", { ruleId: rule.id, err: String(emailErr) });
275
- }
276
- }
277
- else if (notificationType === "telegram") {
278
- try {
279
- let telegramConfig = null;
280
- if (rule.telegram_config) {
281
- try {
282
- telegramConfig = JSON.parse(rule.telegram_config);
283
- }
284
- catch { /* ignore */ }
285
- }
286
- if (telegramConfig) {
287
- await sendTelegram(payload, telegramConfig);
288
- db.prepare(SQL_INSERT_HISTORY).run(rule.id, rule.agent_id, rule.rule_type, message, "telegram");
289
- }
290
- else {
291
- log.warn("Telegram alert skipped: no telegram_config", { ruleId: rule.id });
376
+ else if (currentState === "alerting" && rule.repeat_enabled) {
377
+ // Check if repeat interval has passed
378
+ const lastTriggered = rule.last_triggered_at ? new Date(rule.last_triggered_at).getTime() : 0;
379
+ const intervalMs = rule.repeat_interval_minutes * 60 * 1000;
380
+ if (Date.now() - lastTriggered >= intervalMs) {
381
+ log.info(`Alert repeat: ${result.message}`, { ruleId: rule.id, ruleType: rule.rule_type, agentId: rule.agent_id });
382
+ await deliverNotification(db, rule, result.message);
383
+ db.prepare(SQL_UPDATE_RULE_STATE).run("alerting", now, rule.id);
292
384
  }
293
385
  }
294
- catch (tgErr) {
295
- log.error("Telegram delivery failed, history not recorded", { ruleId: rule.id, err: String(tgErr) });
386
+ // If state is "fired" (one-time), do nothing until recovery
387
+ }
388
+ else if (!result.conditionMet && (currentState === "alerting" || currentState === "fired")) {
389
+ // Condition recovered
390
+ log.info(`Alert recovered`, { ruleId: rule.id, ruleType: rule.rule_type, agentId: rule.agent_id });
391
+ // Send recovery notification if enabled
392
+ if (rule.recovery_notify && result.recoveryMessage) {
393
+ await deliverNotification(db, rule, result.recoveryMessage, true);
296
394
  }
395
+ // Reset state to normal
396
+ db.prepare(SQL_UPDATE_RULE_STATE).run("normal", null, rule.id);
297
397
  }
298
398
  }
299
399
  catch (err) {
@@ -302,6 +402,70 @@ async function tick(db) {
302
402
  }
303
403
  }
304
404
  // ---------------------------------------------------------------------------
405
+ // Kill Switch Alert Handler
406
+ // ---------------------------------------------------------------------------
407
+ /**
408
+ * Fire kill_switch alerts for an agent.
409
+ * Called immediately when a kill_switch event is triggered by the proxy.
410
+ */
411
+ async function fireKillSwitchAlert(db, data) {
412
+ const rules = db.prepare(SQL_KILL_SWITCH_RULES).all(data.agent_id);
413
+ if (rules.length === 0) {
414
+ log.debug("No kill_switch alert rules for agent", { agentId: data.agent_id });
415
+ return;
416
+ }
417
+ const message = [
418
+ `Kill switch triggered for agent "${data.agent_id}"`,
419
+ `Loop score: ${data.score.toFixed(1)} (threshold: ${data.threshold})`,
420
+ `Details: ${data.details.similarPrompts} similar prompts, ${data.details.similarResponses} similar responses, ${data.details.repeatedToolCalls} repeated tool calls`,
421
+ `Window size: ${data.window_size}`,
422
+ ].join("\n");
423
+ const now = new Date().toISOString();
424
+ for (const rule of rules) {
425
+ try {
426
+ const currentState = rule.state || "normal";
427
+ // Check if we should send based on state and repeat settings
428
+ if (currentState === "fired" && !rule.repeat_enabled) {
429
+ log.debug("Kill switch alert skipped (already fired, one-time)", { ruleId: rule.id });
430
+ continue;
431
+ }
432
+ if (currentState === "alerting" && rule.repeat_enabled) {
433
+ // Check repeat interval
434
+ const lastTriggered = rule.last_triggered_at ? new Date(rule.last_triggered_at).getTime() : 0;
435
+ const intervalMs = rule.repeat_interval_minutes * 60 * 1000;
436
+ if (Date.now() - lastTriggered < intervalMs) {
437
+ log.debug("Kill switch alert skipped due to repeat interval", { ruleId: rule.id });
438
+ continue;
439
+ }
440
+ }
441
+ log.info(`Kill switch alert fired`, { ruleId: rule.id, agentId: data.agent_id, score: data.score });
442
+ await deliverNotification(db, rule, message);
443
+ const newState = rule.repeat_enabled ? "alerting" : "fired";
444
+ db.prepare(SQL_UPDATE_RULE_STATE).run(newState, now, rule.id);
445
+ }
446
+ catch (err) {
447
+ log.error("Error firing kill_switch alert", { ruleId: rule.id, err: String(err) });
448
+ }
449
+ }
450
+ }
451
+ /**
452
+ * Reset kill_switch alert state when agent is reactivated.
453
+ * Called when agent status changes from inactive to active.
454
+ */
455
+ function resetKillSwitchAlerts(db, agentId) {
456
+ const rules = db.prepare(SQL_KILL_SWITCH_RULES).all(agentId);
457
+ for (const rule of rules) {
458
+ if (rule.state !== "normal") {
459
+ log.info("Resetting kill_switch alert state", { ruleId: rule.id, agentId });
460
+ if (rule.recovery_notify) {
461
+ const message = `Agent "${agentId}" has been reactivated`;
462
+ void deliverNotification(db, rule, message, true);
463
+ }
464
+ db.prepare(SQL_UPDATE_RULE_STATE).run("normal", null, rule.id);
465
+ }
466
+ }
467
+ }
468
+ // ---------------------------------------------------------------------------
305
469
  // Public API
306
470
  // ---------------------------------------------------------------------------
307
471
  function startEvaluator(options) {
@@ -1 +1 @@
1
- {"version":3,"file":"evaluator.js","sourceRoot":"","sources":["../../src/alerts/evaluator.ts"],"names":[],"mappings":";;;;;AA+bA,wCAuBC;AArdD,4DAAoC;AACpC,+CAAkD;AAElD,MAAM,GAAG,GAAG,IAAA,qBAAY,EAAC,WAAW,CAAC,CAAC;AAuDtC,8EAA8E;AAC9E,yBAAyB;AACzB,8EAA8E;AAE9E,MAAM,iBAAiB,GAAG,6CAA6C,CAAC;AAExE,MAAM,eAAe,GAAG,yCAAyC,CAAC;AAElE,MAAM,cAAc,GAAG;;;;;;;;CAQtB,CAAC;AAEF,MAAM,gBAAgB,GAAG;;;;;;CAMxB,CAAC;AAEF,MAAM,kBAAkB,GAAG;;;;CAI1B,CAAC;AAEF,MAAM,kBAAkB,GAAG;;;CAG1B,CAAC;AAEF,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,SAAS,WAAW,CAClB,GAAW,EACX,OAAoF;IAEpF,uEAAuE;IACvE,KAAK,oBAAoB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAC1C,CAAC;AAED,KAAK,UAAU,oBAAoB,CACjC,GAAW,EACX,OAAoF;IAEpF,MAAM,WAAW,GAAG,CAAC,CAAC;IACtB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;QACxD,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAC3B,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;gBAC7B,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;aACpC,CAAC,CAAC;YACH,IAAI,GAAG,CAAC,EAAE;gBAAE,OAAO;YACnB,GAAG,CAAC,KAAK,CAAC,yBAAyB,GAAG,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,GAAG,CAAC,EAAE,WAAW,EAAE,WAAW,GAAG,CAAC,EAAE,CAAC,CAAC;QAChH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,KAAK,CAAC,qBAAqB,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,GAAG,CAAC,EAAE,WAAW,EAAE,WAAW,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClH,CAAC;QACD,IAAI,OAAO,GAAG,WAAW,EAAE,CAAC;YAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,cAAc;YAC3D,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAE9E,SAAS,gBAAgB,CAAC,UAA8B;IACtD,uCAAuC;IACvC,IAAI,UAAU,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;QAClC,OAAO,oBAAU,CAAC,eAAe,CAAC;YAChC,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,IAAI,EAAE,UAAU,CAAC,IAAI,IAAI,GAAG;YAC5B,MAAM,EAAE,UAAU,CAAC,MAAM,IAAI,KAAK;YAClC,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1G,CAAC,CAAC;IACL,CAAC;IAED,qCAAqC;IACrC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;IACnC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAEvB,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,KAAK,EAAE,EAAE,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,MAAM,CAAC;IAClD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;IACnC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;IAEnC,OAAO,oBAAU,CAAC,eAAe,CAAC;QAChC,IAAI;QACJ,IAAI;QACJ,MAAM;QACN,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAClD,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,SAAS,CACtB,OAAoF,EACpF,UAA8B,EAC9B,QAAwB;IAExB,MAAM,SAAS,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAC/C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,GAAG,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;QACrD,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,UAAU,EAAE,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,uBAAuB,CAAC;IAClF,MAAM,EAAE,GAAG,UAAU,EAAE,EAAE,IAAI,QAAQ,CAAC;IACtC,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,GAAG,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;QACzD,OAAO;IACT,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,gBAAgB,SAAS,WAAW,OAAO,CAAC,QAAQ,EAAE,CAAC;IACvE,MAAM,IAAI,GAAG;QACX,UAAU,SAAS,EAAE;QACrB,UAAU,OAAO,CAAC,QAAQ,EAAE;QAC5B,SAAS,OAAO,CAAC,SAAS,EAAE;QAC5B,EAAE;QACF,OAAO,CAAC,OAAO;KAChB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,KAAK,CAAC,uBAAuB,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,oBAAoB;AACpB,8EAA8E;AAE9E,KAAK,UAAU,YAAY,CACzB,OAAoF,EACpF,cAA8B;IAE9B,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,gBAAgB,EAAE,GAAG,cAAc,CAAC;IAEhE,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO,EAAE,CAAC;QAC3B,GAAG,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;QACjE,OAAO;IACT,CAAC;IAED,kCAAkC;IAClC,MAAM,QAAQ,GAAG,gBAAgB,IAAI,sEAAsE,CAAC;IAC5G,MAAM,IAAI,GAAG,QAAQ;SAClB,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC;SACxC,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;SAC7D,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC;SACtC,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAE9C,MAAM,GAAG,GAAG,+BAA+B,SAAS,cAAc,CAAC;IAEnE,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC3B,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,OAAO;gBACP,IAAI;gBACJ,UAAU,EAAE,MAAM;aACnB,CAAC;YACF,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;SACpC,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAC9B,GAAG,CAAC,KAAK,CAAC,yBAAyB,GAAG,CAAC,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACvE,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E,SAAS,iBAAiB,CACxB,EAAqB,EACrB,IAAkB,EAClB,MAAuB;IAEvB,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAE9C,CAAC;IAEd,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,wDAAwD;QACxD,OAAO,UAAU,IAAI,CAAC,QAAQ,6BAA6B,CAAC;IAC9D,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QACtB,OAAO,UAAU,IAAI,CAAC,QAAQ,4BAA4B,CAAC;IAC7D,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,IAAI,CAC3B,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC9D,CAAC,CAAC,KAAK,CAAC,UAAU;QAClB,CAAC,CAAC,KAAK,CAAC,UAAU,GAAG,GAAG,CAC3B,CAAC,OAAO,EAAE,CAAC;IACZ,MAAM,SAAS,GAAG,MAAM,CAAC,gBAAgB,GAAG,EAAE,GAAG,IAAI,CAAC;IACtD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEvB,IAAI,GAAG,GAAG,YAAY,GAAG,SAAS,EAAE,CAAC;QACnC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,YAAY,CAAC,GAAG,MAAM,CAAC,CAAC;QAC7D,OAAO,UAAU,IAAI,CAAC,QAAQ,2BAA2B,UAAU,wBAAwB,MAAM,CAAC,gBAAgB,IAAI,CAAC;IACzH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,iBAAiB,CACxB,EAAqB,EACrB,IAAkB,EAClB,MAAuB;IAEvB,MAAM,WAAW,GAAG,IAAI,IAAI,CAC1B,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,cAAc,GAAG,EAAE,GAAG,IAAI,CAC/C,CAAC,WAAW,EAAE,CAAC;IAEhB,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAGpE,CAAC;IAEF,IAAI,GAAG,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC,CAAC,4CAA4C;IAC3D,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;IAE5C,IAAI,IAAI,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QAC5B,OAAO,UAAU,IAAI,CAAC,QAAQ,mBAAmB,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK,mBAAmB,MAAM,CAAC,cAAc,iBAAiB,MAAM,CAAC,SAAS,IAAI,CAAC;IAC7K,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,cAAc,CACrB,EAAqB,EACrB,IAAkB,EAClB,MAAoB;IAEpB,qBAAqB;IACrB,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC;IAC5B,QAAQ,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACjC,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IAErC,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAEhE,CAAC;IAEF,IAAI,GAAG,CAAC,UAAU,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QACtC,OAAO,UAAU,IAAI,CAAC,QAAQ,qBAAqB,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,MAAM,CAAC,SAAS,GAAG,CAAC;IACnH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,KAAK,UAAU,IAAI,CAAC,EAAqB;IACvC,IAAI,KAAqB,CAAC;IAC1B,IAAI,CAAC;QACH,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,GAAG,EAAoB,CAAC;IAChE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,KAAK,CAAC,6BAA6B,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC/D,OAAO;IACT,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvC,IAAI,OAAO,GAAkB,IAAI,CAAC;YAElC,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC;gBACvB,KAAK,YAAY;oBACf,OAAO,GAAG,iBAAiB,CAAC,EAAE,EAAE,IAAI,EAAE,MAAyB,CAAC,CAAC;oBACjE,MAAM;gBACR,KAAK,YAAY;oBACf,OAAO,GAAG,iBAAiB,CAAC,EAAE,EAAE,IAAI,EAAE,MAAyB,CAAC,CAAC;oBACjE,MAAM;gBACR,KAAK,QAAQ;oBACX,OAAO,GAAG,cAAc,CAAC,EAAE,EAAE,IAAI,EAAE,MAAsB,CAAC,CAAC;oBAC3D,MAAM;gBACR;oBACE,GAAG,CAAC,IAAI,CAAC,sBAAsB,IAAI,CAAC,SAAS,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;oBACvE,SAAS;YACb,CAAC;YAED,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,SAAS,CAAC,sCAAsC;YAClD,CAAC;YAED,0EAA0E;YAC1E,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC3D,IAAI,MAAM,EAAE,CAAC;gBACX,SAAS;YACX,CAAC;YAED,yEAAyE;YAEzE,GAAG,CAAC,IAAI,CAAC,gBAAgB,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YAE3G,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAC3C,MAAM,OAAO,GAAG;gBACd,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,OAAO;gBACP,SAAS;aACV,CAAC;YAEF,MAAM,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,IAAI,SAAS,CAAC;YAE7D,IAAI,gBAAgB,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACvD,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;gBACvC,EAAE,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAChC,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,SAAS,EACd,OAAO,EACP,SAAS,CACV,CAAC;YACJ,CAAC;iBAAM,IAAI,gBAAgB,KAAK,OAAO,EAAE,CAAC;gBACxC,IAAI,CAAC;oBACH,IAAI,UAAU,GAAsB,IAAI,CAAC;oBACzC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;wBACrB,IAAI,CAAC;4BAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;wBAAC,CAAC;wBAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;oBAC3E,CAAC;oBACD,MAAM,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;oBACjD,EAAE,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAChC,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,SAAS,EACd,OAAO,EACP,OAAO,CACR,CAAC;gBACJ,CAAC;gBAAC,OAAO,QAAQ,EAAE,CAAC;oBAClB,GAAG,CAAC,KAAK,CAAC,6CAA6C,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACvG,CAAC;YACH,CAAC;iBAAM,IAAI,gBAAgB,KAAK,UAAU,EAAE,CAAC;gBAC3C,IAAI,CAAC;oBACH,IAAI,cAAc,GAA0B,IAAI,CAAC;oBACjD,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;wBACzB,IAAI,CAAC;4BAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;wBAAC,CAAC;wBAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;oBACnF,CAAC;oBACD,IAAI,cAAc,EAAE,CAAC;wBACnB,MAAM,YAAY,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;wBAC5C,EAAE,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAChC,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,SAAS,EACd,OAAO,EACP,UAAU,CACX,CAAC;oBACJ,CAAC;yBAAM,CAAC;wBACN,GAAG,CAAC,IAAI,CAAC,4CAA4C,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC9E,CAAC;gBACH,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,GAAG,CAAC,KAAK,CAAC,gDAAgD,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACvG,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,KAAK,CAAC,uBAAuB,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACtG,CAAC;IACH,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E,SAAgB,cAAc,CAAC,OAAyB;IACtD,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC;IAC9C,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC;IAEvB,0DAA0D;IAC1D,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CACrB,GAAG,CAAC,KAAK,CAAC,uBAAuB,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CACzD,CAAC;IAEF,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7B,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CACrB,GAAG,CAAC,KAAK,CAAC,uBAAuB,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CACzD,CAAC;IACJ,CAAC,EAAE,UAAU,CAAC,CAAC;IAEf,sEAAsE;IACtE,KAAK,CAAC,KAAK,EAAE,CAAC;IAEd,OAAO;QACL,IAAI;YACF,aAAa,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"evaluator.js","sourceRoot":"","sources":["../../src/alerts/evaluator.ts"],"names":[],"mappings":"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"}