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.
- package/.claude/agents/qe-api-contract-validator.md +95 -1336
- package/.claude/agents/qe-chaos-engineer.md +152 -1211
- package/.claude/agents/qe-code-complexity.md +144 -707
- package/.claude/agents/qe-coverage-analyzer.md +147 -743
- package/.claude/agents/qe-deployment-readiness.md +143 -1496
- package/.claude/agents/qe-flaky-test-hunter.md +132 -1529
- package/.claude/agents/qe-fleet-commander.md +12 -12
- package/.claude/agents/qe-performance-tester.md +150 -886
- package/.claude/agents/qe-production-intelligence.md +155 -1396
- package/.claude/agents/qe-quality-analyzer.md +6 -6
- package/.claude/agents/qe-quality-gate.md +151 -648
- package/.claude/agents/qe-regression-risk-analyzer.md +132 -1150
- package/.claude/agents/qe-requirements-validator.md +149 -932
- package/.claude/agents/qe-security-scanner.md +157 -797
- package/.claude/agents/qe-test-data-architect.md +96 -1365
- package/.claude/agents/qe-test-executor.md +8 -8
- package/.claude/agents/qe-test-generator.md +145 -1540
- package/.claude/agents/qe-visual-tester.md +153 -1257
- package/.claude/agents/qx-partner.md +235 -0
- package/.claude/agents/subagents/qe-code-reviewer.md +40 -136
- package/.claude/agents/subagents/qe-coverage-gap-analyzer.md +40 -480
- package/.claude/agents/subagents/qe-data-generator.md +41 -125
- package/.claude/agents/subagents/qe-flaky-investigator.md +55 -411
- package/.claude/agents/subagents/qe-integration-tester.md +53 -141
- package/.claude/agents/subagents/qe-performance-validator.md +54 -130
- package/.claude/agents/subagents/qe-security-auditor.md +56 -114
- package/.claude/agents/subagents/qe-test-data-architect-sub.md +57 -548
- package/.claude/agents/subagents/qe-test-implementer.md +58 -551
- package/.claude/agents/subagents/qe-test-refactorer.md +65 -722
- package/.claude/agents/subagents/qe-test-writer.md +63 -726
- package/.claude/skills/skills-manifest.json +632 -0
- package/.claude/skills/testability-scoring/README.md +71 -0
- package/.claude/skills/testability-scoring/SKILL.md +611 -0
- package/.claude/skills/testability-scoring/resources/templates/config.template.js +84 -0
- package/.claude/skills/testability-scoring/resources/templates/testability-scoring.spec.template.js +532 -0
- package/.claude/skills/testability-scoring/scripts/generate-html-report.js +1007 -0
- package/.claude/skills/testability-scoring/scripts/run-assessment.sh +70 -0
- package/CHANGELOG.md +116 -0
- package/README.md +59 -7
- package/config/.env.otel.example +25 -0
- package/config/OTEL-QUICK-REFERENCE.md +137 -0
- package/config/README-OTEL.md +222 -0
- package/config/alerting-rules.yml +518 -0
- package/config/docker-compose.otel.yml +187 -0
- package/config/grafana/dashboards/agentic-qe-overview.json +286 -0
- package/config/grafana/provisioning/dashboards/dashboards.yml +19 -0
- package/config/grafana/provisioning/datasources/datasources.yml +53 -0
- package/config/otel-collector-config.yaml.example +145 -0
- package/config/prometheus.yml.example +106 -0
- package/dist/agents/QXPartnerAgent.d.ts +139 -0
- package/dist/agents/QXPartnerAgent.d.ts.map +1 -0
- package/dist/agents/QXPartnerAgent.js +769 -0
- package/dist/agents/QXPartnerAgent.js.map +1 -0
- package/dist/agents/index.d.ts +1 -0
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +82 -2
- package/dist/agents/index.js.map +1 -1
- package/dist/alerting/AlertManager.d.ts +120 -0
- package/dist/alerting/AlertManager.d.ts.map +1 -0
- package/dist/alerting/AlertManager.js +345 -0
- package/dist/alerting/AlertManager.js.map +1 -0
- package/dist/alerting/FeedbackRouter.d.ts +98 -0
- package/dist/alerting/FeedbackRouter.d.ts.map +1 -0
- package/dist/alerting/FeedbackRouter.js +331 -0
- package/dist/alerting/FeedbackRouter.js.map +1 -0
- package/dist/alerting/StrategyApplicator.d.ts +120 -0
- package/dist/alerting/StrategyApplicator.d.ts.map +1 -0
- package/dist/alerting/StrategyApplicator.js +299 -0
- package/dist/alerting/StrategyApplicator.js.map +1 -0
- package/dist/alerting/index.d.ts +68 -0
- package/dist/alerting/index.d.ts.map +1 -0
- package/dist/alerting/index.js +112 -0
- package/dist/alerting/index.js.map +1 -0
- package/dist/alerting/types.d.ts +118 -0
- package/dist/alerting/types.d.ts.map +1 -0
- package/dist/alerting/types.js +11 -0
- package/dist/alerting/types.js.map +1 -0
- package/dist/cli/commands/debug/agent.d.ts.map +1 -1
- package/dist/cli/commands/debug/agent.js +19 -6
- package/dist/cli/commands/debug/agent.js.map +1 -1
- package/dist/cli/commands/debug/health-check.js +20 -7
- package/dist/cli/commands/debug/health-check.js.map +1 -1
- package/dist/cli/commands/init-claude-md-template.d.ts +1 -0
- package/dist/cli/commands/init-claude-md-template.d.ts.map +1 -1
- package/dist/cli/commands/init-claude-md-template.js +4 -3
- package/dist/cli/commands/init-claude-md-template.js.map +1 -1
- package/dist/cli/commands/workflow/cancel.d.ts.map +1 -1
- package/dist/cli/commands/workflow/cancel.js +4 -3
- package/dist/cli/commands/workflow/cancel.js.map +1 -1
- package/dist/cli/commands/workflow/list.d.ts.map +1 -1
- package/dist/cli/commands/workflow/list.js +4 -3
- package/dist/cli/commands/workflow/list.js.map +1 -1
- package/dist/cli/commands/workflow/pause.d.ts.map +1 -1
- package/dist/cli/commands/workflow/pause.js +4 -3
- package/dist/cli/commands/workflow/pause.js.map +1 -1
- package/dist/cli/init/claude-config.d.ts.map +1 -1
- package/dist/cli/init/claude-config.js +13 -13
- package/dist/cli/init/claude-config.js.map +1 -1
- package/dist/cli/init/claude-md.d.ts.map +1 -1
- package/dist/cli/init/claude-md.js +44 -2
- package/dist/cli/init/claude-md.js.map +1 -1
- package/dist/cli/init/database-init.js +1 -1
- package/dist/cli/init/index.d.ts.map +1 -1
- package/dist/cli/init/index.js +13 -6
- package/dist/cli/init/index.js.map +1 -1
- package/dist/cli/init/skills.d.ts.map +1 -1
- package/dist/cli/init/skills.js +2 -1
- package/dist/cli/init/skills.js.map +1 -1
- package/dist/core/memory/AgentDBIntegration.d.ts +24 -6
- package/dist/core/memory/AgentDBIntegration.d.ts.map +1 -1
- package/dist/core/memory/AgentDBIntegration.js +66 -10
- package/dist/core/memory/AgentDBIntegration.js.map +1 -1
- package/dist/core/memory/IPatternStore.d.ts +209 -0
- package/dist/core/memory/IPatternStore.d.ts.map +1 -0
- package/dist/core/memory/IPatternStore.js +15 -0
- package/dist/core/memory/IPatternStore.js.map +1 -0
- package/dist/core/memory/MigrationTools.d.ts +192 -0
- package/dist/core/memory/MigrationTools.d.ts.map +1 -0
- package/dist/core/memory/MigrationTools.js +615 -0
- package/dist/core/memory/MigrationTools.js.map +1 -0
- package/dist/core/memory/NeuralEnhancement.d.ts +154 -0
- package/dist/core/memory/NeuralEnhancement.d.ts.map +1 -0
- package/dist/core/memory/NeuralEnhancement.js +598 -0
- package/dist/core/memory/NeuralEnhancement.js.map +1 -0
- package/dist/core/memory/PatternStoreFactory.d.ts +143 -0
- package/dist/core/memory/PatternStoreFactory.d.ts.map +1 -0
- package/dist/core/memory/PatternStoreFactory.js +370 -0
- package/dist/core/memory/PatternStoreFactory.js.map +1 -0
- package/dist/core/memory/RealAgentDBAdapter.d.ts +1 -0
- package/dist/core/memory/RealAgentDBAdapter.d.ts.map +1 -1
- package/dist/core/memory/RealAgentDBAdapter.js +28 -20
- package/dist/core/memory/RealAgentDBAdapter.js.map +1 -1
- package/dist/core/memory/RuVectorPatternStore.d.ts +198 -0
- package/dist/core/memory/RuVectorPatternStore.d.ts.map +1 -0
- package/dist/core/memory/RuVectorPatternStore.js +605 -0
- package/dist/core/memory/RuVectorPatternStore.js.map +1 -0
- package/dist/core/memory/SelfHealingMonitor.d.ts +186 -0
- package/dist/core/memory/SelfHealingMonitor.d.ts.map +1 -0
- package/dist/core/memory/SelfHealingMonitor.js +451 -0
- package/dist/core/memory/SelfHealingMonitor.js.map +1 -0
- package/dist/core/memory/SwarmMemoryManager.d.ts +62 -0
- package/dist/core/memory/SwarmMemoryManager.d.ts.map +1 -1
- package/dist/core/memory/SwarmMemoryManager.js +97 -0
- package/dist/core/memory/SwarmMemoryManager.js.map +1 -1
- package/dist/core/memory/UnifiedMemoryCoordinator.d.ts +341 -0
- package/dist/core/memory/UnifiedMemoryCoordinator.d.ts.map +1 -0
- package/dist/core/memory/UnifiedMemoryCoordinator.js +986 -0
- package/dist/core/memory/UnifiedMemoryCoordinator.js.map +1 -0
- package/dist/core/memory/index.d.ts +16 -0
- package/dist/core/memory/index.d.ts.map +1 -1
- package/dist/core/memory/index.js +58 -1
- package/dist/core/memory/index.js.map +1 -1
- package/dist/core/optimization/SwarmOptimizer.d.ts +185 -0
- package/dist/core/optimization/SwarmOptimizer.d.ts.map +1 -0
- package/dist/core/optimization/SwarmOptimizer.js +631 -0
- package/dist/core/optimization/SwarmOptimizer.js.map +1 -0
- package/dist/core/optimization/index.d.ts +9 -0
- package/dist/core/optimization/index.d.ts.map +1 -0
- package/dist/core/optimization/index.js +25 -0
- package/dist/core/optimization/index.js.map +1 -0
- package/dist/core/optimization/types.d.ts +53 -0
- package/dist/core/optimization/types.d.ts.map +1 -0
- package/dist/core/optimization/types.js +6 -0
- package/dist/core/optimization/types.js.map +1 -0
- package/dist/core/orchestration/PriorityQueue.d.ts +54 -0
- package/dist/core/orchestration/PriorityQueue.d.ts.map +1 -0
- package/dist/core/orchestration/PriorityQueue.js +122 -0
- package/dist/core/orchestration/PriorityQueue.js.map +1 -0
- package/dist/core/orchestration/WorkflowOrchestrator.d.ts +176 -0
- package/dist/core/orchestration/WorkflowOrchestrator.d.ts.map +1 -0
- package/dist/core/orchestration/WorkflowOrchestrator.js +813 -0
- package/dist/core/orchestration/WorkflowOrchestrator.js.map +1 -0
- package/dist/core/orchestration/index.d.ts +7 -0
- package/dist/core/orchestration/index.d.ts.map +1 -0
- package/dist/core/orchestration/index.js +11 -0
- package/dist/core/orchestration/index.js.map +1 -0
- package/dist/core/orchestration/types.d.ts +96 -0
- package/dist/core/orchestration/types.d.ts.map +1 -0
- package/dist/core/orchestration/types.js +6 -0
- package/dist/core/orchestration/types.js.map +1 -0
- package/dist/core/skills/DynamicSkillLoader.d.ts +96 -0
- package/dist/core/skills/DynamicSkillLoader.d.ts.map +1 -0
- package/dist/core/skills/DynamicSkillLoader.js +353 -0
- package/dist/core/skills/DynamicSkillLoader.js.map +1 -0
- package/dist/core/skills/types.d.ts +118 -0
- package/dist/core/skills/types.d.ts.map +1 -0
- package/dist/core/skills/types.js +7 -0
- package/dist/core/skills/types.js.map +1 -0
- package/dist/core/transport/QUICTransport.d.ts +320 -0
- package/dist/core/transport/QUICTransport.d.ts.map +1 -0
- package/dist/core/transport/QUICTransport.js +711 -0
- package/dist/core/transport/QUICTransport.js.map +1 -0
- package/dist/core/transport/index.d.ts +40 -0
- package/dist/core/transport/index.d.ts.map +1 -0
- package/dist/core/transport/index.js +46 -0
- package/dist/core/transport/index.js.map +1 -0
- package/dist/core/transport/quic-loader.d.ts +123 -0
- package/dist/core/transport/quic-loader.d.ts.map +1 -0
- package/dist/core/transport/quic-loader.js +293 -0
- package/dist/core/transport/quic-loader.js.map +1 -0
- package/dist/core/transport/quic.d.ts +154 -0
- package/dist/core/transport/quic.d.ts.map +1 -0
- package/dist/core/transport/quic.js +214 -0
- package/dist/core/transport/quic.js.map +1 -0
- package/dist/mcp/services/AgentRegistry.d.ts.map +1 -1
- package/dist/mcp/services/AgentRegistry.js +4 -1
- package/dist/mcp/services/AgentRegistry.js.map +1 -1
- package/dist/reasoning/RuVectorReasoningAdapter.d.ts +232 -0
- package/dist/reasoning/RuVectorReasoningAdapter.d.ts.map +1 -0
- package/dist/reasoning/RuVectorReasoningAdapter.js +585 -0
- package/dist/reasoning/RuVectorReasoningAdapter.js.map +1 -0
- package/dist/reasoning/index.d.ts +2 -0
- package/dist/reasoning/index.d.ts.map +1 -1
- package/dist/reasoning/index.js +6 -1
- package/dist/reasoning/index.js.map +1 -1
- package/dist/reporting/ResultAggregator.d.ts +107 -0
- package/dist/reporting/ResultAggregator.d.ts.map +1 -0
- package/dist/reporting/ResultAggregator.js +435 -0
- package/dist/reporting/ResultAggregator.js.map +1 -0
- package/dist/reporting/index.d.ts +48 -0
- package/dist/reporting/index.d.ts.map +1 -0
- package/dist/reporting/index.js +154 -0
- package/dist/reporting/index.js.map +1 -0
- package/dist/reporting/reporters/ControlLoopReporter.d.ts +128 -0
- package/dist/reporting/reporters/ControlLoopReporter.d.ts.map +1 -0
- package/dist/reporting/reporters/ControlLoopReporter.js +417 -0
- package/dist/reporting/reporters/ControlLoopReporter.js.map +1 -0
- package/dist/reporting/reporters/HumanReadableReporter.d.ts +140 -0
- package/dist/reporting/reporters/HumanReadableReporter.d.ts.map +1 -0
- package/dist/reporting/reporters/HumanReadableReporter.js +524 -0
- package/dist/reporting/reporters/HumanReadableReporter.js.map +1 -0
- package/dist/reporting/reporters/JSONReporter.d.ts +193 -0
- package/dist/reporting/reporters/JSONReporter.d.ts.map +1 -0
- package/dist/reporting/reporters/JSONReporter.js +324 -0
- package/dist/reporting/reporters/JSONReporter.js.map +1 -0
- package/dist/reporting/reporters/index.d.ts +14 -0
- package/dist/reporting/reporters/index.d.ts.map +1 -0
- package/dist/reporting/reporters/index.js +19 -0
- package/dist/reporting/reporters/index.js.map +1 -0
- package/dist/reporting/types.d.ts +427 -0
- package/dist/reporting/types.d.ts.map +1 -0
- package/dist/reporting/types.js +12 -0
- package/dist/reporting/types.js.map +1 -0
- package/dist/types/index.d.ts +2 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/qx.d.ts +397 -0
- package/dist/types/qx.d.ts.map +1 -0
- package/dist/types/qx.js +71 -0
- package/dist/types/qx.js.map +1 -0
- package/dist/visualization/api/RestEndpoints.js +1 -1
- package/dist/visualization/api/RestEndpoints.js.map +1 -1
- package/dist/visualization/api/WebSocketServer.d.ts +44 -0
- package/dist/visualization/api/WebSocketServer.d.ts.map +1 -1
- package/dist/visualization/api/WebSocketServer.js +144 -23
- package/dist/visualization/api/WebSocketServer.js.map +1 -1
- package/dist/visualization/core/DataTransformer.d.ts +10 -0
- package/dist/visualization/core/DataTransformer.d.ts.map +1 -1
- package/dist/visualization/core/DataTransformer.js +60 -5
- package/dist/visualization/core/DataTransformer.js.map +1 -1
- package/dist/visualization/emit-event.d.ts +75 -0
- package/dist/visualization/emit-event.d.ts.map +1 -0
- package/dist/visualization/emit-event.js +213 -0
- package/dist/visualization/emit-event.js.map +1 -0
- package/dist/visualization/index.d.ts +1 -0
- package/dist/visualization/index.d.ts.map +1 -1
- package/dist/visualization/index.js +7 -1
- package/dist/visualization/index.js.map +1 -1
- package/docs/reference/skills.md +63 -1
- package/package.json +12 -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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"}
|