agentic-qe 1.9.3 → 2.0.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 (271) hide show
  1. package/.claude/agents/qe-api-contract-validator.md +95 -1336
  2. package/.claude/agents/qe-chaos-engineer.md +152 -1211
  3. package/.claude/agents/qe-code-complexity.md +144 -707
  4. package/.claude/agents/qe-coverage-analyzer.md +147 -743
  5. package/.claude/agents/qe-deployment-readiness.md +143 -1496
  6. package/.claude/agents/qe-flaky-test-hunter.md +132 -1529
  7. package/.claude/agents/qe-fleet-commander.md +12 -12
  8. package/.claude/agents/qe-performance-tester.md +150 -886
  9. package/.claude/agents/qe-production-intelligence.md +155 -1396
  10. package/.claude/agents/qe-quality-analyzer.md +6 -6
  11. package/.claude/agents/qe-quality-gate.md +151 -648
  12. package/.claude/agents/qe-regression-risk-analyzer.md +132 -1150
  13. package/.claude/agents/qe-requirements-validator.md +149 -932
  14. package/.claude/agents/qe-security-scanner.md +157 -797
  15. package/.claude/agents/qe-test-data-architect.md +96 -1365
  16. package/.claude/agents/qe-test-executor.md +8 -8
  17. package/.claude/agents/qe-test-generator.md +145 -1540
  18. package/.claude/agents/qe-visual-tester.md +153 -1257
  19. package/.claude/agents/qx-partner.md +235 -0
  20. package/.claude/agents/subagents/qe-code-reviewer.md +40 -136
  21. package/.claude/agents/subagents/qe-coverage-gap-analyzer.md +40 -480
  22. package/.claude/agents/subagents/qe-data-generator.md +41 -125
  23. package/.claude/agents/subagents/qe-flaky-investigator.md +55 -411
  24. package/.claude/agents/subagents/qe-integration-tester.md +53 -141
  25. package/.claude/agents/subagents/qe-performance-validator.md +54 -130
  26. package/.claude/agents/subagents/qe-security-auditor.md +56 -114
  27. package/.claude/agents/subagents/qe-test-data-architect-sub.md +57 -548
  28. package/.claude/agents/subagents/qe-test-implementer.md +58 -551
  29. package/.claude/agents/subagents/qe-test-refactorer.md +65 -722
  30. package/.claude/agents/subagents/qe-test-writer.md +63 -726
  31. package/.claude/skills/skills-manifest.json +632 -0
  32. package/.claude/skills/testability-scoring/README.md +71 -0
  33. package/.claude/skills/testability-scoring/SKILL.md +611 -0
  34. package/.claude/skills/testability-scoring/resources/templates/config.template.js +84 -0
  35. package/.claude/skills/testability-scoring/resources/templates/testability-scoring.spec.template.js +532 -0
  36. package/.claude/skills/testability-scoring/scripts/generate-html-report.js +1007 -0
  37. package/.claude/skills/testability-scoring/scripts/run-assessment.sh +70 -0
  38. package/CHANGELOG.md +116 -0
  39. package/README.md +59 -7
  40. package/config/.env.otel.example +25 -0
  41. package/config/OTEL-QUICK-REFERENCE.md +137 -0
  42. package/config/README-OTEL.md +222 -0
  43. package/config/alerting-rules.yml +518 -0
  44. package/config/docker-compose.otel.yml +187 -0
  45. package/config/grafana/dashboards/agentic-qe-overview.json +286 -0
  46. package/config/grafana/provisioning/dashboards/dashboards.yml +19 -0
  47. package/config/grafana/provisioning/datasources/datasources.yml +53 -0
  48. package/config/otel-collector-config.yaml.example +145 -0
  49. package/config/prometheus.yml.example +106 -0
  50. package/dist/agents/QXPartnerAgent.d.ts +139 -0
  51. package/dist/agents/QXPartnerAgent.d.ts.map +1 -0
  52. package/dist/agents/QXPartnerAgent.js +769 -0
  53. package/dist/agents/QXPartnerAgent.js.map +1 -0
  54. package/dist/agents/index.d.ts +1 -0
  55. package/dist/agents/index.d.ts.map +1 -1
  56. package/dist/agents/index.js +82 -2
  57. package/dist/agents/index.js.map +1 -1
  58. package/dist/alerting/AlertManager.d.ts +120 -0
  59. package/dist/alerting/AlertManager.d.ts.map +1 -0
  60. package/dist/alerting/AlertManager.js +345 -0
  61. package/dist/alerting/AlertManager.js.map +1 -0
  62. package/dist/alerting/FeedbackRouter.d.ts +98 -0
  63. package/dist/alerting/FeedbackRouter.d.ts.map +1 -0
  64. package/dist/alerting/FeedbackRouter.js +331 -0
  65. package/dist/alerting/FeedbackRouter.js.map +1 -0
  66. package/dist/alerting/StrategyApplicator.d.ts +120 -0
  67. package/dist/alerting/StrategyApplicator.d.ts.map +1 -0
  68. package/dist/alerting/StrategyApplicator.js +299 -0
  69. package/dist/alerting/StrategyApplicator.js.map +1 -0
  70. package/dist/alerting/index.d.ts +68 -0
  71. package/dist/alerting/index.d.ts.map +1 -0
  72. package/dist/alerting/index.js +112 -0
  73. package/dist/alerting/index.js.map +1 -0
  74. package/dist/alerting/types.d.ts +118 -0
  75. package/dist/alerting/types.d.ts.map +1 -0
  76. package/dist/alerting/types.js +11 -0
  77. package/dist/alerting/types.js.map +1 -0
  78. package/dist/cli/commands/debug/agent.d.ts.map +1 -1
  79. package/dist/cli/commands/debug/agent.js +19 -6
  80. package/dist/cli/commands/debug/agent.js.map +1 -1
  81. package/dist/cli/commands/debug/health-check.js +20 -7
  82. package/dist/cli/commands/debug/health-check.js.map +1 -1
  83. package/dist/cli/commands/init-claude-md-template.d.ts +1 -0
  84. package/dist/cli/commands/init-claude-md-template.d.ts.map +1 -1
  85. package/dist/cli/commands/init-claude-md-template.js +4 -3
  86. package/dist/cli/commands/init-claude-md-template.js.map +1 -1
  87. package/dist/cli/commands/workflow/cancel.d.ts.map +1 -1
  88. package/dist/cli/commands/workflow/cancel.js +4 -3
  89. package/dist/cli/commands/workflow/cancel.js.map +1 -1
  90. package/dist/cli/commands/workflow/list.d.ts.map +1 -1
  91. package/dist/cli/commands/workflow/list.js +4 -3
  92. package/dist/cli/commands/workflow/list.js.map +1 -1
  93. package/dist/cli/commands/workflow/pause.d.ts.map +1 -1
  94. package/dist/cli/commands/workflow/pause.js +4 -3
  95. package/dist/cli/commands/workflow/pause.js.map +1 -1
  96. package/dist/cli/init/claude-config.d.ts.map +1 -1
  97. package/dist/cli/init/claude-config.js +13 -13
  98. package/dist/cli/init/claude-config.js.map +1 -1
  99. package/dist/cli/init/claude-md.d.ts.map +1 -1
  100. package/dist/cli/init/claude-md.js +44 -2
  101. package/dist/cli/init/claude-md.js.map +1 -1
  102. package/dist/cli/init/database-init.js +1 -1
  103. package/dist/cli/init/index.d.ts.map +1 -1
  104. package/dist/cli/init/index.js +13 -6
  105. package/dist/cli/init/index.js.map +1 -1
  106. package/dist/cli/init/skills.d.ts.map +1 -1
  107. package/dist/cli/init/skills.js +2 -1
  108. package/dist/cli/init/skills.js.map +1 -1
  109. package/dist/core/memory/AgentDBIntegration.d.ts +24 -6
  110. package/dist/core/memory/AgentDBIntegration.d.ts.map +1 -1
  111. package/dist/core/memory/AgentDBIntegration.js +66 -10
  112. package/dist/core/memory/AgentDBIntegration.js.map +1 -1
  113. package/dist/core/memory/IPatternStore.d.ts +209 -0
  114. package/dist/core/memory/IPatternStore.d.ts.map +1 -0
  115. package/dist/core/memory/IPatternStore.js +15 -0
  116. package/dist/core/memory/IPatternStore.js.map +1 -0
  117. package/dist/core/memory/MigrationTools.d.ts +192 -0
  118. package/dist/core/memory/MigrationTools.d.ts.map +1 -0
  119. package/dist/core/memory/MigrationTools.js +615 -0
  120. package/dist/core/memory/MigrationTools.js.map +1 -0
  121. package/dist/core/memory/NeuralEnhancement.d.ts +154 -0
  122. package/dist/core/memory/NeuralEnhancement.d.ts.map +1 -0
  123. package/dist/core/memory/NeuralEnhancement.js +598 -0
  124. package/dist/core/memory/NeuralEnhancement.js.map +1 -0
  125. package/dist/core/memory/PatternStoreFactory.d.ts +143 -0
  126. package/dist/core/memory/PatternStoreFactory.d.ts.map +1 -0
  127. package/dist/core/memory/PatternStoreFactory.js +370 -0
  128. package/dist/core/memory/PatternStoreFactory.js.map +1 -0
  129. package/dist/core/memory/RealAgentDBAdapter.d.ts +1 -0
  130. package/dist/core/memory/RealAgentDBAdapter.d.ts.map +1 -1
  131. package/dist/core/memory/RealAgentDBAdapter.js +28 -20
  132. package/dist/core/memory/RealAgentDBAdapter.js.map +1 -1
  133. package/dist/core/memory/RuVectorPatternStore.d.ts +198 -0
  134. package/dist/core/memory/RuVectorPatternStore.d.ts.map +1 -0
  135. package/dist/core/memory/RuVectorPatternStore.js +605 -0
  136. package/dist/core/memory/RuVectorPatternStore.js.map +1 -0
  137. package/dist/core/memory/SelfHealingMonitor.d.ts +186 -0
  138. package/dist/core/memory/SelfHealingMonitor.d.ts.map +1 -0
  139. package/dist/core/memory/SelfHealingMonitor.js +451 -0
  140. package/dist/core/memory/SelfHealingMonitor.js.map +1 -0
  141. package/dist/core/memory/SwarmMemoryManager.d.ts +62 -0
  142. package/dist/core/memory/SwarmMemoryManager.d.ts.map +1 -1
  143. package/dist/core/memory/SwarmMemoryManager.js +97 -0
  144. package/dist/core/memory/SwarmMemoryManager.js.map +1 -1
  145. package/dist/core/memory/UnifiedMemoryCoordinator.d.ts +341 -0
  146. package/dist/core/memory/UnifiedMemoryCoordinator.d.ts.map +1 -0
  147. package/dist/core/memory/UnifiedMemoryCoordinator.js +986 -0
  148. package/dist/core/memory/UnifiedMemoryCoordinator.js.map +1 -0
  149. package/dist/core/memory/index.d.ts +16 -0
  150. package/dist/core/memory/index.d.ts.map +1 -1
  151. package/dist/core/memory/index.js +58 -1
  152. package/dist/core/memory/index.js.map +1 -1
  153. package/dist/core/optimization/SwarmOptimizer.d.ts +185 -0
  154. package/dist/core/optimization/SwarmOptimizer.d.ts.map +1 -0
  155. package/dist/core/optimization/SwarmOptimizer.js +631 -0
  156. package/dist/core/optimization/SwarmOptimizer.js.map +1 -0
  157. package/dist/core/optimization/index.d.ts +9 -0
  158. package/dist/core/optimization/index.d.ts.map +1 -0
  159. package/dist/core/optimization/index.js +25 -0
  160. package/dist/core/optimization/index.js.map +1 -0
  161. package/dist/core/optimization/types.d.ts +53 -0
  162. package/dist/core/optimization/types.d.ts.map +1 -0
  163. package/dist/core/optimization/types.js +6 -0
  164. package/dist/core/optimization/types.js.map +1 -0
  165. package/dist/core/orchestration/PriorityQueue.d.ts +54 -0
  166. package/dist/core/orchestration/PriorityQueue.d.ts.map +1 -0
  167. package/dist/core/orchestration/PriorityQueue.js +122 -0
  168. package/dist/core/orchestration/PriorityQueue.js.map +1 -0
  169. package/dist/core/orchestration/WorkflowOrchestrator.d.ts +176 -0
  170. package/dist/core/orchestration/WorkflowOrchestrator.d.ts.map +1 -0
  171. package/dist/core/orchestration/WorkflowOrchestrator.js +813 -0
  172. package/dist/core/orchestration/WorkflowOrchestrator.js.map +1 -0
  173. package/dist/core/orchestration/index.d.ts +7 -0
  174. package/dist/core/orchestration/index.d.ts.map +1 -0
  175. package/dist/core/orchestration/index.js +11 -0
  176. package/dist/core/orchestration/index.js.map +1 -0
  177. package/dist/core/orchestration/types.d.ts +96 -0
  178. package/dist/core/orchestration/types.d.ts.map +1 -0
  179. package/dist/core/orchestration/types.js +6 -0
  180. package/dist/core/orchestration/types.js.map +1 -0
  181. package/dist/core/skills/DynamicSkillLoader.d.ts +96 -0
  182. package/dist/core/skills/DynamicSkillLoader.d.ts.map +1 -0
  183. package/dist/core/skills/DynamicSkillLoader.js +353 -0
  184. package/dist/core/skills/DynamicSkillLoader.js.map +1 -0
  185. package/dist/core/skills/types.d.ts +118 -0
  186. package/dist/core/skills/types.d.ts.map +1 -0
  187. package/dist/core/skills/types.js +7 -0
  188. package/dist/core/skills/types.js.map +1 -0
  189. package/dist/core/transport/QUICTransport.d.ts +320 -0
  190. package/dist/core/transport/QUICTransport.d.ts.map +1 -0
  191. package/dist/core/transport/QUICTransport.js +711 -0
  192. package/dist/core/transport/QUICTransport.js.map +1 -0
  193. package/dist/core/transport/index.d.ts +40 -0
  194. package/dist/core/transport/index.d.ts.map +1 -0
  195. package/dist/core/transport/index.js +46 -0
  196. package/dist/core/transport/index.js.map +1 -0
  197. package/dist/core/transport/quic-loader.d.ts +123 -0
  198. package/dist/core/transport/quic-loader.d.ts.map +1 -0
  199. package/dist/core/transport/quic-loader.js +293 -0
  200. package/dist/core/transport/quic-loader.js.map +1 -0
  201. package/dist/core/transport/quic.d.ts +154 -0
  202. package/dist/core/transport/quic.d.ts.map +1 -0
  203. package/dist/core/transport/quic.js +214 -0
  204. package/dist/core/transport/quic.js.map +1 -0
  205. package/dist/mcp/services/AgentRegistry.d.ts.map +1 -1
  206. package/dist/mcp/services/AgentRegistry.js +4 -1
  207. package/dist/mcp/services/AgentRegistry.js.map +1 -1
  208. package/dist/reasoning/RuVectorReasoningAdapter.d.ts +232 -0
  209. package/dist/reasoning/RuVectorReasoningAdapter.d.ts.map +1 -0
  210. package/dist/reasoning/RuVectorReasoningAdapter.js +585 -0
  211. package/dist/reasoning/RuVectorReasoningAdapter.js.map +1 -0
  212. package/dist/reasoning/index.d.ts +2 -0
  213. package/dist/reasoning/index.d.ts.map +1 -1
  214. package/dist/reasoning/index.js +6 -1
  215. package/dist/reasoning/index.js.map +1 -1
  216. package/dist/reporting/ResultAggregator.d.ts +107 -0
  217. package/dist/reporting/ResultAggregator.d.ts.map +1 -0
  218. package/dist/reporting/ResultAggregator.js +435 -0
  219. package/dist/reporting/ResultAggregator.js.map +1 -0
  220. package/dist/reporting/index.d.ts +48 -0
  221. package/dist/reporting/index.d.ts.map +1 -0
  222. package/dist/reporting/index.js +154 -0
  223. package/dist/reporting/index.js.map +1 -0
  224. package/dist/reporting/reporters/ControlLoopReporter.d.ts +128 -0
  225. package/dist/reporting/reporters/ControlLoopReporter.d.ts.map +1 -0
  226. package/dist/reporting/reporters/ControlLoopReporter.js +417 -0
  227. package/dist/reporting/reporters/ControlLoopReporter.js.map +1 -0
  228. package/dist/reporting/reporters/HumanReadableReporter.d.ts +140 -0
  229. package/dist/reporting/reporters/HumanReadableReporter.d.ts.map +1 -0
  230. package/dist/reporting/reporters/HumanReadableReporter.js +524 -0
  231. package/dist/reporting/reporters/HumanReadableReporter.js.map +1 -0
  232. package/dist/reporting/reporters/JSONReporter.d.ts +193 -0
  233. package/dist/reporting/reporters/JSONReporter.d.ts.map +1 -0
  234. package/dist/reporting/reporters/JSONReporter.js +324 -0
  235. package/dist/reporting/reporters/JSONReporter.js.map +1 -0
  236. package/dist/reporting/reporters/index.d.ts +14 -0
  237. package/dist/reporting/reporters/index.d.ts.map +1 -0
  238. package/dist/reporting/reporters/index.js +19 -0
  239. package/dist/reporting/reporters/index.js.map +1 -0
  240. package/dist/reporting/types.d.ts +427 -0
  241. package/dist/reporting/types.d.ts.map +1 -0
  242. package/dist/reporting/types.js +12 -0
  243. package/dist/reporting/types.js.map +1 -0
  244. package/dist/types/index.d.ts +2 -1
  245. package/dist/types/index.d.ts.map +1 -1
  246. package/dist/types/index.js +2 -0
  247. package/dist/types/index.js.map +1 -1
  248. package/dist/types/qx.d.ts +397 -0
  249. package/dist/types/qx.d.ts.map +1 -0
  250. package/dist/types/qx.js +71 -0
  251. package/dist/types/qx.js.map +1 -0
  252. package/dist/visualization/api/RestEndpoints.js +1 -1
  253. package/dist/visualization/api/RestEndpoints.js.map +1 -1
  254. package/dist/visualization/api/WebSocketServer.d.ts +44 -0
  255. package/dist/visualization/api/WebSocketServer.d.ts.map +1 -1
  256. package/dist/visualization/api/WebSocketServer.js +144 -23
  257. package/dist/visualization/api/WebSocketServer.js.map +1 -1
  258. package/dist/visualization/core/DataTransformer.d.ts +10 -0
  259. package/dist/visualization/core/DataTransformer.d.ts.map +1 -1
  260. package/dist/visualization/core/DataTransformer.js +60 -5
  261. package/dist/visualization/core/DataTransformer.js.map +1 -1
  262. package/dist/visualization/emit-event.d.ts +75 -0
  263. package/dist/visualization/emit-event.d.ts.map +1 -0
  264. package/dist/visualization/emit-event.js +213 -0
  265. package/dist/visualization/emit-event.js.map +1 -0
  266. package/dist/visualization/index.d.ts +1 -0
  267. package/dist/visualization/index.d.ts.map +1 -1
  268. package/dist/visualization/index.js +7 -1
  269. package/dist/visualization/index.js.map +1 -1
  270. package/docs/reference/skills.md +63 -1
  271. package/package.json +12 -4
@@ -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"}