agentic-qe 2.0.0 → 2.1.1

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 (144) hide show
  1. package/.claude/agents/qx-partner.md +17 -4
  2. package/.claude/skills/accessibility-testing/SKILL.md +144 -692
  3. package/.claude/skills/agentic-quality-engineering/SKILL.md +176 -529
  4. package/.claude/skills/api-testing-patterns/SKILL.md +180 -560
  5. package/.claude/skills/brutal-honesty-review/SKILL.md +113 -603
  6. package/.claude/skills/bug-reporting-excellence/SKILL.md +116 -517
  7. package/.claude/skills/chaos-engineering-resilience/SKILL.md +127 -72
  8. package/.claude/skills/cicd-pipeline-qe-orchestrator/SKILL.md +209 -404
  9. package/.claude/skills/code-review-quality/SKILL.md +158 -608
  10. package/.claude/skills/compatibility-testing/SKILL.md +148 -38
  11. package/.claude/skills/compliance-testing/SKILL.md +132 -63
  12. package/.claude/skills/consultancy-practices/SKILL.md +114 -446
  13. package/.claude/skills/context-driven-testing/SKILL.md +117 -381
  14. package/.claude/skills/contract-testing/SKILL.md +176 -141
  15. package/.claude/skills/database-testing/SKILL.md +137 -130
  16. package/.claude/skills/exploratory-testing-advanced/SKILL.md +160 -629
  17. package/.claude/skills/holistic-testing-pact/SKILL.md +140 -188
  18. package/.claude/skills/localization-testing/SKILL.md +145 -33
  19. package/.claude/skills/mobile-testing/SKILL.md +132 -448
  20. package/.claude/skills/mutation-testing/SKILL.md +147 -41
  21. package/.claude/skills/performance-testing/SKILL.md +200 -546
  22. package/.claude/skills/quality-metrics/SKILL.md +164 -519
  23. package/.claude/skills/refactoring-patterns/SKILL.md +132 -699
  24. package/.claude/skills/regression-testing/SKILL.md +120 -926
  25. package/.claude/skills/risk-based-testing/SKILL.md +157 -660
  26. package/.claude/skills/security-testing/SKILL.md +199 -538
  27. package/.claude/skills/sherlock-review/SKILL.md +163 -699
  28. package/.claude/skills/shift-left-testing/SKILL.md +161 -465
  29. package/.claude/skills/shift-right-testing/SKILL.md +161 -519
  30. package/.claude/skills/six-thinking-hats/SKILL.md +175 -1110
  31. package/.claude/skills/skills-manifest.json +71 -20
  32. package/.claude/skills/tdd-london-chicago/SKILL.md +131 -448
  33. package/.claude/skills/technical-writing/SKILL.md +103 -154
  34. package/.claude/skills/test-automation-strategy/SKILL.md +166 -772
  35. package/.claude/skills/test-data-management/SKILL.md +126 -910
  36. package/.claude/skills/test-design-techniques/SKILL.md +179 -89
  37. package/.claude/skills/test-environment-management/SKILL.md +136 -91
  38. package/.claude/skills/test-reporting-analytics/SKILL.md +169 -92
  39. package/.claude/skills/testability-scoring/SKILL.md +172 -538
  40. package/.claude/skills/testability-scoring/scripts/generate-html-report.js +0 -0
  41. package/.claude/skills/visual-testing-advanced/SKILL.md +155 -78
  42. package/.claude/skills/xp-practices/SKILL.md +151 -587
  43. package/CHANGELOG.md +86 -0
  44. package/README.md +23 -16
  45. package/dist/agents/QXPartnerAgent.d.ts +47 -1
  46. package/dist/agents/QXPartnerAgent.d.ts.map +1 -1
  47. package/dist/agents/QXPartnerAgent.js +2086 -125
  48. package/dist/agents/QXPartnerAgent.js.map +1 -1
  49. package/dist/agents/lifecycle/AgentLifecycleManager.d.ts.map +1 -1
  50. package/dist/agents/lifecycle/AgentLifecycleManager.js +34 -31
  51. package/dist/agents/lifecycle/AgentLifecycleManager.js.map +1 -1
  52. package/dist/cli/commands/init-claude-md-template.d.ts.map +1 -1
  53. package/dist/cli/commands/init-claude-md-template.js +14 -0
  54. package/dist/cli/commands/init-claude-md-template.js.map +1 -1
  55. package/dist/core/SwarmCoordinator.d.ts +180 -0
  56. package/dist/core/SwarmCoordinator.d.ts.map +1 -0
  57. package/dist/core/SwarmCoordinator.js +473 -0
  58. package/dist/core/SwarmCoordinator.js.map +1 -0
  59. package/dist/core/memory/ReflexionMemoryAdapter.d.ts +109 -0
  60. package/dist/core/memory/ReflexionMemoryAdapter.d.ts.map +1 -0
  61. package/dist/core/memory/ReflexionMemoryAdapter.js +306 -0
  62. package/dist/core/memory/ReflexionMemoryAdapter.js.map +1 -0
  63. package/dist/core/memory/RuVectorPatternStore.d.ts +28 -0
  64. package/dist/core/memory/RuVectorPatternStore.d.ts.map +1 -1
  65. package/dist/core/memory/RuVectorPatternStore.js +70 -0
  66. package/dist/core/memory/RuVectorPatternStore.js.map +1 -1
  67. package/dist/core/memory/SparseVectorSearch.d.ts +55 -0
  68. package/dist/core/memory/SparseVectorSearch.d.ts.map +1 -0
  69. package/dist/core/memory/SparseVectorSearch.js +130 -0
  70. package/dist/core/memory/SparseVectorSearch.js.map +1 -0
  71. package/dist/core/memory/TieredCompression.d.ts +81 -0
  72. package/dist/core/memory/TieredCompression.d.ts.map +1 -0
  73. package/dist/core/memory/TieredCompression.js +270 -0
  74. package/dist/core/memory/TieredCompression.js.map +1 -0
  75. package/dist/core/memory/index.d.ts +6 -0
  76. package/dist/core/memory/index.d.ts.map +1 -1
  77. package/dist/core/memory/index.js +29 -1
  78. package/dist/core/memory/index.js.map +1 -1
  79. package/dist/core/metrics/MetricsAggregator.d.ts +228 -0
  80. package/dist/core/metrics/MetricsAggregator.d.ts.map +1 -0
  81. package/dist/core/metrics/MetricsAggregator.js +482 -0
  82. package/dist/core/metrics/MetricsAggregator.js.map +1 -0
  83. package/dist/core/metrics/index.d.ts +5 -0
  84. package/dist/core/metrics/index.d.ts.map +1 -0
  85. package/dist/core/metrics/index.js +11 -0
  86. package/dist/core/metrics/index.js.map +1 -0
  87. package/dist/core/optimization/SwarmOptimizer.d.ts +5 -0
  88. package/dist/core/optimization/SwarmOptimizer.d.ts.map +1 -1
  89. package/dist/core/optimization/SwarmOptimizer.js +17 -0
  90. package/dist/core/optimization/SwarmOptimizer.js.map +1 -1
  91. package/dist/core/orchestration/AdaptiveScheduler.d.ts +190 -0
  92. package/dist/core/orchestration/AdaptiveScheduler.d.ts.map +1 -0
  93. package/dist/core/orchestration/AdaptiveScheduler.js +460 -0
  94. package/dist/core/orchestration/AdaptiveScheduler.js.map +1 -0
  95. package/dist/core/orchestration/WorkflowOrchestrator.d.ts +13 -0
  96. package/dist/core/orchestration/WorkflowOrchestrator.d.ts.map +1 -1
  97. package/dist/core/orchestration/WorkflowOrchestrator.js +32 -0
  98. package/dist/core/orchestration/WorkflowOrchestrator.js.map +1 -1
  99. package/dist/core/recovery/CircuitBreaker.d.ts +176 -0
  100. package/dist/core/recovery/CircuitBreaker.d.ts.map +1 -0
  101. package/dist/core/recovery/CircuitBreaker.js +382 -0
  102. package/dist/core/recovery/CircuitBreaker.js.map +1 -0
  103. package/dist/core/recovery/RecoveryOrchestrator.d.ts +186 -0
  104. package/dist/core/recovery/RecoveryOrchestrator.d.ts.map +1 -0
  105. package/dist/core/recovery/RecoveryOrchestrator.js +476 -0
  106. package/dist/core/recovery/RecoveryOrchestrator.js.map +1 -0
  107. package/dist/core/recovery/RetryStrategy.d.ts +127 -0
  108. package/dist/core/recovery/RetryStrategy.d.ts.map +1 -0
  109. package/dist/core/recovery/RetryStrategy.js +314 -0
  110. package/dist/core/recovery/RetryStrategy.js.map +1 -0
  111. package/dist/core/recovery/index.d.ts +8 -0
  112. package/dist/core/recovery/index.d.ts.map +1 -0
  113. package/dist/core/recovery/index.js +27 -0
  114. package/dist/core/recovery/index.js.map +1 -0
  115. package/dist/core/skills/DependencyResolver.d.ts +99 -0
  116. package/dist/core/skills/DependencyResolver.d.ts.map +1 -0
  117. package/dist/core/skills/DependencyResolver.js +260 -0
  118. package/dist/core/skills/DependencyResolver.js.map +1 -0
  119. package/dist/core/skills/ManifestGenerator.d.ts +114 -0
  120. package/dist/core/skills/ManifestGenerator.d.ts.map +1 -0
  121. package/dist/core/skills/ManifestGenerator.js +449 -0
  122. package/dist/core/skills/ManifestGenerator.js.map +1 -0
  123. package/dist/core/skills/index.d.ts +9 -0
  124. package/dist/core/skills/index.d.ts.map +1 -0
  125. package/dist/core/skills/index.js +24 -0
  126. package/dist/core/skills/index.js.map +1 -0
  127. package/dist/mcp/handlers/chaos/chaos-inject-failure.d.ts +5 -0
  128. package/dist/mcp/handlers/chaos/chaos-inject-failure.d.ts.map +1 -1
  129. package/dist/mcp/handlers/chaos/chaos-inject-failure.js +36 -2
  130. package/dist/mcp/handlers/chaos/chaos-inject-failure.js.map +1 -1
  131. package/dist/mcp/handlers/chaos/chaos-inject-latency.d.ts +5 -0
  132. package/dist/mcp/handlers/chaos/chaos-inject-latency.d.ts.map +1 -1
  133. package/dist/mcp/handlers/chaos/chaos-inject-latency.js +36 -2
  134. package/dist/mcp/handlers/chaos/chaos-inject-latency.js.map +1 -1
  135. package/dist/mcp/server.d.ts +9 -9
  136. package/dist/mcp/server.d.ts.map +1 -1
  137. package/dist/mcp/server.js +1 -2
  138. package/dist/mcp/server.js.map +1 -1
  139. package/dist/types/qx.d.ts +113 -7
  140. package/dist/types/qx.d.ts.map +1 -1
  141. package/dist/types/qx.js.map +1 -1
  142. package/dist/visualization/api/RestEndpoints.js +1 -1
  143. package/dist/visualization/api/RestEndpoints.js.map +1 -1
  144. package/package.json +15 -54
@@ -0,0 +1,482 @@
1
+ "use strict";
2
+ /**
3
+ * MetricsAggregator - Unified Metrics Collection and Analysis
4
+ *
5
+ * Collects metrics from all swarm components, provides trend analysis,
6
+ * anomaly detection, and performance recommendations.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.MetricsAggregator = void 0;
10
+ exports.getMetricsAggregator = getMetricsAggregator;
11
+ exports.resetMetricsAggregator = resetMetricsAggregator;
12
+ const events_1 = require("events");
13
+ const Logger_js_1 = require("../../utils/Logger.js");
14
+ /**
15
+ * Metrics Aggregator Implementation
16
+ */
17
+ class MetricsAggregator extends events_1.EventEmitter {
18
+ constructor(config) {
19
+ super();
20
+ this.metrics = new Map();
21
+ this.definitions = new Map();
22
+ this.anomalies = [];
23
+ this.recommendations = [];
24
+ this.startTime = new Date();
25
+ this.logger = Logger_js_1.Logger.getInstance();
26
+ this.config = {
27
+ maxHistoryPoints: 1000,
28
+ retentionPeriod: 86400000, // 24 hours
29
+ aggregationInterval: 60000, // 1 minute
30
+ enableAnomalyDetection: true,
31
+ anomalySensitivity: 0.7,
32
+ enableTrendAnalysis: true,
33
+ trendWindow: 300000, // 5 minutes
34
+ enableRecommendations: true,
35
+ ...config,
36
+ };
37
+ this.initializeDefaultMetrics();
38
+ }
39
+ /**
40
+ * Start the aggregator
41
+ */
42
+ start() {
43
+ this.aggregationTimer = setInterval(() => {
44
+ this.aggregate();
45
+ }, this.config.aggregationInterval);
46
+ this.emit('started');
47
+ this.logger.info('MetricsAggregator started');
48
+ }
49
+ /**
50
+ * Stop the aggregator
51
+ */
52
+ stop() {
53
+ if (this.aggregationTimer) {
54
+ clearInterval(this.aggregationTimer);
55
+ this.aggregationTimer = undefined;
56
+ }
57
+ this.emit('stopped');
58
+ this.logger.info('MetricsAggregator stopped');
59
+ }
60
+ /**
61
+ * Register a metric definition
62
+ */
63
+ registerMetric(definition) {
64
+ this.definitions.set(definition.name, definition);
65
+ if (!this.metrics.has(definition.name)) {
66
+ this.metrics.set(definition.name, {
67
+ ...definition,
68
+ points: [],
69
+ current: 0,
70
+ min: Infinity,
71
+ max: -Infinity,
72
+ avg: 0,
73
+ sum: 0,
74
+ count: 0,
75
+ });
76
+ }
77
+ }
78
+ /**
79
+ * Record a metric value
80
+ */
81
+ record(name, value, labels) {
82
+ let metric = this.metrics.get(name);
83
+ if (!metric) {
84
+ // Auto-register if not exists
85
+ const definition = {
86
+ name,
87
+ type: 'gauge',
88
+ source: 'swarm',
89
+ description: `Auto-registered metric: ${name}`,
90
+ };
91
+ this.registerMetric(definition);
92
+ metric = this.metrics.get(name);
93
+ }
94
+ const point = {
95
+ timestamp: new Date(),
96
+ value,
97
+ labels,
98
+ };
99
+ metric.points.push(point);
100
+ metric.current = value;
101
+ metric.min = Math.min(metric.min, value);
102
+ metric.max = Math.max(metric.max, value);
103
+ metric.sum += value;
104
+ metric.count++;
105
+ metric.avg = metric.sum / metric.count;
106
+ // Prune old points
107
+ this.pruneMetricHistory(metric);
108
+ // Check for anomalies
109
+ if (this.config.enableAnomalyDetection) {
110
+ this.checkForAnomaly(metric, point);
111
+ }
112
+ this.emit('metric:recorded', { name, value, labels });
113
+ }
114
+ /**
115
+ * Increment a counter metric
116
+ */
117
+ increment(name, delta = 1, labels) {
118
+ const metric = this.metrics.get(name);
119
+ const currentValue = metric?.current || 0;
120
+ this.record(name, currentValue + delta, labels);
121
+ }
122
+ /**
123
+ * Get current metric value
124
+ */
125
+ get(name) {
126
+ return this.metrics.get(name)?.current;
127
+ }
128
+ /**
129
+ * Get metric with full history
130
+ */
131
+ getMetric(name) {
132
+ return this.metrics.get(name);
133
+ }
134
+ /**
135
+ * Get all metrics
136
+ */
137
+ getAllMetrics() {
138
+ return new Map(this.metrics);
139
+ }
140
+ /**
141
+ * Get metrics by source
142
+ */
143
+ getMetricsBySource(source) {
144
+ const filtered = new Map();
145
+ for (const [name, metric] of this.metrics) {
146
+ if (metric.source === source) {
147
+ filtered.set(name, metric);
148
+ }
149
+ }
150
+ return filtered;
151
+ }
152
+ /**
153
+ * Get metrics snapshot
154
+ */
155
+ getSnapshot() {
156
+ const metrics = {};
157
+ const sources = {
158
+ swarm: {},
159
+ optimizer: {},
160
+ orchestrator: {},
161
+ scheduler: {},
162
+ memory: {},
163
+ transport: {},
164
+ recovery: {},
165
+ agent: {},
166
+ };
167
+ let totalDataPoints = 0;
168
+ let oldestPoint = new Date();
169
+ let newestPoint = new Date(0);
170
+ let activeMetrics = 0;
171
+ for (const [name, metric] of this.metrics) {
172
+ metrics[name] = metric;
173
+ sources[metric.source][name] = metric.current;
174
+ totalDataPoints += metric.points.length;
175
+ if (metric.points.length > 0) {
176
+ activeMetrics++;
177
+ const first = metric.points[0].timestamp;
178
+ const last = metric.points[metric.points.length - 1].timestamp;
179
+ if (first < oldestPoint)
180
+ oldestPoint = first;
181
+ if (last > newestPoint)
182
+ newestPoint = last;
183
+ }
184
+ }
185
+ return {
186
+ timestamp: new Date(),
187
+ metrics,
188
+ sources,
189
+ summary: {
190
+ totalMetrics: this.metrics.size,
191
+ activeMetrics,
192
+ totalDataPoints,
193
+ oldestDataPoint: oldestPoint,
194
+ newestDataPoint: newestPoint,
195
+ uptimeSeconds: (Date.now() - this.startTime.getTime()) / 1000,
196
+ },
197
+ };
198
+ }
199
+ /**
200
+ * Analyze trend for a metric
201
+ */
202
+ analyzeTrend(metricName) {
203
+ const metric = this.metrics.get(metricName);
204
+ if (!metric || metric.points.length < 3)
205
+ return null;
206
+ const windowStart = Date.now() - this.config.trendWindow;
207
+ const recentPoints = metric.points.filter(p => p.timestamp.getTime() > windowStart);
208
+ if (recentPoints.length < 3)
209
+ return null;
210
+ // Calculate linear regression
211
+ const n = recentPoints.length;
212
+ let sumX = 0, sumY = 0, sumXY = 0, sumX2 = 0;
213
+ const baseTime = recentPoints[0].timestamp.getTime();
214
+ for (let i = 0; i < n; i++) {
215
+ const x = (recentPoints[i].timestamp.getTime() - baseTime) / 1000; // seconds
216
+ const y = recentPoints[i].value;
217
+ sumX += x;
218
+ sumY += y;
219
+ sumXY += x * y;
220
+ sumX2 += x * x;
221
+ }
222
+ const slope = (n * sumXY - sumX * sumY) / (n * sumX2 - sumX * sumX);
223
+ const intercept = (sumY - slope * sumX) / n;
224
+ // Calculate R-squared for confidence
225
+ const yMean = sumY / n;
226
+ let ssTotal = 0, ssResidual = 0;
227
+ for (let i = 0; i < n; i++) {
228
+ const x = (recentPoints[i].timestamp.getTime() - baseTime) / 1000;
229
+ const y = recentPoints[i].value;
230
+ const predicted = slope * x + intercept;
231
+ ssTotal += Math.pow(y - yMean, 2);
232
+ ssResidual += Math.pow(y - predicted, 2);
233
+ }
234
+ const rSquared = ssTotal > 0 ? 1 - (ssResidual / ssTotal) : 0;
235
+ // Determine direction
236
+ let direction;
237
+ const threshold = Math.abs(yMean * 0.01); // 1% of mean
238
+ if (Math.abs(slope) < threshold) {
239
+ direction = rSquared < 0.5 ? 'volatile' : 'stable';
240
+ }
241
+ else {
242
+ direction = slope > 0 ? 'increasing' : 'decreasing';
243
+ }
244
+ // Calculate percent change
245
+ const firstValue = recentPoints[0].value;
246
+ const lastValue = recentPoints[n - 1].value;
247
+ const percentChange = firstValue !== 0
248
+ ? ((lastValue - firstValue) / firstValue) * 100
249
+ : 0;
250
+ // Forecast next value
251
+ const futureX = (Date.now() - baseTime) / 1000 + 60; // 1 minute ahead
252
+ const forecast = slope * futureX + intercept;
253
+ // Calculate anomaly score
254
+ const stdDev = this.calculateStdDev(recentPoints.map(p => p.value));
255
+ const anomalyScore = stdDev > 0
256
+ ? Math.min(1, Math.abs(lastValue - yMean) / (3 * stdDev))
257
+ : 0;
258
+ return {
259
+ metricName,
260
+ direction,
261
+ changeRate: slope,
262
+ percentChange,
263
+ confidence: rSquared,
264
+ forecast,
265
+ anomalyScore,
266
+ };
267
+ }
268
+ /**
269
+ * Get detected anomalies
270
+ */
271
+ getAnomalies(limit) {
272
+ const sorted = [...this.anomalies].reverse();
273
+ return limit ? sorted.slice(0, limit) : sorted;
274
+ }
275
+ /**
276
+ * Get recommendations
277
+ */
278
+ getRecommendations(limit) {
279
+ const sorted = [...this.recommendations].reverse();
280
+ return limit ? sorted.slice(0, limit) : sorted;
281
+ }
282
+ /**
283
+ * Generate recommendations based on current metrics
284
+ */
285
+ generateRecommendations() {
286
+ if (!this.config.enableRecommendations)
287
+ return [];
288
+ const newRecommendations = [];
289
+ // Check for high error rates
290
+ const errorRate = this.get('swarm.error_rate');
291
+ if (errorRate !== undefined && errorRate > 0.1) {
292
+ newRecommendations.push({
293
+ timestamp: new Date(),
294
+ category: 'alert',
295
+ priority: errorRate > 0.3 ? 'critical' : 'high',
296
+ title: 'High Error Rate Detected',
297
+ description: `Error rate is ${(errorRate * 100).toFixed(1)}%, exceeding threshold`,
298
+ metrics: ['swarm.error_rate'],
299
+ suggestedAction: 'Review recent errors and consider enabling circuit breakers',
300
+ });
301
+ }
302
+ // Check for queue pressure
303
+ const queueDepth = this.get('scheduler.queue_depth');
304
+ const queueCapacity = this.get('scheduler.queue_capacity') || 1000;
305
+ if (queueDepth !== undefined && queueDepth / queueCapacity > 0.8) {
306
+ newRecommendations.push({
307
+ timestamp: new Date(),
308
+ category: 'scaling',
309
+ priority: 'high',
310
+ title: 'High Queue Pressure',
311
+ description: `Queue is at ${((queueDepth / queueCapacity) * 100).toFixed(1)}% capacity`,
312
+ metrics: ['scheduler.queue_depth', 'scheduler.queue_capacity'],
313
+ suggestedAction: 'Consider scaling up agents or reducing task intake',
314
+ });
315
+ }
316
+ // Check for memory usage
317
+ const memoryUsage = this.get('memory.usage_bytes');
318
+ if (memoryUsage !== undefined && memoryUsage > 1000000000) { // 1GB
319
+ newRecommendations.push({
320
+ timestamp: new Date(),
321
+ category: 'optimization',
322
+ priority: 'medium',
323
+ title: 'High Memory Usage',
324
+ description: `Memory usage is ${(memoryUsage / 1000000000).toFixed(2)}GB`,
325
+ metrics: ['memory.usage_bytes'],
326
+ suggestedAction: 'Consider clearing caches or optimizing memory allocation',
327
+ });
328
+ }
329
+ // Store and emit
330
+ for (const rec of newRecommendations) {
331
+ this.recommendations.push(rec);
332
+ this.emit('recommendation', rec);
333
+ }
334
+ // Keep only recent recommendations
335
+ if (this.recommendations.length > 100) {
336
+ this.recommendations = this.recommendations.slice(-100);
337
+ }
338
+ return newRecommendations;
339
+ }
340
+ /**
341
+ * Initialize default metric definitions
342
+ */
343
+ initializeDefaultMetrics() {
344
+ const defaults = [
345
+ { name: 'swarm.active_agents', type: 'gauge', source: 'swarm', description: 'Number of active agents' },
346
+ { name: 'swarm.total_tasks', type: 'counter', source: 'swarm', description: 'Total tasks processed' },
347
+ { name: 'swarm.completed_tasks', type: 'counter', source: 'swarm', description: 'Completed tasks' },
348
+ { name: 'swarm.failed_tasks', type: 'counter', source: 'swarm', description: 'Failed tasks' },
349
+ { name: 'swarm.error_rate', type: 'gauge', source: 'swarm', description: 'Error rate (0-1)' },
350
+ { name: 'swarm.throughput', type: 'gauge', source: 'swarm', description: 'Tasks per second', unit: 'tps' },
351
+ { name: 'scheduler.queue_depth', type: 'gauge', source: 'scheduler', description: 'Current queue depth' },
352
+ { name: 'scheduler.queue_capacity', type: 'gauge', source: 'scheduler', description: 'Queue capacity' },
353
+ { name: 'scheduler.wait_time_avg', type: 'gauge', source: 'scheduler', description: 'Average wait time', unit: 'ms' },
354
+ { name: 'memory.usage_bytes', type: 'gauge', source: 'memory', description: 'Memory usage', unit: 'bytes' },
355
+ { name: 'memory.backend_health', type: 'gauge', source: 'memory', description: 'Backend health (0-1)' },
356
+ { name: 'recovery.circuit_breakers_open', type: 'gauge', source: 'recovery', description: 'Open circuit breakers' },
357
+ { name: 'recovery.total_recoveries', type: 'counter', source: 'recovery', description: 'Total recovery attempts' },
358
+ { name: 'transport.latency_p95', type: 'gauge', source: 'transport', description: 'P95 latency', unit: 'ms' },
359
+ { name: 'optimizer.recommendations', type: 'counter', source: 'optimizer', description: 'Optimization recommendations' },
360
+ ];
361
+ for (const def of defaults) {
362
+ this.registerMetric(def);
363
+ }
364
+ }
365
+ /**
366
+ * Prune old metric history
367
+ */
368
+ pruneMetricHistory(metric) {
369
+ const cutoff = Date.now() - this.config.retentionPeriod;
370
+ // Remove old points
371
+ metric.points = metric.points.filter(p => p.timestamp.getTime() > cutoff);
372
+ // Limit to max history points
373
+ if (metric.points.length > this.config.maxHistoryPoints) {
374
+ metric.points = metric.points.slice(-this.config.maxHistoryPoints);
375
+ }
376
+ }
377
+ /**
378
+ * Check for anomaly in metric
379
+ */
380
+ checkForAnomaly(metric, point) {
381
+ if (metric.points.length < 10)
382
+ return;
383
+ const values = metric.points.slice(-100).map(p => p.value);
384
+ const mean = values.reduce((a, b) => a + b, 0) / values.length;
385
+ const stdDev = this.calculateStdDev(values);
386
+ // Z-score threshold based on sensitivity
387
+ const threshold = 3 * (1 - this.config.anomalySensitivity + 0.3);
388
+ const zScore = stdDev > 0 ? Math.abs(point.value - mean) / stdDev : 0;
389
+ if (zScore > threshold) {
390
+ const severity = zScore > 4 ? 'critical' : zScore > 3.5 ? 'high' : zScore > 3 ? 'medium' : 'low';
391
+ const anomaly = {
392
+ timestamp: point.timestamp,
393
+ metricName: metric.name,
394
+ value: point.value,
395
+ expectedRange: {
396
+ min: mean - (2 * stdDev),
397
+ max: mean + (2 * stdDev),
398
+ },
399
+ severity,
400
+ description: `Value ${point.value.toFixed(2)} is ${zScore.toFixed(1)} standard deviations from mean`,
401
+ };
402
+ this.anomalies.push(anomaly);
403
+ // Keep only recent anomalies
404
+ if (this.anomalies.length > 1000) {
405
+ this.anomalies = this.anomalies.slice(-1000);
406
+ }
407
+ this.emit('anomaly', anomaly);
408
+ }
409
+ }
410
+ /**
411
+ * Calculate standard deviation
412
+ */
413
+ calculateStdDev(values) {
414
+ if (values.length < 2)
415
+ return 0;
416
+ const mean = values.reduce((a, b) => a + b, 0) / values.length;
417
+ const squaredDiffs = values.map(v => Math.pow(v - mean, 2));
418
+ const avgSquaredDiff = squaredDiffs.reduce((a, b) => a + b, 0) / values.length;
419
+ return Math.sqrt(avgSquaredDiff);
420
+ }
421
+ /**
422
+ * Aggregate metrics (called periodically)
423
+ */
424
+ aggregate() {
425
+ // Prune all metrics
426
+ for (const metric of this.metrics.values()) {
427
+ this.pruneMetricHistory(metric);
428
+ }
429
+ // Generate trend analysis for key metrics
430
+ if (this.config.enableTrendAnalysis) {
431
+ for (const name of ['swarm.error_rate', 'swarm.throughput', 'scheduler.queue_depth']) {
432
+ const trend = this.analyzeTrend(name);
433
+ if (trend) {
434
+ this.emit('trend', trend);
435
+ }
436
+ }
437
+ }
438
+ // Generate recommendations
439
+ if (this.config.enableRecommendations) {
440
+ this.generateRecommendations();
441
+ }
442
+ this.emit('aggregation:complete', {
443
+ timestamp: new Date(),
444
+ metricsCount: this.metrics.size,
445
+ });
446
+ }
447
+ /**
448
+ * Cleanup
449
+ */
450
+ destroy() {
451
+ this.stop();
452
+ this.removeAllListeners();
453
+ this.metrics.clear();
454
+ this.definitions.clear();
455
+ this.anomalies = [];
456
+ this.recommendations = [];
457
+ }
458
+ }
459
+ exports.MetricsAggregator = MetricsAggregator;
460
+ /**
461
+ * Default aggregator instance
462
+ */
463
+ let defaultAggregator = null;
464
+ /**
465
+ * Get default aggregator
466
+ */
467
+ function getMetricsAggregator(config) {
468
+ if (!defaultAggregator) {
469
+ defaultAggregator = new MetricsAggregator(config);
470
+ }
471
+ return defaultAggregator;
472
+ }
473
+ /**
474
+ * Reset default aggregator (for testing)
475
+ */
476
+ function resetMetricsAggregator() {
477
+ if (defaultAggregator) {
478
+ defaultAggregator.destroy();
479
+ defaultAggregator = null;
480
+ }
481
+ }
482
+ //# sourceMappingURL=MetricsAggregator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MetricsAggregator.js","sourceRoot":"","sources":["../../../src/core/metrics/MetricsAggregator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Metrics Module - Unified Metrics Collection and Analysis
3
+ */
4
+ export { MetricsAggregator, MetricsAggregatorConfig, MetricSource, MetricType, MetricPoint, MetricDefinition, Metric, MetricsSnapshot, MetricsSummary, TrendAnalysis, Anomaly, Recommendation, getMetricsAggregator, resetMetricsAggregator, } from './MetricsAggregator.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/metrics/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,YAAY,EACZ,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,MAAM,EACN,eAAe,EACf,cAAc,EACd,aAAa,EACb,OAAO,EACP,cAAc,EACd,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ /**
3
+ * Metrics Module - Unified Metrics Collection and Analysis
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.resetMetricsAggregator = exports.getMetricsAggregator = exports.MetricsAggregator = void 0;
7
+ var MetricsAggregator_js_1 = require("./MetricsAggregator.js");
8
+ Object.defineProperty(exports, "MetricsAggregator", { enumerable: true, get: function () { return MetricsAggregator_js_1.MetricsAggregator; } });
9
+ Object.defineProperty(exports, "getMetricsAggregator", { enumerable: true, get: function () { return MetricsAggregator_js_1.getMetricsAggregator; } });
10
+ Object.defineProperty(exports, "resetMetricsAggregator", { enumerable: true, get: function () { return MetricsAggregator_js_1.resetMetricsAggregator; } });
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/metrics/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,+DAegC;AAd9B,yHAAA,iBAAiB,OAAA;AAYjB,4HAAA,oBAAoB,OAAA;AACpB,8HAAA,sBAAsB,OAAA"}
@@ -177,6 +177,11 @@ export declare class SwarmOptimizer {
177
177
  * Get current topology
178
178
  */
179
179
  getCurrentTopology(): string | undefined;
180
+ /**
181
+ * Get the latest optimization recommendation
182
+ * Returns the most recent topology recommendation from optimization history
183
+ */
184
+ getLatestRecommendation(): TopologyRecommendation | null;
180
185
  /**
181
186
  * Shutdown optimizer
182
187
  */
@@ -1 +1 @@
1
- {"version":3,"file":"SwarmOptimizer.d.ts","sourceRoot":"","sources":["../../../src/core/optimization/SwarmOptimizer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SwarmOptimizer.d.ts","sourceRoot":"","sources":["../../../src/core/optimization/SwarmOptimizer.ts"],"names":[],"mappings":"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"}
@@ -618,6 +618,23 @@ class SwarmOptimizer {
618
618
  getCurrentTopology() {
619
619
  return this.currentTopology;
620
620
  }
621
+ /**
622
+ * Get the latest optimization recommendation
623
+ * Returns the most recent topology recommendation from optimization history
624
+ */
625
+ getLatestRecommendation() {
626
+ if (this.optimizationHistory.length === 0) {
627
+ return null;
628
+ }
629
+ // Find the most recent result with a topology recommendation
630
+ for (let i = this.optimizationHistory.length - 1; i >= 0; i--) {
631
+ const result = this.optimizationHistory[i];
632
+ if (result.topology) {
633
+ return result.topology;
634
+ }
635
+ }
636
+ return null;
637
+ }
621
638
  /**
622
639
  * Shutdown optimizer
623
640
  */