agentic-qe 1.9.4 → 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 (173) 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 +62 -0
  39. package/README.md +33 -6
  40. package/dist/agents/QXPartnerAgent.d.ts +139 -0
  41. package/dist/agents/QXPartnerAgent.d.ts.map +1 -0
  42. package/dist/agents/QXPartnerAgent.js +769 -0
  43. package/dist/agents/QXPartnerAgent.js.map +1 -0
  44. package/dist/agents/index.d.ts +1 -0
  45. package/dist/agents/index.d.ts.map +1 -1
  46. package/dist/agents/index.js +82 -2
  47. package/dist/agents/index.js.map +1 -1
  48. package/dist/cli/commands/debug/agent.d.ts.map +1 -1
  49. package/dist/cli/commands/debug/agent.js +19 -6
  50. package/dist/cli/commands/debug/agent.js.map +1 -1
  51. package/dist/cli/commands/debug/health-check.js +20 -7
  52. package/dist/cli/commands/debug/health-check.js.map +1 -1
  53. package/dist/cli/commands/init-claude-md-template.d.ts +1 -0
  54. package/dist/cli/commands/init-claude-md-template.d.ts.map +1 -1
  55. package/dist/cli/commands/init-claude-md-template.js +4 -3
  56. package/dist/cli/commands/init-claude-md-template.js.map +1 -1
  57. package/dist/cli/commands/workflow/cancel.d.ts.map +1 -1
  58. package/dist/cli/commands/workflow/cancel.js +4 -3
  59. package/dist/cli/commands/workflow/cancel.js.map +1 -1
  60. package/dist/cli/commands/workflow/list.d.ts.map +1 -1
  61. package/dist/cli/commands/workflow/list.js +4 -3
  62. package/dist/cli/commands/workflow/list.js.map +1 -1
  63. package/dist/cli/commands/workflow/pause.d.ts.map +1 -1
  64. package/dist/cli/commands/workflow/pause.js +4 -3
  65. package/dist/cli/commands/workflow/pause.js.map +1 -1
  66. package/dist/cli/init/claude-config.d.ts.map +1 -1
  67. package/dist/cli/init/claude-config.js +3 -8
  68. package/dist/cli/init/claude-config.js.map +1 -1
  69. package/dist/cli/init/claude-md.d.ts.map +1 -1
  70. package/dist/cli/init/claude-md.js +44 -2
  71. package/dist/cli/init/claude-md.js.map +1 -1
  72. package/dist/cli/init/database-init.js +1 -1
  73. package/dist/cli/init/index.d.ts.map +1 -1
  74. package/dist/cli/init/index.js +13 -6
  75. package/dist/cli/init/index.js.map +1 -1
  76. package/dist/cli/init/skills.d.ts.map +1 -1
  77. package/dist/cli/init/skills.js +2 -1
  78. package/dist/cli/init/skills.js.map +1 -1
  79. package/dist/core/memory/AgentDBIntegration.d.ts +24 -6
  80. package/dist/core/memory/AgentDBIntegration.d.ts.map +1 -1
  81. package/dist/core/memory/AgentDBIntegration.js +66 -10
  82. package/dist/core/memory/AgentDBIntegration.js.map +1 -1
  83. package/dist/core/memory/UnifiedMemoryCoordinator.d.ts +341 -0
  84. package/dist/core/memory/UnifiedMemoryCoordinator.d.ts.map +1 -0
  85. package/dist/core/memory/UnifiedMemoryCoordinator.js +986 -0
  86. package/dist/core/memory/UnifiedMemoryCoordinator.js.map +1 -0
  87. package/dist/core/memory/index.d.ts +5 -0
  88. package/dist/core/memory/index.d.ts.map +1 -1
  89. package/dist/core/memory/index.js +23 -1
  90. package/dist/core/memory/index.js.map +1 -1
  91. package/dist/core/optimization/SwarmOptimizer.d.ts +185 -0
  92. package/dist/core/optimization/SwarmOptimizer.d.ts.map +1 -0
  93. package/dist/core/optimization/SwarmOptimizer.js +631 -0
  94. package/dist/core/optimization/SwarmOptimizer.js.map +1 -0
  95. package/dist/core/optimization/index.d.ts +9 -0
  96. package/dist/core/optimization/index.d.ts.map +1 -0
  97. package/dist/core/optimization/index.js +25 -0
  98. package/dist/core/optimization/index.js.map +1 -0
  99. package/dist/core/optimization/types.d.ts +53 -0
  100. package/dist/core/optimization/types.d.ts.map +1 -0
  101. package/dist/core/optimization/types.js +6 -0
  102. package/dist/core/optimization/types.js.map +1 -0
  103. package/dist/core/orchestration/PriorityQueue.d.ts +54 -0
  104. package/dist/core/orchestration/PriorityQueue.d.ts.map +1 -0
  105. package/dist/core/orchestration/PriorityQueue.js +122 -0
  106. package/dist/core/orchestration/PriorityQueue.js.map +1 -0
  107. package/dist/core/orchestration/WorkflowOrchestrator.d.ts +176 -0
  108. package/dist/core/orchestration/WorkflowOrchestrator.d.ts.map +1 -0
  109. package/dist/core/orchestration/WorkflowOrchestrator.js +813 -0
  110. package/dist/core/orchestration/WorkflowOrchestrator.js.map +1 -0
  111. package/dist/core/orchestration/index.d.ts +7 -0
  112. package/dist/core/orchestration/index.d.ts.map +1 -0
  113. package/dist/core/orchestration/index.js +11 -0
  114. package/dist/core/orchestration/index.js.map +1 -0
  115. package/dist/core/orchestration/types.d.ts +96 -0
  116. package/dist/core/orchestration/types.d.ts.map +1 -0
  117. package/dist/core/orchestration/types.js +6 -0
  118. package/dist/core/orchestration/types.js.map +1 -0
  119. package/dist/core/skills/DynamicSkillLoader.d.ts +96 -0
  120. package/dist/core/skills/DynamicSkillLoader.d.ts.map +1 -0
  121. package/dist/core/skills/DynamicSkillLoader.js +353 -0
  122. package/dist/core/skills/DynamicSkillLoader.js.map +1 -0
  123. package/dist/core/skills/types.d.ts +118 -0
  124. package/dist/core/skills/types.d.ts.map +1 -0
  125. package/dist/core/skills/types.js +7 -0
  126. package/dist/core/skills/types.js.map +1 -0
  127. package/dist/core/transport/QUICTransport.d.ts +320 -0
  128. package/dist/core/transport/QUICTransport.d.ts.map +1 -0
  129. package/dist/core/transport/QUICTransport.js +711 -0
  130. package/dist/core/transport/QUICTransport.js.map +1 -0
  131. package/dist/core/transport/index.d.ts +40 -0
  132. package/dist/core/transport/index.d.ts.map +1 -0
  133. package/dist/core/transport/index.js +46 -0
  134. package/dist/core/transport/index.js.map +1 -0
  135. package/dist/core/transport/quic-loader.d.ts +123 -0
  136. package/dist/core/transport/quic-loader.d.ts.map +1 -0
  137. package/dist/core/transport/quic-loader.js +293 -0
  138. package/dist/core/transport/quic-loader.js.map +1 -0
  139. package/dist/core/transport/quic.d.ts +154 -0
  140. package/dist/core/transport/quic.d.ts.map +1 -0
  141. package/dist/core/transport/quic.js +214 -0
  142. package/dist/core/transport/quic.js.map +1 -0
  143. package/dist/mcp/services/AgentRegistry.d.ts.map +1 -1
  144. package/dist/mcp/services/AgentRegistry.js +4 -1
  145. package/dist/mcp/services/AgentRegistry.js.map +1 -1
  146. package/dist/types/index.d.ts +2 -1
  147. package/dist/types/index.d.ts.map +1 -1
  148. package/dist/types/index.js +2 -0
  149. package/dist/types/index.js.map +1 -1
  150. package/dist/types/qx.d.ts +397 -0
  151. package/dist/types/qx.d.ts.map +1 -0
  152. package/dist/types/qx.js +71 -0
  153. package/dist/types/qx.js.map +1 -0
  154. package/dist/visualization/api/RestEndpoints.js +1 -1
  155. package/dist/visualization/api/RestEndpoints.js.map +1 -1
  156. package/dist/visualization/api/WebSocketServer.d.ts +44 -0
  157. package/dist/visualization/api/WebSocketServer.d.ts.map +1 -1
  158. package/dist/visualization/api/WebSocketServer.js +144 -23
  159. package/dist/visualization/api/WebSocketServer.js.map +1 -1
  160. package/dist/visualization/core/DataTransformer.d.ts +10 -0
  161. package/dist/visualization/core/DataTransformer.d.ts.map +1 -1
  162. package/dist/visualization/core/DataTransformer.js +60 -5
  163. package/dist/visualization/core/DataTransformer.js.map +1 -1
  164. package/dist/visualization/emit-event.d.ts +75 -0
  165. package/dist/visualization/emit-event.d.ts.map +1 -0
  166. package/dist/visualization/emit-event.js +213 -0
  167. package/dist/visualization/emit-event.js.map +1 -0
  168. package/dist/visualization/index.d.ts +1 -0
  169. package/dist/visualization/index.d.ts.map +1 -1
  170. package/dist/visualization/index.js +7 -1
  171. package/dist/visualization/index.js.map +1 -1
  172. package/docs/reference/skills.md +63 -1
  173. package/package.json +4 -4
@@ -0,0 +1,631 @@
1
+ "use strict";
2
+ /**
3
+ * SwarmOptimizer - Stream D Implementation
4
+ *
5
+ * Provides topology recommendation, agent allocation, bottleneck detection,
6
+ * and performance optimization for agent swarms.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.SwarmOptimizer = void 0;
10
+ const Logger_1 = require("../../utils/Logger");
11
+ /**
12
+ * SwarmOptimizer - Optimize swarm topology and agent allocation
13
+ */
14
+ class SwarmOptimizer {
15
+ constructor(memoryStore, eventBus) {
16
+ // Topology performance weights
17
+ this.TOPOLOGY_WEIGHTS = {
18
+ hierarchical: { coordination: 0.9, parallelization: 0.6, scalability: 0.7 },
19
+ mesh: { coordination: 0.7, parallelization: 0.9, scalability: 0.8 },
20
+ ring: { coordination: 0.6, parallelization: 0.7, scalability: 0.5 },
21
+ star: { coordination: 0.8, parallelization: 0.5, scalability: 0.6 }
22
+ };
23
+ this.logger = Logger_1.Logger.getInstance();
24
+ this.memoryStore = memoryStore;
25
+ this.eventBus = eventBus;
26
+ this.performanceTrackers = new Map();
27
+ this.learningEngines = new Map();
28
+ this.optimizationHistory = [];
29
+ }
30
+ /**
31
+ * Initialize optimizer
32
+ */
33
+ async initialize() {
34
+ this.logger.info('Initializing SwarmOptimizer');
35
+ // Load previous optimization history
36
+ await this.loadOptimizationHistory();
37
+ // Subscribe to performance events if event bus available
38
+ if (this.eventBus) {
39
+ this.eventBus.subscribe('agent:completed', this.handleAgentCompleted.bind(this));
40
+ this.eventBus.subscribe('test:completed', this.handleTestCompleted.bind(this));
41
+ }
42
+ this.logger.info('SwarmOptimizer initialized successfully');
43
+ }
44
+ /**
45
+ * Recommend optimal topology based on workload profile
46
+ *
47
+ * Analyzes task characteristics and recommends:
48
+ * - hierarchical: High coordination, moderate parallelization
49
+ * - mesh: High parallelization, moderate coordination
50
+ * - ring: Balanced but limited scalability
51
+ * - star: Centralized coordination, limited parallelization
52
+ */
53
+ async recommendTopology(workload) {
54
+ this.logger.info('Analyzing workload for topology recommendation');
55
+ // Calculate topology scores based on workload characteristics
56
+ const scores = new Map();
57
+ for (const [topology, weights] of Object.entries(this.TOPOLOGY_WEIGHTS)) {
58
+ // Score calculation considers:
59
+ // 1. Parallelizability - higher is better for mesh/hierarchical
60
+ // 2. Interdependencies - higher needs better coordination (hierarchical/star)
61
+ // 3. Resource intensity - affects scalability requirements
62
+ // 4. Task count - larger swarms benefit from hierarchical
63
+ const parallelScore = weights.parallelization * workload.parallelizability;
64
+ const coordScore = weights.coordination * workload.interdependencies;
65
+ const scaleScore = weights.scalability * (workload.taskCount / 100); // normalize to 100 tasks
66
+ const complexityScore = (1 - workload.averageComplexity) * 0.5; // simpler tasks = higher score
67
+ const resourceScore = (1 - workload.resourceIntensity) * weights.scalability;
68
+ const totalScore = parallelScore * 0.3 +
69
+ coordScore * 0.3 +
70
+ scaleScore * 0.2 +
71
+ complexityScore * 0.1 +
72
+ resourceScore * 0.1;
73
+ scores.set(topology, totalScore);
74
+ }
75
+ // Find best topology
76
+ let bestTopology = 'hierarchical';
77
+ let bestScore = 0;
78
+ for (const [topology, score] of scores.entries()) {
79
+ if (score > bestScore) {
80
+ bestScore = score;
81
+ bestTopology = topology;
82
+ }
83
+ }
84
+ // Calculate expected speedup based on parallelizability and topology
85
+ const baseSpeedup = 1.0;
86
+ const topologyMultiplier = this.TOPOLOGY_WEIGHTS[bestTopology].parallelization;
87
+ const expectedSpeedup = baseSpeedup + (workload.parallelizability * topologyMultiplier * 3); // Max ~3.5x
88
+ // Calculate agent allocation recommendations
89
+ const agentAllocation = this.calculateAgentDistribution(workload, bestTopology);
90
+ // Calculate confidence based on score margin
91
+ const sortedScores = Array.from(scores.values()).sort((a, b) => b - a);
92
+ const scoreMargin = sortedScores[0] - sortedScores[1];
93
+ const confidence = Math.min(0.95, 0.5 + scoreMargin * 2);
94
+ const reasoning = this.generateTopologyReasoning(workload, bestTopology, scores, expectedSpeedup);
95
+ const recommendation = {
96
+ topology: bestTopology,
97
+ reasoning,
98
+ expectedSpeedup,
99
+ agentAllocation,
100
+ confidence
101
+ };
102
+ // Store recommendation
103
+ await this.memoryStore.store('optimization/topology/latest', recommendation, { partition: 'optimization' });
104
+ this.currentTopology = bestTopology;
105
+ return recommendation;
106
+ }
107
+ /**
108
+ * Allocate agents to tasks optimally
109
+ *
110
+ * Matches tasks to agents based on:
111
+ * - Capability matching
112
+ * - Load balancing
113
+ * - Performance history
114
+ * - Task dependencies
115
+ */
116
+ async allocateAgents(tasks, agents) {
117
+ this.logger.info(`Allocating ${agents.length} agents to ${tasks.length} tasks`);
118
+ const allocations = new Map();
119
+ const agentLoads = new Map();
120
+ // Initialize agent loads
121
+ for (const agent of agents) {
122
+ if (agent.isAvailable) {
123
+ allocations.set(agent.id, []);
124
+ agentLoads.set(agent.id, agent.currentLoad);
125
+ }
126
+ }
127
+ // Sort tasks by priority and complexity (critical + complex first)
128
+ const sortedTasks = [...tasks].sort((a, b) => {
129
+ const priorityWeight = { critical: 4, high: 3, medium: 2, low: 1 };
130
+ const aPriority = priorityWeight[a.priority];
131
+ const bPriority = priorityWeight[b.priority];
132
+ if (aPriority !== bPriority) {
133
+ return bPriority - aPriority;
134
+ }
135
+ return b.complexity - a.complexity;
136
+ });
137
+ // Allocate tasks using capability matching and load balancing
138
+ const reasoning = [];
139
+ for (const task of sortedTasks) {
140
+ const suitableAgents = this.findSuitableAgents(task, agents, agentLoads);
141
+ if (suitableAgents.length === 0) {
142
+ reasoning.push(`Warning: No suitable agent found for task ${task.id} (${task.type})`);
143
+ continue;
144
+ }
145
+ // Select best agent (highest score, lowest load)
146
+ const bestAgent = suitableAgents.reduce((best, current) => {
147
+ const currentLoad = agentLoads.get(current.id) || 0;
148
+ const bestLoad = agentLoads.get(best.id) || 0;
149
+ // Score combines performance and inverse load
150
+ const currentScore = current.performanceScore * (1 - currentLoad);
151
+ const bestScore = best.performanceScore * (1 - bestLoad);
152
+ return currentScore > bestScore ? current : best;
153
+ });
154
+ // Allocate task to agent
155
+ const agentTasks = allocations.get(bestAgent.id) || [];
156
+ agentTasks.push(task.id);
157
+ allocations.set(bestAgent.id, agentTasks);
158
+ // Update agent load (estimate)
159
+ const estimatedLoad = (task.estimatedDuration / 60000) * task.complexity; // normalize to minutes
160
+ agentLoads.set(bestAgent.id, (agentLoads.get(bestAgent.id) || 0) + estimatedLoad);
161
+ reasoning.push(`Task ${task.id} (${task.type}, ${task.priority}) → Agent ${bestAgent.id} (score: ${bestAgent.performanceScore.toFixed(2)})`);
162
+ }
163
+ // Calculate load balance metric (1 = perfectly balanced, 0 = highly imbalanced)
164
+ const loads = Array.from(agentLoads.values());
165
+ const avgLoad = loads.reduce((sum, load) => sum + load, 0) / loads.length;
166
+ const variance = loads.reduce((sum, load) => sum + Math.pow(load - avgLoad, 2), 0) / loads.length;
167
+ const stdDev = Math.sqrt(variance);
168
+ const loadBalance = Math.max(0, 1 - (stdDev / avgLoad));
169
+ // Calculate expected duration (critical path)
170
+ const expectedDuration = this.calculateExpectedDuration(tasks, allocations, agentLoads);
171
+ const allocation = {
172
+ allocations,
173
+ reasoning: reasoning.join('\n'),
174
+ loadBalance,
175
+ expectedDuration
176
+ };
177
+ // Store allocation
178
+ await this.memoryStore.store('optimization/allocation/latest', allocation, { partition: 'optimization' });
179
+ return allocation;
180
+ }
181
+ /**
182
+ * Detect performance bottlenecks
183
+ *
184
+ * Analyzes metrics to identify:
185
+ * - Agent bottlenecks (overloaded, underperforming)
186
+ * - Memory bottlenecks (high usage, slow queries)
187
+ * - Coordination bottlenecks (high latency, contention)
188
+ * - IO bottlenecks (disk, network)
189
+ */
190
+ async detectBottlenecks(metrics) {
191
+ this.logger.info(`Analyzing ${metrics.length} performance metric snapshots`);
192
+ const bottlenecks = [];
193
+ if (metrics.length === 0) {
194
+ return bottlenecks;
195
+ }
196
+ // Calculate average metrics
197
+ const avgThroughput = metrics.reduce((sum, m) => sum + m.taskThroughput, 0) / metrics.length;
198
+ const avgLatency = metrics.reduce((sum, m) => sum + m.averageLatency, 0) / metrics.length;
199
+ const avgUtilization = metrics.reduce((sum, m) => sum + m.resourceUtilization, 0) / metrics.length;
200
+ // Detect agent bottlenecks
201
+ if (avgUtilization > 0.85) {
202
+ bottlenecks.push({
203
+ type: 'agent',
204
+ location: 'swarm',
205
+ severity: Math.min(1, avgUtilization - 0.85) / 0.15,
206
+ impact: `High agent utilization (${(avgUtilization * 100).toFixed(1)}%) limiting throughput`,
207
+ recommendation: 'Scale up agent count or optimize task distribution'
208
+ });
209
+ }
210
+ // Detect memory bottlenecks
211
+ if (avgUtilization > 0.75 && avgLatency > 1000) {
212
+ bottlenecks.push({
213
+ type: 'memory',
214
+ location: 'storage',
215
+ severity: Math.min(1, avgLatency / 5000), // 5s max
216
+ impact: `High memory latency (${avgLatency.toFixed(0)}ms) affecting performance`,
217
+ recommendation: 'Enable caching, optimize queries, or add memory capacity'
218
+ });
219
+ }
220
+ // Detect coordination bottlenecks
221
+ const latencyVariance = this.calculateVariance(metrics.map(m => m.averageLatency));
222
+ if (latencyVariance > avgLatency * 0.5) {
223
+ bottlenecks.push({
224
+ type: 'coordination',
225
+ location: 'event-bus',
226
+ severity: Math.min(1, latencyVariance / (avgLatency * 2)),
227
+ impact: 'High coordination overhead causing latency spikes',
228
+ recommendation: 'Optimize event handling, reduce synchronization, or switch topology'
229
+ });
230
+ }
231
+ // Detect IO bottlenecks (low throughput with low utilization)
232
+ if (avgThroughput < 5 && avgUtilization < 0.5) {
233
+ bottlenecks.push({
234
+ type: 'io',
235
+ location: 'storage',
236
+ severity: Math.min(1, (0.5 - avgUtilization) * 2),
237
+ impact: 'Low throughput despite available capacity suggests IO limitations',
238
+ recommendation: 'Enable batch processing, optimize file operations, or use async IO'
239
+ });
240
+ }
241
+ // Include existing bottlenecks from metrics
242
+ for (const metric of metrics) {
243
+ if (metric.bottlenecks && metric.bottlenecks.length > 0) {
244
+ bottlenecks.push(...metric.bottlenecks);
245
+ }
246
+ }
247
+ // Store bottleneck analysis
248
+ await this.memoryStore.store('optimization/bottlenecks/latest', { timestamp: new Date(), bottlenecks }, { partition: 'optimization' });
249
+ this.logger.info(`Detected ${bottlenecks.length} bottlenecks`);
250
+ return bottlenecks;
251
+ }
252
+ /**
253
+ * Optimize swarm performance
254
+ *
255
+ * Applies optimizations based on configuration:
256
+ * - Topology adjustment
257
+ * - Agent reallocation
258
+ * - Parameter tuning
259
+ * - Resource scaling
260
+ */
261
+ async optimize(config) {
262
+ this.logger.info('Starting swarm optimization');
263
+ const improvements = new Map();
264
+ let topology;
265
+ let allocation;
266
+ try {
267
+ // 1. Collect current performance metrics
268
+ const currentMetrics = await this.collectCurrentMetrics();
269
+ const baselinePerformance = this.calculateCompositeScore(currentMetrics);
270
+ this.logger.debug(`Baseline performance score: ${baselinePerformance.toFixed(3)}`);
271
+ // 2. Detect bottlenecks if enabled
272
+ if (config.enableBottleneckDetection) {
273
+ const bottlenecks = await this.detectBottlenecks(currentMetrics);
274
+ this.logger.info(`Found ${bottlenecks.length} bottlenecks`);
275
+ // Apply bottleneck-specific optimizations
276
+ for (const bottleneck of bottlenecks) {
277
+ await this.applyBottleneckFix(bottleneck);
278
+ }
279
+ }
280
+ // 3. Recommend topology optimization
281
+ if (config.enableAutoTuning) {
282
+ const workloadProfile = await this.analyzeWorkload();
283
+ topology = await this.recommendTopology(workloadProfile);
284
+ this.logger.info(`Recommended topology: ${topology.topology} (expected speedup: ${topology.expectedSpeedup.toFixed(2)}x)`);
285
+ }
286
+ // 4. Optimize agent allocation if adaptive scaling enabled
287
+ if (config.enableAdaptiveScaling) {
288
+ const tasks = await this.loadPendingTasks();
289
+ const agents = await this.loadActiveAgents(config.maxAgents);
290
+ allocation = await this.allocateAgents(tasks, agents);
291
+ this.logger.info(`Agent allocation optimized (load balance: ${allocation.loadBalance.toFixed(2)})`);
292
+ }
293
+ // 5. Calculate improvements
294
+ const optimizedMetrics = await this.collectCurrentMetrics();
295
+ const optimizedPerformance = this.calculateCompositeScore(optimizedMetrics);
296
+ const throughputImprovement = this.calculateImprovement(currentMetrics.map(m => m.taskThroughput), optimizedMetrics.map(m => m.taskThroughput));
297
+ const latencyImprovement = -this.calculateImprovement(// negative because lower is better
298
+ currentMetrics.map(m => m.averageLatency), optimizedMetrics.map(m => m.averageLatency));
299
+ const utilizationImprovement = this.calculateImprovement(currentMetrics.map(m => m.resourceUtilization), optimizedMetrics.map(m => m.resourceUtilization));
300
+ improvements.set('throughput', throughputImprovement);
301
+ improvements.set('latency', latencyImprovement);
302
+ improvements.set('utilization', utilizationImprovement);
303
+ improvements.set('overall', ((optimizedPerformance - baselinePerformance) / baselinePerformance) * 100);
304
+ const result = {
305
+ success: true,
306
+ improvements,
307
+ topology,
308
+ allocation,
309
+ timestamp: new Date()
310
+ };
311
+ // Store optimization result
312
+ this.optimizationHistory.push(result);
313
+ await this.storeOptimizationResult(result);
314
+ this.logger.info(`Optimization complete. Overall improvement: ${improvements.get('overall')?.toFixed(1)}%`);
315
+ return result;
316
+ }
317
+ catch (error) {
318
+ this.logger.error('Optimization failed:', error);
319
+ return {
320
+ success: false,
321
+ improvements: new Map(),
322
+ timestamp: new Date()
323
+ };
324
+ }
325
+ }
326
+ /**
327
+ * Register performance tracker for an agent
328
+ */
329
+ registerPerformanceTracker(agentId, tracker) {
330
+ this.performanceTrackers.set(agentId, tracker);
331
+ }
332
+ /**
333
+ * Register learning engine for an agent
334
+ */
335
+ registerLearningEngine(agentId, engine) {
336
+ this.learningEngines.set(agentId, engine);
337
+ }
338
+ // ============= PRIVATE HELPER METHODS =============
339
+ /**
340
+ * Calculate agent distribution for topology
341
+ */
342
+ calculateAgentDistribution(workload, topology) {
343
+ const allocation = new Map();
344
+ // Estimate agent types needed based on task types
345
+ for (const [taskType, count] of workload.taskTypes.entries()) {
346
+ const agentType = this.mapTaskTypeToAgentType(taskType);
347
+ const currentCount = allocation.get(agentType) || 0;
348
+ allocation.set(agentType, currentCount + count);
349
+ }
350
+ // Adjust based on topology
351
+ if (topology === 'hierarchical') {
352
+ // Add coordinator agents
353
+ allocation.set('coordinator', Math.ceil(workload.taskCount / 10));
354
+ }
355
+ else if (topology === 'star') {
356
+ // Single coordinator
357
+ allocation.set('coordinator', 1);
358
+ }
359
+ return allocation;
360
+ }
361
+ /**
362
+ * Generate reasoning explanation for topology recommendation
363
+ */
364
+ generateTopologyReasoning(workload, topology, scores, expectedSpeedup) {
365
+ const parts = [];
366
+ parts.push(`Recommended ${topology} topology based on workload analysis:`);
367
+ parts.push(`- Task count: ${workload.taskCount}`);
368
+ parts.push(`- Parallelizability: ${(workload.parallelizability * 100).toFixed(0)}%`);
369
+ parts.push(`- Interdependencies: ${(workload.interdependencies * 100).toFixed(0)}%`);
370
+ parts.push(`- Resource intensity: ${(workload.resourceIntensity * 100).toFixed(0)}%`);
371
+ parts.push(`- Average complexity: ${(workload.averageComplexity * 100).toFixed(0)}%`);
372
+ parts.push('');
373
+ parts.push('Topology scores:');
374
+ for (const [topo, score] of Array.from(scores.entries()).sort((a, b) => b[1] - a[1])) {
375
+ parts.push(`- ${topo}: ${score.toFixed(3)}`);
376
+ }
377
+ parts.push('');
378
+ parts.push(`Expected speedup: ${expectedSpeedup.toFixed(2)}x`);
379
+ return parts.join('\n');
380
+ }
381
+ /**
382
+ * Find suitable agents for a task
383
+ */
384
+ findSuitableAgents(task, agents, agentLoads) {
385
+ return agents.filter(agent => {
386
+ if (!agent.isAvailable)
387
+ return false;
388
+ // Check if agent is overloaded
389
+ const currentLoad = agentLoads.get(agent.id) || 0;
390
+ if (currentLoad > 0.9)
391
+ return false;
392
+ // Check capability match
393
+ if (task.requiredCapabilities && task.requiredCapabilities.length > 0) {
394
+ const hasAllCapabilities = task.requiredCapabilities.every(cap => agent.capabilities.includes(cap));
395
+ if (!hasAllCapabilities)
396
+ return false;
397
+ }
398
+ // Check type compatibility
399
+ const compatibleTypes = this.getCompatibleAgentTypes(task.type);
400
+ return compatibleTypes.includes(agent.type);
401
+ });
402
+ }
403
+ /**
404
+ * Get compatible agent types for a task type
405
+ */
406
+ getCompatibleAgentTypes(taskType) {
407
+ const typeMap = {
408
+ 'test-generation': ['qe-test-generator', 'qe-integration-tester', 'coder'],
409
+ 'coverage-analysis': ['qe-coverage-analyzer', 'qe-test-gap-finder'],
410
+ 'performance-test': ['qe-performance-tester', 'qe-load-test-specialist'],
411
+ 'security-test': ['qe-security-tester', 'qe-penetration-tester'],
412
+ 'code-review': ['qe-code-reviewer', 'reviewer'],
413
+ 'planning': ['qe-test-strategist', 'planner'],
414
+ 'default': ['coder', 'tester', 'reviewer']
415
+ };
416
+ return typeMap[taskType] || typeMap['default'];
417
+ }
418
+ /**
419
+ * Map task type to agent type
420
+ */
421
+ mapTaskTypeToAgentType(taskType) {
422
+ const typeMap = {
423
+ 'test-generation': 'qe-test-generator',
424
+ 'coverage-analysis': 'qe-coverage-analyzer',
425
+ 'performance-test': 'qe-performance-tester',
426
+ 'security-test': 'qe-security-tester',
427
+ 'code-review': 'qe-code-reviewer',
428
+ 'planning': 'qe-test-strategist'
429
+ };
430
+ return typeMap[taskType] || 'coder';
431
+ }
432
+ /**
433
+ * Calculate expected duration (critical path)
434
+ */
435
+ calculateExpectedDuration(tasks, allocations, agentLoads) {
436
+ let maxDuration = 0;
437
+ for (const [agentId, taskIds] of allocations.entries()) {
438
+ let agentDuration = 0;
439
+ for (const taskId of taskIds) {
440
+ const task = tasks.find(t => t.id === taskId);
441
+ if (task) {
442
+ agentDuration += task.estimatedDuration;
443
+ }
444
+ }
445
+ maxDuration = Math.max(maxDuration, agentDuration);
446
+ }
447
+ return maxDuration;
448
+ }
449
+ /**
450
+ * Calculate variance
451
+ */
452
+ calculateVariance(values) {
453
+ if (values.length === 0)
454
+ return 0;
455
+ const mean = values.reduce((sum, v) => sum + v, 0) / values.length;
456
+ const variance = values.reduce((sum, v) => sum + Math.pow(v - mean, 2), 0) / values.length;
457
+ return variance;
458
+ }
459
+ /**
460
+ * Calculate improvement percentage
461
+ */
462
+ calculateImprovement(before, after) {
463
+ if (before.length === 0 || after.length === 0)
464
+ return 0;
465
+ const avgBefore = before.reduce((sum, v) => sum + v, 0) / before.length;
466
+ const avgAfter = after.reduce((sum, v) => sum + v, 0) / after.length;
467
+ return ((avgAfter - avgBefore) / avgBefore) * 100;
468
+ }
469
+ /**
470
+ * Calculate composite performance score
471
+ */
472
+ calculateCompositeScore(metrics) {
473
+ if (metrics.length === 0)
474
+ return 0;
475
+ const weights = {
476
+ throughput: 0.4,
477
+ latency: 0.3,
478
+ utilization: 0.3
479
+ };
480
+ const avgThroughput = metrics.reduce((sum, m) => sum + m.taskThroughput, 0) / metrics.length;
481
+ const avgLatency = metrics.reduce((sum, m) => sum + m.averageLatency, 0) / metrics.length;
482
+ const avgUtilization = metrics.reduce((sum, m) => sum + m.resourceUtilization, 0) / metrics.length;
483
+ // Normalize metrics (throughput higher is better, latency lower is better)
484
+ const normalizedThroughput = Math.min(1, avgThroughput / 10); // 10 tasks/sec baseline
485
+ const normalizedLatency = Math.max(0, 1 - (avgLatency / 5000)); // 5s baseline
486
+ const normalizedUtilization = avgUtilization;
487
+ return (normalizedThroughput * weights.throughput +
488
+ normalizedLatency * weights.latency +
489
+ normalizedUtilization * weights.utilization);
490
+ }
491
+ /**
492
+ * Collect current performance metrics
493
+ */
494
+ async collectCurrentMetrics() {
495
+ const metrics = [];
496
+ // Collect from registered performance trackers
497
+ for (const [agentId, tracker] of this.performanceTrackers.entries()) {
498
+ try {
499
+ const improvement = await tracker.calculateImprovement();
500
+ metrics.push({
501
+ taskThroughput: improvement.current.metrics.tasksCompleted / improvement.daysElapsed,
502
+ averageLatency: improvement.current.metrics.averageExecutionTime,
503
+ resourceUtilization: improvement.current.metrics.resourceEfficiency,
504
+ bottlenecks: [],
505
+ timestamp: new Date()
506
+ });
507
+ }
508
+ catch (error) {
509
+ this.logger.warn(`Failed to collect metrics for agent ${agentId}:`, error);
510
+ }
511
+ }
512
+ // If no trackers, load from memory
513
+ if (metrics.length === 0) {
514
+ const stored = await this.memoryStore.retrieve('optimization/metrics/current', { partition: 'optimization' });
515
+ if (stored && Array.isArray(stored)) {
516
+ metrics.push(...stored);
517
+ }
518
+ }
519
+ return metrics;
520
+ }
521
+ /**
522
+ * Analyze current workload profile
523
+ */
524
+ async analyzeWorkload() {
525
+ // Load from memory or estimate based on current state
526
+ const stored = await this.memoryStore.retrieve('optimization/workload/profile', { partition: 'optimization' });
527
+ if (stored) {
528
+ return stored;
529
+ }
530
+ // Default workload profile
531
+ return {
532
+ taskCount: 10,
533
+ taskTypes: new Map([['test-generation', 5], ['coverage-analysis', 3], ['code-review', 2]]),
534
+ averageComplexity: 0.5,
535
+ parallelizability: 0.7,
536
+ resourceIntensity: 0.5,
537
+ interdependencies: 0.3
538
+ };
539
+ }
540
+ /**
541
+ * Load pending tasks
542
+ */
543
+ async loadPendingTasks() {
544
+ const stored = await this.memoryStore.retrieve('optimization/tasks/pending', { partition: 'optimization' });
545
+ if (stored && Array.isArray(stored)) {
546
+ return stored;
547
+ }
548
+ return [];
549
+ }
550
+ /**
551
+ * Load active agents
552
+ */
553
+ async loadActiveAgents(maxAgents) {
554
+ const stored = await this.memoryStore.retrieve('optimization/agents/active', { partition: 'optimization' });
555
+ if (stored && Array.isArray(stored)) {
556
+ return stored.slice(0, maxAgents);
557
+ }
558
+ return [];
559
+ }
560
+ /**
561
+ * Apply bottleneck-specific fix
562
+ */
563
+ async applyBottleneckFix(bottleneck) {
564
+ this.logger.info(`Applying fix for ${bottleneck.type} bottleneck at ${bottleneck.location}`);
565
+ // Store fix action
566
+ await this.memoryStore.store(`optimization/bottleneck-fixes/${Date.now()}`, {
567
+ bottleneck,
568
+ timestamp: new Date(),
569
+ applied: true
570
+ }, { partition: 'optimization', ttl: 86400 } // 24 hour TTL
571
+ );
572
+ }
573
+ /**
574
+ * Store optimization result
575
+ */
576
+ async storeOptimizationResult(result) {
577
+ await this.memoryStore.store(`optimization/results/${result.timestamp.getTime()}`, result, { partition: 'optimization', ttl: 2592000 } // 30 days
578
+ );
579
+ }
580
+ /**
581
+ * Load optimization history
582
+ */
583
+ async loadOptimizationHistory() {
584
+ try {
585
+ const entries = await this.memoryStore.query('optimization/results/%', { partition: 'optimization' });
586
+ this.optimizationHistory = entries
587
+ .map(entry => entry.value)
588
+ .sort((a, b) => a.timestamp.getTime() - b.timestamp.getTime());
589
+ this.logger.info(`Loaded ${this.optimizationHistory.length} optimization history entries`);
590
+ }
591
+ catch (error) {
592
+ this.logger.warn('No previous optimization history found');
593
+ }
594
+ }
595
+ /**
596
+ * Handle agent completed event
597
+ */
598
+ async handleAgentCompleted(event) {
599
+ // Update metrics based on completed agent work
600
+ this.logger.debug(`Agent ${event.agentId} completed in ${event.duration}ms`);
601
+ }
602
+ /**
603
+ * Handle test completed event
604
+ */
605
+ async handleTestCompleted(event) {
606
+ // Update test metrics
607
+ this.logger.debug(`Test suite completed: ${event.passed}/${event.passed + event.failed} passed`);
608
+ }
609
+ /**
610
+ * Get optimization history
611
+ */
612
+ getOptimizationHistory() {
613
+ return [...this.optimizationHistory];
614
+ }
615
+ /**
616
+ * Get current topology
617
+ */
618
+ getCurrentTopology() {
619
+ return this.currentTopology;
620
+ }
621
+ /**
622
+ * Shutdown optimizer
623
+ */
624
+ async shutdown() {
625
+ this.logger.info('Shutting down SwarmOptimizer');
626
+ this.performanceTrackers.clear();
627
+ this.learningEngines.clear();
628
+ }
629
+ }
630
+ exports.SwarmOptimizer = SwarmOptimizer;
631
+ //# sourceMappingURL=SwarmOptimizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SwarmOptimizer.js","sourceRoot":"","sources":["../../../src/core/optimization/SwarmOptimizer.ts"],"names":[],"mappings":"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"}