agentic-qe 1.9.3 → 1.9.4

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 (108) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/README.md +30 -5
  3. package/config/.env.otel.example +25 -0
  4. package/config/OTEL-QUICK-REFERENCE.md +137 -0
  5. package/config/README-OTEL.md +222 -0
  6. package/config/alerting-rules.yml +518 -0
  7. package/config/docker-compose.otel.yml +187 -0
  8. package/config/grafana/dashboards/agentic-qe-overview.json +286 -0
  9. package/config/grafana/provisioning/dashboards/dashboards.yml +19 -0
  10. package/config/grafana/provisioning/datasources/datasources.yml +53 -0
  11. package/config/otel-collector-config.yaml.example +145 -0
  12. package/config/prometheus.yml.example +106 -0
  13. package/dist/alerting/AlertManager.d.ts +120 -0
  14. package/dist/alerting/AlertManager.d.ts.map +1 -0
  15. package/dist/alerting/AlertManager.js +345 -0
  16. package/dist/alerting/AlertManager.js.map +1 -0
  17. package/dist/alerting/FeedbackRouter.d.ts +98 -0
  18. package/dist/alerting/FeedbackRouter.d.ts.map +1 -0
  19. package/dist/alerting/FeedbackRouter.js +331 -0
  20. package/dist/alerting/FeedbackRouter.js.map +1 -0
  21. package/dist/alerting/StrategyApplicator.d.ts +120 -0
  22. package/dist/alerting/StrategyApplicator.d.ts.map +1 -0
  23. package/dist/alerting/StrategyApplicator.js +299 -0
  24. package/dist/alerting/StrategyApplicator.js.map +1 -0
  25. package/dist/alerting/index.d.ts +68 -0
  26. package/dist/alerting/index.d.ts.map +1 -0
  27. package/dist/alerting/index.js +112 -0
  28. package/dist/alerting/index.js.map +1 -0
  29. package/dist/alerting/types.d.ts +118 -0
  30. package/dist/alerting/types.d.ts.map +1 -0
  31. package/dist/alerting/types.js +11 -0
  32. package/dist/alerting/types.js.map +1 -0
  33. package/dist/cli/init/claude-config.d.ts.map +1 -1
  34. package/dist/cli/init/claude-config.js +12 -7
  35. package/dist/cli/init/claude-config.js.map +1 -1
  36. package/dist/core/memory/IPatternStore.d.ts +209 -0
  37. package/dist/core/memory/IPatternStore.d.ts.map +1 -0
  38. package/dist/core/memory/IPatternStore.js +15 -0
  39. package/dist/core/memory/IPatternStore.js.map +1 -0
  40. package/dist/core/memory/MigrationTools.d.ts +192 -0
  41. package/dist/core/memory/MigrationTools.d.ts.map +1 -0
  42. package/dist/core/memory/MigrationTools.js +615 -0
  43. package/dist/core/memory/MigrationTools.js.map +1 -0
  44. package/dist/core/memory/NeuralEnhancement.d.ts +154 -0
  45. package/dist/core/memory/NeuralEnhancement.d.ts.map +1 -0
  46. package/dist/core/memory/NeuralEnhancement.js +598 -0
  47. package/dist/core/memory/NeuralEnhancement.js.map +1 -0
  48. package/dist/core/memory/PatternStoreFactory.d.ts +143 -0
  49. package/dist/core/memory/PatternStoreFactory.d.ts.map +1 -0
  50. package/dist/core/memory/PatternStoreFactory.js +370 -0
  51. package/dist/core/memory/PatternStoreFactory.js.map +1 -0
  52. package/dist/core/memory/RealAgentDBAdapter.d.ts +1 -0
  53. package/dist/core/memory/RealAgentDBAdapter.d.ts.map +1 -1
  54. package/dist/core/memory/RealAgentDBAdapter.js +28 -20
  55. package/dist/core/memory/RealAgentDBAdapter.js.map +1 -1
  56. package/dist/core/memory/RuVectorPatternStore.d.ts +198 -0
  57. package/dist/core/memory/RuVectorPatternStore.d.ts.map +1 -0
  58. package/dist/core/memory/RuVectorPatternStore.js +605 -0
  59. package/dist/core/memory/RuVectorPatternStore.js.map +1 -0
  60. package/dist/core/memory/SelfHealingMonitor.d.ts +186 -0
  61. package/dist/core/memory/SelfHealingMonitor.d.ts.map +1 -0
  62. package/dist/core/memory/SelfHealingMonitor.js +451 -0
  63. package/dist/core/memory/SelfHealingMonitor.js.map +1 -0
  64. package/dist/core/memory/SwarmMemoryManager.d.ts +62 -0
  65. package/dist/core/memory/SwarmMemoryManager.d.ts.map +1 -1
  66. package/dist/core/memory/SwarmMemoryManager.js +97 -0
  67. package/dist/core/memory/SwarmMemoryManager.js.map +1 -1
  68. package/dist/core/memory/index.d.ts +11 -0
  69. package/dist/core/memory/index.d.ts.map +1 -1
  70. package/dist/core/memory/index.js +36 -1
  71. package/dist/core/memory/index.js.map +1 -1
  72. package/dist/reasoning/RuVectorReasoningAdapter.d.ts +232 -0
  73. package/dist/reasoning/RuVectorReasoningAdapter.d.ts.map +1 -0
  74. package/dist/reasoning/RuVectorReasoningAdapter.js +585 -0
  75. package/dist/reasoning/RuVectorReasoningAdapter.js.map +1 -0
  76. package/dist/reasoning/index.d.ts +2 -0
  77. package/dist/reasoning/index.d.ts.map +1 -1
  78. package/dist/reasoning/index.js +6 -1
  79. package/dist/reasoning/index.js.map +1 -1
  80. package/dist/reporting/ResultAggregator.d.ts +107 -0
  81. package/dist/reporting/ResultAggregator.d.ts.map +1 -0
  82. package/dist/reporting/ResultAggregator.js +435 -0
  83. package/dist/reporting/ResultAggregator.js.map +1 -0
  84. package/dist/reporting/index.d.ts +48 -0
  85. package/dist/reporting/index.d.ts.map +1 -0
  86. package/dist/reporting/index.js +154 -0
  87. package/dist/reporting/index.js.map +1 -0
  88. package/dist/reporting/reporters/ControlLoopReporter.d.ts +128 -0
  89. package/dist/reporting/reporters/ControlLoopReporter.d.ts.map +1 -0
  90. package/dist/reporting/reporters/ControlLoopReporter.js +417 -0
  91. package/dist/reporting/reporters/ControlLoopReporter.js.map +1 -0
  92. package/dist/reporting/reporters/HumanReadableReporter.d.ts +140 -0
  93. package/dist/reporting/reporters/HumanReadableReporter.d.ts.map +1 -0
  94. package/dist/reporting/reporters/HumanReadableReporter.js +524 -0
  95. package/dist/reporting/reporters/HumanReadableReporter.js.map +1 -0
  96. package/dist/reporting/reporters/JSONReporter.d.ts +193 -0
  97. package/dist/reporting/reporters/JSONReporter.d.ts.map +1 -0
  98. package/dist/reporting/reporters/JSONReporter.js +324 -0
  99. package/dist/reporting/reporters/JSONReporter.js.map +1 -0
  100. package/dist/reporting/reporters/index.d.ts +14 -0
  101. package/dist/reporting/reporters/index.d.ts.map +1 -0
  102. package/dist/reporting/reporters/index.js +19 -0
  103. package/dist/reporting/reporters/index.js.map +1 -0
  104. package/dist/reporting/types.d.ts +427 -0
  105. package/dist/reporting/types.d.ts.map +1 -0
  106. package/dist/reporting/types.js +12 -0
  107. package/dist/reporting/types.js.map +1 -0
  108. package/package.json +9 -1
@@ -0,0 +1,120 @@
1
+ /**
2
+ * AlertManager - Core Alert Evaluation Engine
3
+ *
4
+ * Evaluates metrics against alert rules and manages alert lifecycle.
5
+ * This is the ACTUAL implementation, not documentation.
6
+ *
7
+ * @module alerting/AlertManager
8
+ * @version 1.0.0
9
+ */
10
+ import { EventEmitter } from 'events';
11
+ import { Alert, AlertRule, AlertEvaluation, AlertSeverity, AlertingConfig, MetricValue } from './types';
12
+ /**
13
+ * AlertManager handles alert evaluation, firing, and lifecycle management.
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * const manager = new AlertManager();
18
+ * manager.loadRules(rules);
19
+ * manager.on('alert:fired', (alert) => console.log('Alert!', alert));
20
+ * manager.evaluate(metrics);
21
+ * ```
22
+ */
23
+ export declare class AlertManager extends EventEmitter {
24
+ private rules;
25
+ private activeAlerts;
26
+ private alertHistory;
27
+ private cooldowns;
28
+ private config;
29
+ private evaluationTimer?;
30
+ private alertCountThisHour;
31
+ private hourlyResetTimer?;
32
+ constructor(config?: Partial<AlertingConfig>);
33
+ /**
34
+ * Load alert rules from configuration
35
+ */
36
+ loadRules(rules: AlertRule[]): void;
37
+ /**
38
+ * Parse rules from YAML-style config object
39
+ */
40
+ loadRulesFromConfig(config: {
41
+ groups: Array<{
42
+ name: string;
43
+ rules: unknown[];
44
+ }>;
45
+ }): void;
46
+ /**
47
+ * Evaluate metrics against all rules
48
+ */
49
+ evaluate(metrics: MetricValue[]): AlertEvaluation[];
50
+ /**
51
+ * Evaluate a single rule against a metric
52
+ */
53
+ private evaluateRule;
54
+ /**
55
+ * Extract threshold value from expression
56
+ */
57
+ private extractThreshold;
58
+ /**
59
+ * Extract comparison operator from expression
60
+ */
61
+ private extractComparison;
62
+ /**
63
+ * Compare values based on operator
64
+ */
65
+ private compareValues;
66
+ /**
67
+ * Find metrics relevant to a rule
68
+ */
69
+ private findRelevantMetrics;
70
+ /**
71
+ * Handle a firing alert
72
+ */
73
+ private handleFiringAlert;
74
+ /**
75
+ * Handle alert resolution
76
+ */
77
+ private handleResolvedAlert;
78
+ /**
79
+ * Generate unique fingerprint for alert deduplication
80
+ */
81
+ private generateFingerprint;
82
+ /**
83
+ * Check if alert is on cooldown
84
+ */
85
+ private isOnCooldown;
86
+ /**
87
+ * Start periodic evaluation
88
+ */
89
+ startEvaluation(metricsProvider: () => MetricValue[]): void;
90
+ /**
91
+ * Stop periodic evaluation
92
+ */
93
+ stopEvaluation(): void;
94
+ /**
95
+ * Start hourly counter reset
96
+ */
97
+ private startHourlyReset;
98
+ /**
99
+ * Get all active alerts
100
+ */
101
+ getActiveAlerts(): Alert[];
102
+ /**
103
+ * Get alert history
104
+ */
105
+ getAlertHistory(limit?: number): Alert[];
106
+ /**
107
+ * Get alert statistics
108
+ */
109
+ getStats(): {
110
+ activeCount: number;
111
+ totalFired: number;
112
+ bySeverity: Record<AlertSeverity, number>;
113
+ alertsThisHour: number;
114
+ };
115
+ /**
116
+ * Cleanup resources
117
+ */
118
+ destroy(): void;
119
+ }
120
+ //# sourceMappingURL=AlertManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AlertManager.d.ts","sourceRoot":"","sources":["../../src/alerting/AlertManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EACL,KAAK,EACL,SAAS,EACT,eAAe,EACf,aAAa,EAEb,cAAc,EACd,WAAW,EAEZ,MAAM,SAAS,CAAC;AAUjB;;;;;;;;;;GAUG;AACH,qBAAa,YAAa,SAAQ,YAAY;IAC5C,OAAO,CAAC,KAAK,CAAqC;IAClD,OAAO,CAAC,YAAY,CAAiC;IACrD,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,SAAS,CAAgC;IACjD,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,eAAe,CAAC,CAAiB;IACzC,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,gBAAgB,CAAC,CAAiB;gBAE9B,MAAM,GAAE,OAAO,CAAC,cAAc,CAAM;IAMhD;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,IAAI;IAQnC;;OAEG;IACH,mBAAmB,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,OAAO,EAAE,CAAA;SAAE,CAAC,CAAA;KAAE,GAAG,IAAI;IAsCxF;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,eAAe,EAAE;IAqBnD;;OAEG;IACH,OAAO,CAAC,YAAY;IAiBpB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAMxB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAKzB;;OAEG;IACH,OAAO,CAAC,aAAa;IAYrB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAW3B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAuDzB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAY3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAK3B;;OAEG;IACH,OAAO,CAAC,YAAY;IAMpB;;OAEG;IACH,eAAe,CAAC,eAAe,EAAE,MAAM,WAAW,EAAE,GAAG,IAAI;IAQ3D;;OAEG;IACH,cAAc,IAAI,IAAI;IAOtB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAMxB;;OAEG;IACH,eAAe,IAAI,KAAK,EAAE;IAI1B;;OAEG;IACH,eAAe,CAAC,KAAK,SAAM,GAAG,KAAK,EAAE;IAIrC;;OAEG;IACH,QAAQ,IAAI;QACV,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QAC1C,cAAc,EAAE,MAAM,CAAC;KACxB;IAoBD;;OAEG;IACH,OAAO,IAAI,IAAI;CAOhB"}
@@ -0,0 +1,345 @@
1
+ "use strict";
2
+ /**
3
+ * AlertManager - Core Alert Evaluation Engine
4
+ *
5
+ * Evaluates metrics against alert rules and manages alert lifecycle.
6
+ * This is the ACTUAL implementation, not documentation.
7
+ *
8
+ * @module alerting/AlertManager
9
+ * @version 1.0.0
10
+ */
11
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ var desc = Object.getOwnPropertyDescriptor(m, k);
14
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
15
+ desc = { enumerable: true, get: function() { return m[k]; } };
16
+ }
17
+ Object.defineProperty(o, k2, desc);
18
+ }) : (function(o, m, k, k2) {
19
+ if (k2 === undefined) k2 = k;
20
+ o[k2] = m[k];
21
+ }));
22
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
23
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
24
+ }) : function(o, v) {
25
+ o["default"] = v;
26
+ });
27
+ var __importStar = (this && this.__importStar) || (function () {
28
+ var ownKeys = function(o) {
29
+ ownKeys = Object.getOwnPropertyNames || function (o) {
30
+ var ar = [];
31
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
32
+ return ar;
33
+ };
34
+ return ownKeys(o);
35
+ };
36
+ return function (mod) {
37
+ if (mod && mod.__esModule) return mod;
38
+ var result = {};
39
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
40
+ __setModuleDefault(result, mod);
41
+ return result;
42
+ };
43
+ })();
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.AlertManager = void 0;
46
+ const events_1 = require("events");
47
+ const crypto = __importStar(require("crypto"));
48
+ const DEFAULT_CONFIG = {
49
+ evaluationInterval: 15000, // 15 seconds
50
+ cooldownPeriod: 300000, // 5 minutes
51
+ maxAlertsPerHour: 100,
52
+ enableFeedbackLoop: true,
53
+ feedbackDelay: 1000
54
+ };
55
+ /**
56
+ * AlertManager handles alert evaluation, firing, and lifecycle management.
57
+ *
58
+ * @example
59
+ * ```typescript
60
+ * const manager = new AlertManager();
61
+ * manager.loadRules(rules);
62
+ * manager.on('alert:fired', (alert) => console.log('Alert!', alert));
63
+ * manager.evaluate(metrics);
64
+ * ```
65
+ */
66
+ class AlertManager extends events_1.EventEmitter {
67
+ constructor(config = {}) {
68
+ super();
69
+ this.rules = new Map();
70
+ this.activeAlerts = new Map();
71
+ this.alertHistory = [];
72
+ this.cooldowns = new Map();
73
+ this.alertCountThisHour = 0;
74
+ this.config = { ...DEFAULT_CONFIG, ...config };
75
+ this.startHourlyReset();
76
+ }
77
+ /**
78
+ * Load alert rules from configuration
79
+ */
80
+ loadRules(rules) {
81
+ this.rules.clear();
82
+ for (const rule of rules) {
83
+ this.rules.set(rule.name, rule);
84
+ }
85
+ this.emit('rules:loaded', rules.length);
86
+ }
87
+ /**
88
+ * Parse rules from YAML-style config object
89
+ */
90
+ loadRulesFromConfig(config) {
91
+ const rules = [];
92
+ for (const group of config.groups) {
93
+ for (const rawRule of group.rules) {
94
+ const rule = rawRule;
95
+ rules.push({
96
+ name: rule.alert,
97
+ expr: rule.expr,
98
+ forDuration: rule.for || '0s',
99
+ labels: {
100
+ severity: rule.labels?.severity || 'warning',
101
+ component: rule.labels?.component || 'unknown',
102
+ alert_type: rule.labels?.alert_type || 'generic',
103
+ feedback_action: rule.labels?.feedback_action || 'adjust_strategy',
104
+ agent_scope: rule.labels?.agent_scope
105
+ },
106
+ annotations: {
107
+ summary: rule.annotations?.summary || '',
108
+ description: rule.annotations?.description || '',
109
+ feedback_strategy: rule.annotations?.feedback_strategy,
110
+ feedback_action: rule.annotations?.feedback_action,
111
+ runbook_url: rule.annotations?.runbook_url
112
+ }
113
+ });
114
+ }
115
+ }
116
+ this.loadRules(rules);
117
+ }
118
+ /**
119
+ * Evaluate metrics against all rules
120
+ */
121
+ evaluate(metrics) {
122
+ const evaluations = [];
123
+ for (const rule of Array.from(this.rules.values())) {
124
+ const relevantMetrics = this.findRelevantMetrics(rule, metrics);
125
+ for (const metric of relevantMetrics) {
126
+ const evaluation = this.evaluateRule(rule, metric);
127
+ evaluations.push(evaluation);
128
+ if (evaluation.isFiring) {
129
+ this.handleFiringAlert(rule, metric, evaluation);
130
+ }
131
+ else {
132
+ this.handleResolvedAlert(rule, metric);
133
+ }
134
+ }
135
+ }
136
+ return evaluations;
137
+ }
138
+ /**
139
+ * Evaluate a single rule against a metric
140
+ */
141
+ evaluateRule(rule, metric) {
142
+ const threshold = this.extractThreshold(rule.expr);
143
+ const comparison = this.extractComparison(rule.expr);
144
+ const isFiring = this.compareValues(metric.value, threshold, comparison);
145
+ return {
146
+ rule,
147
+ metric,
148
+ threshold,
149
+ actual: metric.value,
150
+ isFiring,
151
+ message: isFiring
152
+ ? `${rule.name}: ${metric.value} ${comparison} ${threshold}`
153
+ : `${rule.name}: OK (${metric.value})`
154
+ };
155
+ }
156
+ /**
157
+ * Extract threshold value from expression
158
+ */
159
+ extractThreshold(expr) {
160
+ // Match patterns like "> 0.05", "< 80", ">= 5"
161
+ const match = expr.match(/[<>=]+\s*([\d.]+)\s*$/);
162
+ return match ? parseFloat(match[1]) : 0;
163
+ }
164
+ /**
165
+ * Extract comparison operator from expression
166
+ */
167
+ extractComparison(expr) {
168
+ const match = expr.match(/([<>=]+)\s*[\d.]+\s*$/);
169
+ return match ? match[1] : '>';
170
+ }
171
+ /**
172
+ * Compare values based on operator
173
+ */
174
+ compareValues(actual, threshold, operator) {
175
+ switch (operator) {
176
+ case '>': return actual > threshold;
177
+ case '>=': return actual >= threshold;
178
+ case '<': return actual < threshold;
179
+ case '<=': return actual <= threshold;
180
+ case '==': return actual === threshold;
181
+ case '!=': return actual !== threshold;
182
+ default: return actual > threshold;
183
+ }
184
+ }
185
+ /**
186
+ * Find metrics relevant to a rule
187
+ */
188
+ findRelevantMetrics(rule, metrics) {
189
+ // Extract metric name from expression (e.g., "aqe_quality_coverage_line" from expr)
190
+ const metricNameMatch = rule.expr.match(/([a-z_]+)/);
191
+ const metricName = metricNameMatch ? metricNameMatch[1] : '';
192
+ return metrics.filter(m => m.name.includes(metricName) ||
193
+ rule.expr.includes(m.name));
194
+ }
195
+ /**
196
+ * Handle a firing alert
197
+ */
198
+ handleFiringAlert(rule, metric, evaluation) {
199
+ const fingerprint = this.generateFingerprint(rule, metric);
200
+ // Check cooldown
201
+ if (this.isOnCooldown(fingerprint)) {
202
+ return;
203
+ }
204
+ // Check rate limiting
205
+ if (this.alertCountThisHour >= this.config.maxAlertsPerHour) {
206
+ this.emit('alert:suppressed', { reason: 'rate_limit', rule: rule.name });
207
+ return;
208
+ }
209
+ // Check if already firing
210
+ if (this.activeAlerts.has(fingerprint)) {
211
+ return;
212
+ }
213
+ const alert = {
214
+ id: crypto.randomUUID(),
215
+ name: rule.name,
216
+ status: 'firing',
217
+ severity: rule.labels.severity,
218
+ labels: { ...rule.labels, ...metric.labels },
219
+ annotations: {
220
+ ...rule.annotations,
221
+ actual_value: String(metric.value),
222
+ threshold: String(evaluation.threshold)
223
+ },
224
+ value: metric.value,
225
+ firedAt: new Date(),
226
+ fingerprint
227
+ };
228
+ this.activeAlerts.set(fingerprint, alert);
229
+ this.alertHistory.push(alert);
230
+ this.alertCountThisHour++;
231
+ this.cooldowns.set(fingerprint, new Date());
232
+ this.emit('alert:fired', alert);
233
+ // Trigger feedback loop if enabled
234
+ if (this.config.enableFeedbackLoop) {
235
+ setTimeout(() => {
236
+ this.emit('alert:feedback', {
237
+ alert,
238
+ feedbackAction: rule.labels.feedback_action,
239
+ strategy: rule.annotations.feedback_strategy,
240
+ targetAgent: rule.labels.agent_scope
241
+ });
242
+ }, this.config.feedbackDelay);
243
+ }
244
+ }
245
+ /**
246
+ * Handle alert resolution
247
+ */
248
+ handleResolvedAlert(rule, metric) {
249
+ const fingerprint = this.generateFingerprint(rule, metric);
250
+ const existingAlert = this.activeAlerts.get(fingerprint);
251
+ if (existingAlert && existingAlert.status === 'firing') {
252
+ existingAlert.status = 'resolved';
253
+ existingAlert.resolvedAt = new Date();
254
+ this.activeAlerts.delete(fingerprint);
255
+ this.emit('alert:resolved', existingAlert);
256
+ }
257
+ }
258
+ /**
259
+ * Generate unique fingerprint for alert deduplication
260
+ */
261
+ generateFingerprint(rule, metric) {
262
+ const data = `${rule.name}:${metric.name}:${JSON.stringify(metric.labels)}`;
263
+ return crypto.createHash('md5').update(data).digest('hex');
264
+ }
265
+ /**
266
+ * Check if alert is on cooldown
267
+ */
268
+ isOnCooldown(fingerprint) {
269
+ const lastFired = this.cooldowns.get(fingerprint);
270
+ if (!lastFired)
271
+ return false;
272
+ return Date.now() - lastFired.getTime() < this.config.cooldownPeriod;
273
+ }
274
+ /**
275
+ * Start periodic evaluation
276
+ */
277
+ startEvaluation(metricsProvider) {
278
+ this.stopEvaluation();
279
+ this.evaluationTimer = setInterval(() => {
280
+ const metrics = metricsProvider();
281
+ this.evaluate(metrics);
282
+ }, this.config.evaluationInterval);
283
+ }
284
+ /**
285
+ * Stop periodic evaluation
286
+ */
287
+ stopEvaluation() {
288
+ if (this.evaluationTimer) {
289
+ clearInterval(this.evaluationTimer);
290
+ this.evaluationTimer = undefined;
291
+ }
292
+ }
293
+ /**
294
+ * Start hourly counter reset
295
+ */
296
+ startHourlyReset() {
297
+ this.hourlyResetTimer = setInterval(() => {
298
+ this.alertCountThisHour = 0;
299
+ }, 3600000); // 1 hour
300
+ }
301
+ /**
302
+ * Get all active alerts
303
+ */
304
+ getActiveAlerts() {
305
+ return Array.from(this.activeAlerts.values());
306
+ }
307
+ /**
308
+ * Get alert history
309
+ */
310
+ getAlertHistory(limit = 100) {
311
+ return this.alertHistory.slice(-limit);
312
+ }
313
+ /**
314
+ * Get alert statistics
315
+ */
316
+ getStats() {
317
+ const bySeverity = {
318
+ info: 0,
319
+ warning: 0,
320
+ error: 0,
321
+ critical: 0
322
+ };
323
+ for (const alert of Array.from(this.activeAlerts.values())) {
324
+ bySeverity[alert.severity]++;
325
+ }
326
+ return {
327
+ activeCount: this.activeAlerts.size,
328
+ totalFired: this.alertHistory.length,
329
+ bySeverity,
330
+ alertsThisHour: this.alertCountThisHour
331
+ };
332
+ }
333
+ /**
334
+ * Cleanup resources
335
+ */
336
+ destroy() {
337
+ this.stopEvaluation();
338
+ if (this.hourlyResetTimer) {
339
+ clearInterval(this.hourlyResetTimer);
340
+ }
341
+ this.removeAllListeners();
342
+ }
343
+ }
344
+ exports.AlertManager = AlertManager;
345
+ //# sourceMappingURL=AlertManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AlertManager.js","sourceRoot":"","sources":["../../src/alerting/AlertManager.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,mCAAsC;AACtC,+CAAiC;AAYjC,MAAM,cAAc,GAAmB;IACrC,kBAAkB,EAAE,KAAK,EAAE,aAAa;IACxC,cAAc,EAAE,MAAM,EAAK,YAAY;IACvC,gBAAgB,EAAE,GAAG;IACrB,kBAAkB,EAAE,IAAI;IACxB,aAAa,EAAE,IAAI;CACpB,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAa,YAAa,SAAQ,qBAAY;IAU5C,YAAY,SAAkC,EAAE;QAC9C,KAAK,EAAE,CAAC;QAVF,UAAK,GAA2B,IAAI,GAAG,EAAE,CAAC;QAC1C,iBAAY,GAAuB,IAAI,GAAG,EAAE,CAAC;QAC7C,iBAAY,GAAY,EAAE,CAAC;QAC3B,cAAS,GAAsB,IAAI,GAAG,EAAE,CAAC;QAGzC,uBAAkB,GAAG,CAAC,CAAC;QAK7B,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,MAAM,EAAE,CAAC;QAC/C,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,KAAkB;QAC1B,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAClC,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,MAA6D;QAC/E,MAAM,KAAK,GAAgB,EAAE,CAAC;QAE9B,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClC,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAClC,MAAM,IAAI,GAAG,OAMZ,CAAC;gBAEF,KAAK,CAAC,IAAI,CAAC;oBACT,IAAI,EAAE,IAAI,CAAC,KAAK;oBAChB,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,WAAW,EAAE,IAAI,CAAC,GAAG,IAAI,IAAI;oBAC7B,MAAM,EAAE;wBACN,QAAQ,EAAG,IAAI,CAAC,MAAM,EAAE,QAA0B,IAAI,SAAS;wBAC/D,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,IAAI,SAAS;wBAC9C,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,IAAI,SAAS;wBAChD,eAAe,EAAG,IAAI,CAAC,MAAM,EAAE,eAAsC,IAAI,iBAAiB;wBAC1F,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,WAAW;qBACtC;oBACD,WAAW,EAAE;wBACX,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,IAAI,EAAE;wBACxC,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,WAAW,IAAI,EAAE;wBAChD,iBAAiB,EAAE,IAAI,CAAC,WAAW,EAAE,iBAAiB;wBACtD,eAAe,EAAE,IAAI,CAAC,WAAW,EAAE,eAAe;wBAClD,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,WAAW;qBAC3C;iBACF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,OAAsB;QAC7B,MAAM,WAAW,GAAsB,EAAE,CAAC;QAE1C,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;YACnD,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAEhE,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE,CAAC;gBACrC,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBACnD,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAE7B,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;oBACxB,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;gBACnD,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBACzC,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,IAAe,EAAE,MAAmB;QACvD,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnD,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QAEzE,OAAO;YACL,IAAI;YACJ,MAAM;YACN,SAAS;YACT,MAAM,EAAE,MAAM,CAAC,KAAK;YACpB,QAAQ;YACR,OAAO,EAAE,QAAQ;gBACf,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,KAAK,IAAI,UAAU,IAAI,SAAS,EAAE;gBAC5D,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,SAAS,MAAM,CAAC,KAAK,GAAG;SACzC,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,IAAY;QACnC,+CAA+C;QAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAClD,OAAO,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,IAAY;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAClD,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAChC,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,MAAc,EAAE,SAAiB,EAAE,QAAgB;QACvE,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,GAAG,CAAC,CAAC,OAAO,MAAM,GAAG,SAAS,CAAC;YACpC,KAAK,IAAI,CAAC,CAAC,OAAO,MAAM,IAAI,SAAS,CAAC;YACtC,KAAK,GAAG,CAAC,CAAC,OAAO,MAAM,GAAG,SAAS,CAAC;YACpC,KAAK,IAAI,CAAC,CAAC,OAAO,MAAM,IAAI,SAAS,CAAC;YACtC,KAAK,IAAI,CAAC,CAAC,OAAO,MAAM,KAAK,SAAS,CAAC;YACvC,KAAK,IAAI,CAAC,CAAC,OAAO,MAAM,KAAK,SAAS,CAAC;YACvC,OAAO,CAAC,CAAC,OAAO,MAAM,GAAG,SAAS,CAAC;QACrC,CAAC;IACH,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,IAAe,EAAE,OAAsB;QACjE,oFAAoF;QACpF,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACrD,MAAM,UAAU,GAAG,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAE7D,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACxB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAC3B,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,IAAe,EAAE,MAAmB,EAAE,UAA2B;QACzF,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAE3D,iBAAiB;QACjB,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,CAAC;YACnC,OAAO;QACT,CAAC;QAED,sBAAsB;QACtB,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;YAC5D,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACzE,OAAO;QACT,CAAC;QAED,0BAA0B;QAC1B,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YACvC,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAU;YACnB,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;YACvB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,QAAQ;YAChB,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;YAC9B,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE;YAC5C,WAAW,EAAE;gBACX,GAAG,IAAI,CAAC,WAAW;gBACnB,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;gBAClC,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC;aACxC;YACD,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,OAAO,EAAE,IAAI,IAAI,EAAE;YACnB,WAAW;SACZ,CAAC;QAEF,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAC1C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;QAE5C,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;QAEhC,mCAAmC;QACnC,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC;YACnC,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;oBAC1B,KAAK;oBACL,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe;oBAC3C,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,iBAAiB;oBAC5C,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW;iBACrC,CAAC,CAAC;YACL,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,IAAe,EAAE,MAAmB;QAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC3D,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAEzD,IAAI,aAAa,IAAI,aAAa,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACvD,aAAa,CAAC,MAAM,GAAG,UAAU,CAAC;YAClC,aAAa,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC;YACtC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,IAAe,EAAE,MAAmB;QAC9D,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5E,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7D,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,WAAmB;QACtC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAClD,IAAI,CAAC,SAAS;YAAE,OAAO,KAAK,CAAC;QAC7B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC;IACvE,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,eAAoC;QAClD,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC,GAAG,EAAE;YACtC,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC;YAClC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACpC,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QACnC,CAAC;IACH,CAAC;IAED;;OAEG;IACK,gBAAgB;QACtB,IAAI,CAAC,gBAAgB,GAAG,WAAW,CAAC,GAAG,EAAE;YACvC,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;QAC9B,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS;IACxB,CAAC;IAED;;OAEG;IACH,eAAe;QACb,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,KAAK,GAAG,GAAG;QACzB,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,QAAQ;QAMN,MAAM,UAAU,GAAkC;YAChD,IAAI,EAAE,CAAC;YACP,OAAO,EAAE,CAAC;YACV,KAAK,EAAE,CAAC;YACR,QAAQ,EAAE,CAAC;SACZ,CAAC;QAEF,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;YAC3D,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/B,CAAC;QAED,OAAO;YACL,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI;YACnC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM;YACpC,UAAU;YACV,cAAc,EAAE,IAAI,CAAC,kBAAkB;SACxC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,OAAO;QACL,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;CACF;AA1UD,oCA0UC"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * FeedbackRouter - Routes Alerts to Appropriate Actions
3
+ *
4
+ * Takes fired alerts and routes them to the appropriate feedback actions
5
+ * based on alert type, severity, and configured strategies.
6
+ *
7
+ * @module alerting/FeedbackRouter
8
+ * @version 1.0.0
9
+ */
10
+ import { EventEmitter } from 'events';
11
+ import { Alert, FeedbackEvent, Strategy } from './types';
12
+ /**
13
+ * Feedback routing configuration
14
+ */
15
+ export interface FeedbackRouterConfig {
16
+ /** Default confidence threshold for auto-actions */
17
+ confidenceThreshold: number;
18
+ /** Enable automatic escalation for critical alerts */
19
+ autoEscalate: boolean;
20
+ /** Escalation delay in milliseconds */
21
+ escalationDelay: number;
22
+ /** Maximum retry attempts for failed actions */
23
+ maxRetries: number;
24
+ }
25
+ /**
26
+ * FeedbackRouter routes alerts to feedback actions and strategies.
27
+ *
28
+ * @example
29
+ * ```typescript
30
+ * const router = new FeedbackRouter();
31
+ * router.on('feedback:generated', (event) => strategyApplicator.apply(event));
32
+ * router.route(alert);
33
+ * ```
34
+ */
35
+ export declare class FeedbackRouter extends EventEmitter {
36
+ private config;
37
+ private strategies;
38
+ private feedbackHistory;
39
+ private pendingEscalations;
40
+ constructor(config?: Partial<FeedbackRouterConfig>);
41
+ /**
42
+ * Initialize default feedback strategies
43
+ */
44
+ private initializeDefaultStrategies;
45
+ /**
46
+ * Register a custom strategy
47
+ */
48
+ registerStrategy(strategy: Strategy): void;
49
+ /**
50
+ * Route an alert to appropriate feedback action
51
+ */
52
+ route(alert: Alert): FeedbackEvent | null;
53
+ /**
54
+ * Determine feedback action based on alert labels
55
+ */
56
+ private determineFeedbackAction;
57
+ /**
58
+ * Generate suggestions based on alert type
59
+ */
60
+ private generateSuggestions;
61
+ /**
62
+ * Select best strategy for alert
63
+ */
64
+ private selectStrategy;
65
+ /**
66
+ * Infer target agent from alert
67
+ */
68
+ private inferTargetAgent;
69
+ /**
70
+ * Calculate overall confidence from suggestions
71
+ */
72
+ private calculateConfidence;
73
+ /**
74
+ * Check if escalation is needed
75
+ */
76
+ private shouldEscalate;
77
+ /**
78
+ * Schedule escalation for unresolved critical alerts
79
+ */
80
+ private scheduleEscalation;
81
+ /**
82
+ * Cancel pending escalation (e.g., when alert resolves)
83
+ */
84
+ cancelEscalation(alertId: string): void;
85
+ /**
86
+ * Get feedback history
87
+ */
88
+ getFeedbackHistory(limit?: number): FeedbackEvent[];
89
+ /**
90
+ * Get all registered strategies
91
+ */
92
+ getStrategies(): Strategy[];
93
+ /**
94
+ * Cleanup resources
95
+ */
96
+ destroy(): void;
97
+ }
98
+ //# sourceMappingURL=FeedbackRouter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FeedbackRouter.d.ts","sourceRoot":"","sources":["../../src/alerting/FeedbackRouter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EACL,KAAK,EACL,aAAa,EAGb,QAAQ,EACT,MAAM,SAAS,CAAC;AAEjB;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,oDAAoD;IACpD,mBAAmB,EAAE,MAAM,CAAC;IAC5B,sDAAsD;IACtD,YAAY,EAAE,OAAO,CAAC;IACtB,uCAAuC;IACvC,eAAe,EAAE,MAAM,CAAC;IACxB,gDAAgD;IAChD,UAAU,EAAE,MAAM,CAAC;CACpB;AAkBD;;;;;;;;;GASG;AACH,qBAAa,cAAe,SAAQ,YAAY;IAC9C,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,UAAU,CAAoC;IACtD,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,kBAAkB,CAA0C;gBAExD,MAAM,GAAE,OAAO,CAAC,oBAAoB,CAAM;IAMtD;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAgEnC;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAK1C;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,aAAa,GAAG,IAAI;IAuCzC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAa/B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAuD3B;;OAEG;IACH,OAAO,CAAC,cAAc;IAuBtB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAcxB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAO3B;;OAEG;IACH,OAAO,CAAC,cAAc;IAOtB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAc1B;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAQvC;;OAEG;IACH,kBAAkB,CAAC,KAAK,SAAM,GAAG,aAAa,EAAE;IAIhD;;OAEG;IACH,aAAa,IAAI,QAAQ,EAAE;IAI3B;;OAEG;IACH,OAAO,IAAI,IAAI;CAOhB"}