agentic-qe 2.0.0 → 2.1.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/qx-partner.md +17 -4
- package/.claude/skills/accessibility-testing/SKILL.md +144 -692
- package/.claude/skills/agentic-quality-engineering/SKILL.md +176 -529
- package/.claude/skills/api-testing-patterns/SKILL.md +180 -560
- package/.claude/skills/brutal-honesty-review/SKILL.md +113 -603
- package/.claude/skills/bug-reporting-excellence/SKILL.md +116 -517
- package/.claude/skills/chaos-engineering-resilience/SKILL.md +127 -72
- package/.claude/skills/cicd-pipeline-qe-orchestrator/SKILL.md +209 -404
- package/.claude/skills/code-review-quality/SKILL.md +158 -608
- package/.claude/skills/compatibility-testing/SKILL.md +148 -38
- package/.claude/skills/compliance-testing/SKILL.md +132 -63
- package/.claude/skills/consultancy-practices/SKILL.md +114 -446
- package/.claude/skills/context-driven-testing/SKILL.md +117 -381
- package/.claude/skills/contract-testing/SKILL.md +176 -141
- package/.claude/skills/database-testing/SKILL.md +137 -130
- package/.claude/skills/exploratory-testing-advanced/SKILL.md +160 -629
- package/.claude/skills/holistic-testing-pact/SKILL.md +140 -188
- package/.claude/skills/localization-testing/SKILL.md +145 -33
- package/.claude/skills/mobile-testing/SKILL.md +132 -448
- package/.claude/skills/mutation-testing/SKILL.md +147 -41
- package/.claude/skills/performance-testing/SKILL.md +200 -546
- package/.claude/skills/quality-metrics/SKILL.md +164 -519
- package/.claude/skills/refactoring-patterns/SKILL.md +132 -699
- package/.claude/skills/regression-testing/SKILL.md +120 -926
- package/.claude/skills/risk-based-testing/SKILL.md +157 -660
- package/.claude/skills/security-testing/SKILL.md +199 -538
- package/.claude/skills/sherlock-review/SKILL.md +163 -699
- package/.claude/skills/shift-left-testing/SKILL.md +161 -465
- package/.claude/skills/shift-right-testing/SKILL.md +161 -519
- package/.claude/skills/six-thinking-hats/SKILL.md +175 -1110
- package/.claude/skills/skills-manifest.json +71 -20
- package/.claude/skills/tdd-london-chicago/SKILL.md +131 -448
- package/.claude/skills/technical-writing/SKILL.md +103 -154
- package/.claude/skills/test-automation-strategy/SKILL.md +166 -772
- package/.claude/skills/test-data-management/SKILL.md +126 -910
- package/.claude/skills/test-design-techniques/SKILL.md +179 -89
- package/.claude/skills/test-environment-management/SKILL.md +136 -91
- package/.claude/skills/test-reporting-analytics/SKILL.md +169 -92
- package/.claude/skills/testability-scoring/SKILL.md +172 -538
- package/.claude/skills/testability-scoring/scripts/generate-html-report.js +0 -0
- package/.claude/skills/visual-testing-advanced/SKILL.md +155 -78
- package/.claude/skills/xp-practices/SKILL.md +151 -587
- package/CHANGELOG.md +48 -0
- package/README.md +23 -16
- package/dist/agents/QXPartnerAgent.d.ts +8 -1
- package/dist/agents/QXPartnerAgent.d.ts.map +1 -1
- package/dist/agents/QXPartnerAgent.js +1174 -112
- package/dist/agents/QXPartnerAgent.js.map +1 -1
- package/dist/agents/lifecycle/AgentLifecycleManager.d.ts.map +1 -1
- package/dist/agents/lifecycle/AgentLifecycleManager.js +34 -31
- package/dist/agents/lifecycle/AgentLifecycleManager.js.map +1 -1
- package/dist/cli/commands/init-claude-md-template.d.ts.map +1 -1
- package/dist/cli/commands/init-claude-md-template.js +14 -0
- package/dist/cli/commands/init-claude-md-template.js.map +1 -1
- package/dist/core/SwarmCoordinator.d.ts +180 -0
- package/dist/core/SwarmCoordinator.d.ts.map +1 -0
- package/dist/core/SwarmCoordinator.js +473 -0
- package/dist/core/SwarmCoordinator.js.map +1 -0
- package/dist/core/metrics/MetricsAggregator.d.ts +228 -0
- package/dist/core/metrics/MetricsAggregator.d.ts.map +1 -0
- package/dist/core/metrics/MetricsAggregator.js +482 -0
- package/dist/core/metrics/MetricsAggregator.js.map +1 -0
- package/dist/core/metrics/index.d.ts +5 -0
- package/dist/core/metrics/index.d.ts.map +1 -0
- package/dist/core/metrics/index.js +11 -0
- package/dist/core/metrics/index.js.map +1 -0
- package/dist/core/optimization/SwarmOptimizer.d.ts +5 -0
- package/dist/core/optimization/SwarmOptimizer.d.ts.map +1 -1
- package/dist/core/optimization/SwarmOptimizer.js +17 -0
- package/dist/core/optimization/SwarmOptimizer.js.map +1 -1
- package/dist/core/orchestration/AdaptiveScheduler.d.ts +190 -0
- package/dist/core/orchestration/AdaptiveScheduler.d.ts.map +1 -0
- package/dist/core/orchestration/AdaptiveScheduler.js +460 -0
- package/dist/core/orchestration/AdaptiveScheduler.js.map +1 -0
- package/dist/core/orchestration/WorkflowOrchestrator.d.ts +13 -0
- package/dist/core/orchestration/WorkflowOrchestrator.d.ts.map +1 -1
- package/dist/core/orchestration/WorkflowOrchestrator.js +32 -0
- package/dist/core/orchestration/WorkflowOrchestrator.js.map +1 -1
- package/dist/core/recovery/CircuitBreaker.d.ts +176 -0
- package/dist/core/recovery/CircuitBreaker.d.ts.map +1 -0
- package/dist/core/recovery/CircuitBreaker.js +382 -0
- package/dist/core/recovery/CircuitBreaker.js.map +1 -0
- package/dist/core/recovery/RecoveryOrchestrator.d.ts +186 -0
- package/dist/core/recovery/RecoveryOrchestrator.d.ts.map +1 -0
- package/dist/core/recovery/RecoveryOrchestrator.js +476 -0
- package/dist/core/recovery/RecoveryOrchestrator.js.map +1 -0
- package/dist/core/recovery/RetryStrategy.d.ts +127 -0
- package/dist/core/recovery/RetryStrategy.d.ts.map +1 -0
- package/dist/core/recovery/RetryStrategy.js +314 -0
- package/dist/core/recovery/RetryStrategy.js.map +1 -0
- package/dist/core/recovery/index.d.ts +8 -0
- package/dist/core/recovery/index.d.ts.map +1 -0
- package/dist/core/recovery/index.js +27 -0
- package/dist/core/recovery/index.js.map +1 -0
- package/dist/core/skills/DependencyResolver.d.ts +99 -0
- package/dist/core/skills/DependencyResolver.d.ts.map +1 -0
- package/dist/core/skills/DependencyResolver.js +260 -0
- package/dist/core/skills/DependencyResolver.js.map +1 -0
- package/dist/core/skills/ManifestGenerator.d.ts +114 -0
- package/dist/core/skills/ManifestGenerator.d.ts.map +1 -0
- package/dist/core/skills/ManifestGenerator.js +449 -0
- package/dist/core/skills/ManifestGenerator.js.map +1 -0
- package/dist/core/skills/index.d.ts +9 -0
- package/dist/core/skills/index.d.ts.map +1 -0
- package/dist/core/skills/index.js +24 -0
- package/dist/core/skills/index.js.map +1 -0
- package/dist/mcp/server.d.ts +9 -9
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +1 -2
- package/dist/mcp/server.js.map +1 -1
- package/dist/types/qx.d.ts +39 -7
- package/dist/types/qx.d.ts.map +1 -1
- package/dist/types/qx.js.map +1 -1
- package/dist/visualization/api/RestEndpoints.js +1 -1
- package/dist/visualization/api/RestEndpoints.js.map +1 -1
- package/package.json +13 -55
|
@@ -0,0 +1,473 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* SwarmCoordinator - Master Orchestration Layer
|
|
4
|
+
*
|
|
5
|
+
* Coordinates SwarmOptimizer, WorkflowOrchestrator, and UnifiedMemoryCoordinator
|
|
6
|
+
* to provide unified swarm management with feedback loops and adaptive optimization.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.SwarmCoordinator = void 0;
|
|
10
|
+
exports.getSwarmCoordinator = getSwarmCoordinator;
|
|
11
|
+
exports.resetSwarmCoordinator = resetSwarmCoordinator;
|
|
12
|
+
const events_1 = require("events");
|
|
13
|
+
const Logger_js_1 = require("../utils/Logger.js");
|
|
14
|
+
const SwarmOptimizer_js_1 = require("./optimization/SwarmOptimizer.js");
|
|
15
|
+
const WorkflowOrchestrator_js_1 = require("./orchestration/WorkflowOrchestrator.js");
|
|
16
|
+
const UnifiedMemoryCoordinator_js_1 = require("./memory/UnifiedMemoryCoordinator.js");
|
|
17
|
+
const index_js_1 = require("./recovery/index.js");
|
|
18
|
+
// CPU tracking state for utilization calculation
|
|
19
|
+
let lastCpuUsage = process.cpuUsage();
|
|
20
|
+
let lastCpuTime = Date.now();
|
|
21
|
+
/**
|
|
22
|
+
* Calculate current CPU usage percentage
|
|
23
|
+
* Uses process.cpuUsage() delta to compute actual CPU utilization
|
|
24
|
+
*/
|
|
25
|
+
function calculateCpuUsage() {
|
|
26
|
+
const currentCpuUsage = process.cpuUsage(lastCpuUsage);
|
|
27
|
+
const currentTime = Date.now();
|
|
28
|
+
const elapsedMs = currentTime - lastCpuTime;
|
|
29
|
+
if (elapsedMs === 0)
|
|
30
|
+
return 0;
|
|
31
|
+
// Total CPU time used in microseconds (user + system)
|
|
32
|
+
const totalCpuTime = currentCpuUsage.user + currentCpuUsage.system;
|
|
33
|
+
// Convert to percentage: (microseconds / 1000 = ms) / elapsed ms * 100
|
|
34
|
+
const cpuPercent = (totalCpuTime / 1000 / elapsedMs) * 100;
|
|
35
|
+
// Update tracking state for next calculation
|
|
36
|
+
lastCpuUsage = process.cpuUsage();
|
|
37
|
+
lastCpuTime = currentTime;
|
|
38
|
+
// Clamp to 0-1 range (normalized utilization)
|
|
39
|
+
return Math.min(cpuPercent / 100, 1);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Swarm Coordinator - Master orchestration layer
|
|
43
|
+
*/
|
|
44
|
+
class SwarmCoordinator extends events_1.EventEmitter {
|
|
45
|
+
constructor(memoryManager, eventBus, config) {
|
|
46
|
+
super();
|
|
47
|
+
// State
|
|
48
|
+
this.status = 'initializing';
|
|
49
|
+
this.currentTopology = 'hierarchical';
|
|
50
|
+
this.agents = new Map();
|
|
51
|
+
this.startTime = new Date();
|
|
52
|
+
this.metricsHistory = [];
|
|
53
|
+
// Metrics tracking
|
|
54
|
+
this.taskStats = {
|
|
55
|
+
total: 0,
|
|
56
|
+
completed: 0,
|
|
57
|
+
failed: 0,
|
|
58
|
+
durations: [],
|
|
59
|
+
};
|
|
60
|
+
this.logger = Logger_js_1.Logger.getInstance();
|
|
61
|
+
this.memoryManager = memoryManager;
|
|
62
|
+
this.eventBus = eventBus;
|
|
63
|
+
this.config = {
|
|
64
|
+
defaultTopology: 'hierarchical',
|
|
65
|
+
maxAgents: 10,
|
|
66
|
+
autoOptimize: true,
|
|
67
|
+
optimizationInterval: 60000, // 1 minute
|
|
68
|
+
healthMonitoring: true,
|
|
69
|
+
healthCheckInterval: 30000, // 30 seconds
|
|
70
|
+
enableFeedbackLoop: true,
|
|
71
|
+
feedbackInterval: 120000, // 2 minutes
|
|
72
|
+
autoRecovery: true,
|
|
73
|
+
...config,
|
|
74
|
+
};
|
|
75
|
+
// Initialize core components
|
|
76
|
+
this.optimizer = new SwarmOptimizer_js_1.SwarmOptimizer(memoryManager, eventBus);
|
|
77
|
+
this.orchestrator = new WorkflowOrchestrator_js_1.WorkflowOrchestrator(memoryManager, eventBus, this.optimizer);
|
|
78
|
+
this.memoryCoordinator = new UnifiedMemoryCoordinator_js_1.UnifiedMemoryCoordinator();
|
|
79
|
+
this.recoveryOrchestrator = (0, index_js_1.getRecoveryOrchestrator)();
|
|
80
|
+
this.currentTopology = this.config.defaultTopology;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Initialize the coordinator and all sub-components
|
|
84
|
+
*/
|
|
85
|
+
async initialize() {
|
|
86
|
+
this.logger.info('Initializing SwarmCoordinator');
|
|
87
|
+
this.status = 'initializing';
|
|
88
|
+
try {
|
|
89
|
+
// Initialize components in order
|
|
90
|
+
await this.optimizer.initialize();
|
|
91
|
+
await this.orchestrator.initialize();
|
|
92
|
+
await this.memoryCoordinator.initialize();
|
|
93
|
+
// Set up event handlers
|
|
94
|
+
this.setupEventHandlers();
|
|
95
|
+
// Start monitoring if enabled
|
|
96
|
+
if (this.config.autoOptimize) {
|
|
97
|
+
this.startOptimizationLoop();
|
|
98
|
+
}
|
|
99
|
+
if (this.config.healthMonitoring) {
|
|
100
|
+
this.startHealthMonitoring();
|
|
101
|
+
}
|
|
102
|
+
if (this.config.enableFeedbackLoop) {
|
|
103
|
+
this.startFeedbackLoop();
|
|
104
|
+
}
|
|
105
|
+
this.status = 'running';
|
|
106
|
+
this.startTime = new Date();
|
|
107
|
+
this.emit('initialized', { topology: this.currentTopology });
|
|
108
|
+
this.logger.info('SwarmCoordinator initialized successfully');
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
this.status = 'error';
|
|
112
|
+
this.logger.error('Failed to initialize SwarmCoordinator:', error);
|
|
113
|
+
throw error;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Get current swarm status
|
|
118
|
+
*/
|
|
119
|
+
getStatus() {
|
|
120
|
+
return this.status;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Get current topology
|
|
124
|
+
*/
|
|
125
|
+
getTopology() {
|
|
126
|
+
return this.currentTopology;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Get current metrics
|
|
130
|
+
*/
|
|
131
|
+
getMetrics() {
|
|
132
|
+
const avgDuration = this.taskStats.durations.length > 0
|
|
133
|
+
? this.taskStats.durations.reduce((a, b) => a + b, 0) / this.taskStats.durations.length
|
|
134
|
+
: 0;
|
|
135
|
+
const uptime = Date.now() - this.startTime.getTime();
|
|
136
|
+
const throughput = uptime > 0
|
|
137
|
+
? (this.taskStats.completed / (uptime / 1000))
|
|
138
|
+
: 0;
|
|
139
|
+
const errorRate = this.taskStats.total > 0
|
|
140
|
+
? this.taskStats.failed / this.taskStats.total
|
|
141
|
+
: 0;
|
|
142
|
+
// Get queue depth from orchestrator
|
|
143
|
+
const queueDepth = this.orchestrator?.getQueueDepth() ?? 0;
|
|
144
|
+
// Calculate real CPU utilization using process.cpuUsage()
|
|
145
|
+
const cpuUtilization = calculateCpuUsage();
|
|
146
|
+
return {
|
|
147
|
+
activeAgents: this.agents.size,
|
|
148
|
+
totalTasks: this.taskStats.total,
|
|
149
|
+
completedTasks: this.taskStats.completed,
|
|
150
|
+
failedTasks: this.taskStats.failed,
|
|
151
|
+
averageTaskDuration: avgDuration,
|
|
152
|
+
throughput,
|
|
153
|
+
queueDepth,
|
|
154
|
+
memoryUsage: process.memoryUsage().heapUsed,
|
|
155
|
+
cpuUtilization,
|
|
156
|
+
errorRate,
|
|
157
|
+
topology: this.currentTopology,
|
|
158
|
+
uptime,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Register an agent with the swarm
|
|
163
|
+
*/
|
|
164
|
+
async registerAgent(agent) {
|
|
165
|
+
if (this.agents.size >= this.config.maxAgents) {
|
|
166
|
+
throw new Error(`Maximum agent limit (${this.config.maxAgents}) reached`);
|
|
167
|
+
}
|
|
168
|
+
this.agents.set(agent.id, agent);
|
|
169
|
+
this.emit('agent:registered', { agentId: agent.id, type: agent.type });
|
|
170
|
+
this.logger.info(`Agent registered: ${agent.id} (${agent.type})`);
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Unregister an agent from the swarm
|
|
174
|
+
*/
|
|
175
|
+
async unregisterAgent(agentId) {
|
|
176
|
+
const agent = this.agents.get(agentId);
|
|
177
|
+
if (agent) {
|
|
178
|
+
this.agents.delete(agentId);
|
|
179
|
+
this.emit('agent:unregistered', { agentId, type: agent.type });
|
|
180
|
+
this.logger.info(`Agent unregistered: ${agentId}`);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Submit a task for execution
|
|
185
|
+
*/
|
|
186
|
+
async submitTask(task) {
|
|
187
|
+
this.taskStats.total++;
|
|
188
|
+
try {
|
|
189
|
+
// Use recovery orchestrator for resilient execution
|
|
190
|
+
const result = await this.recoveryOrchestrator.executeWithRecovery('orchestration', `task:${task.id}`, async () => {
|
|
191
|
+
// Get optimal allocation from optimizer
|
|
192
|
+
const allocation = await this.optimizer.allocateAgents([task], Array.from(this.agents.values()));
|
|
193
|
+
// Execute through orchestrator
|
|
194
|
+
// Note: WorkflowOrchestrator handles actual execution
|
|
195
|
+
return task.id;
|
|
196
|
+
});
|
|
197
|
+
this.emit('task:submitted', { taskId: task.id, priority: task.priority });
|
|
198
|
+
return result;
|
|
199
|
+
}
|
|
200
|
+
catch (error) {
|
|
201
|
+
this.taskStats.failed++;
|
|
202
|
+
throw error;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Change swarm topology
|
|
207
|
+
*/
|
|
208
|
+
async changeTopology(newTopology) {
|
|
209
|
+
if (newTopology === this.currentTopology) {
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
this.logger.info(`Changing topology: ${this.currentTopology} -> ${newTopology}`);
|
|
213
|
+
const oldTopology = this.currentTopology;
|
|
214
|
+
this.currentTopology = newTopology;
|
|
215
|
+
// Notify all agents of topology change
|
|
216
|
+
this.emit('topology:changed', { from: oldTopology, to: newTopology });
|
|
217
|
+
// Store in memory for persistence
|
|
218
|
+
await this.memoryCoordinator.store('swarm:topology', { topology: newTopology, changedAt: new Date().toISOString() });
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Pause the swarm
|
|
222
|
+
*/
|
|
223
|
+
async pause() {
|
|
224
|
+
this.status = 'paused';
|
|
225
|
+
this.stopTimers();
|
|
226
|
+
this.emit('paused');
|
|
227
|
+
this.logger.info('Swarm paused');
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Resume the swarm
|
|
231
|
+
*/
|
|
232
|
+
async resume() {
|
|
233
|
+
this.status = 'running';
|
|
234
|
+
if (this.config.autoOptimize) {
|
|
235
|
+
this.startOptimizationLoop();
|
|
236
|
+
}
|
|
237
|
+
if (this.config.healthMonitoring) {
|
|
238
|
+
this.startHealthMonitoring();
|
|
239
|
+
}
|
|
240
|
+
if (this.config.enableFeedbackLoop) {
|
|
241
|
+
this.startFeedbackLoop();
|
|
242
|
+
}
|
|
243
|
+
this.emit('resumed');
|
|
244
|
+
this.logger.info('Swarm resumed');
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Shutdown the coordinator
|
|
248
|
+
*/
|
|
249
|
+
async shutdown() {
|
|
250
|
+
this.logger.info('Shutting down SwarmCoordinator');
|
|
251
|
+
this.status = 'stopped';
|
|
252
|
+
this.stopTimers();
|
|
253
|
+
// Persist final metrics
|
|
254
|
+
await this.persistMetrics();
|
|
255
|
+
this.emit('shutdown');
|
|
256
|
+
this.removeAllListeners();
|
|
257
|
+
this.logger.info('SwarmCoordinator shutdown complete');
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Force optimization cycle
|
|
261
|
+
*/
|
|
262
|
+
async optimize() {
|
|
263
|
+
this.logger.debug('Running optimization cycle');
|
|
264
|
+
try {
|
|
265
|
+
// Get current workload profile
|
|
266
|
+
const metrics = this.getMetrics();
|
|
267
|
+
const workloadProfile = this.buildWorkloadProfile(metrics);
|
|
268
|
+
// Get topology recommendation
|
|
269
|
+
const recommendation = await this.optimizer.recommendTopology(workloadProfile);
|
|
270
|
+
// Apply recommendation if different from current
|
|
271
|
+
if (recommendation && recommendation.topology !== this.currentTopology) {
|
|
272
|
+
if (recommendation.confidence > 0.7) {
|
|
273
|
+
await this.changeTopology(recommendation.topology);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
this.emit('optimization:complete', { recommendation, metrics });
|
|
277
|
+
}
|
|
278
|
+
catch (error) {
|
|
279
|
+
this.logger.error('Optimization cycle failed:', error);
|
|
280
|
+
this.emit('optimization:failed', { error });
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Get feedback loop data
|
|
285
|
+
*/
|
|
286
|
+
async getFeedbackData() {
|
|
287
|
+
const metrics = this.getMetrics();
|
|
288
|
+
const memoryHealth = await this.memoryCoordinator.checkHealth();
|
|
289
|
+
// Get latest optimization recommendations from optimizer
|
|
290
|
+
const optimizerRecommendations = this.optimizer?.getLatestRecommendation() ?? null;
|
|
291
|
+
// Get orchestrator status with queue depth and execution info
|
|
292
|
+
const orchestratorStatus = this.orchestrator?.getStatus() ?? { status: 'unknown' };
|
|
293
|
+
return {
|
|
294
|
+
timestamp: new Date(),
|
|
295
|
+
metrics,
|
|
296
|
+
optimizerRecommendations,
|
|
297
|
+
orchestratorStatus,
|
|
298
|
+
memoryHealth: { healthy: memoryHealth },
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Set up event handlers for sub-components
|
|
303
|
+
*/
|
|
304
|
+
setupEventHandlers() {
|
|
305
|
+
// Forward events from sub-components
|
|
306
|
+
this.eventBus.subscribe('agent:completed', (data) => {
|
|
307
|
+
this.taskStats.completed++;
|
|
308
|
+
if (data.duration) {
|
|
309
|
+
this.taskStats.durations.push(data.duration);
|
|
310
|
+
// Keep only last 1000 durations
|
|
311
|
+
if (this.taskStats.durations.length > 1000) {
|
|
312
|
+
this.taskStats.durations = this.taskStats.durations.slice(-1000);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
});
|
|
316
|
+
this.eventBus.subscribe('agent:failed', () => {
|
|
317
|
+
this.taskStats.failed++;
|
|
318
|
+
});
|
|
319
|
+
// Listen for recovery events
|
|
320
|
+
this.recoveryOrchestrator.on('recovery-success', (data) => {
|
|
321
|
+
this.logger.info(`Recovery succeeded for ${data.component}:`, data);
|
|
322
|
+
});
|
|
323
|
+
this.recoveryOrchestrator.on('recovery-failed', (data) => {
|
|
324
|
+
this.logger.warn(`Recovery failed for ${data.component}:`, data);
|
|
325
|
+
if (this.status !== 'degraded') {
|
|
326
|
+
this.status = 'degraded';
|
|
327
|
+
this.emit('status:degraded', { reason: data.error });
|
|
328
|
+
}
|
|
329
|
+
});
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Start optimization loop
|
|
333
|
+
*/
|
|
334
|
+
startOptimizationLoop() {
|
|
335
|
+
this.optimizationTimer = setInterval(() => {
|
|
336
|
+
this.optimize().catch(err => {
|
|
337
|
+
this.logger.error('Optimization loop error:', err);
|
|
338
|
+
});
|
|
339
|
+
}, this.config.optimizationInterval);
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* Start health monitoring
|
|
343
|
+
*/
|
|
344
|
+
startHealthMonitoring() {
|
|
345
|
+
this.healthCheckTimer = setInterval(async () => {
|
|
346
|
+
try {
|
|
347
|
+
const memoryHealthy = await this.memoryCoordinator.checkHealth();
|
|
348
|
+
if (!memoryHealthy && this.config.autoRecovery) {
|
|
349
|
+
await this.recoveryOrchestrator.attemptRecovery('memory', new Error('Memory health check failed'));
|
|
350
|
+
}
|
|
351
|
+
this.emit('health:checked', {
|
|
352
|
+
memoryHealthy,
|
|
353
|
+
status: this.status,
|
|
354
|
+
});
|
|
355
|
+
}
|
|
356
|
+
catch (error) {
|
|
357
|
+
this.logger.error('Health check failed:', error);
|
|
358
|
+
}
|
|
359
|
+
}, this.config.healthCheckInterval);
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* Start feedback loop
|
|
363
|
+
*/
|
|
364
|
+
startFeedbackLoop() {
|
|
365
|
+
this.feedbackTimer = setInterval(async () => {
|
|
366
|
+
try {
|
|
367
|
+
const feedbackData = await this.getFeedbackData();
|
|
368
|
+
// Store metrics history
|
|
369
|
+
this.metricsHistory.push(feedbackData.metrics);
|
|
370
|
+
if (this.metricsHistory.length > 100) {
|
|
371
|
+
this.metricsHistory = this.metricsHistory.slice(-100);
|
|
372
|
+
}
|
|
373
|
+
// Persist to memory (24 hours TTL)
|
|
374
|
+
await this.memoryCoordinator.store(`swarm:feedback:${Date.now()}`, feedbackData, 86400000 // 24 hours in ms
|
|
375
|
+
);
|
|
376
|
+
this.emit('feedback:collected', feedbackData);
|
|
377
|
+
}
|
|
378
|
+
catch (error) {
|
|
379
|
+
this.logger.error('Feedback loop error:', error);
|
|
380
|
+
}
|
|
381
|
+
}, this.config.feedbackInterval);
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* Stop all timers
|
|
385
|
+
*/
|
|
386
|
+
stopTimers() {
|
|
387
|
+
if (this.optimizationTimer) {
|
|
388
|
+
clearInterval(this.optimizationTimer);
|
|
389
|
+
this.optimizationTimer = undefined;
|
|
390
|
+
}
|
|
391
|
+
if (this.healthCheckTimer) {
|
|
392
|
+
clearInterval(this.healthCheckTimer);
|
|
393
|
+
this.healthCheckTimer = undefined;
|
|
394
|
+
}
|
|
395
|
+
if (this.feedbackTimer) {
|
|
396
|
+
clearInterval(this.feedbackTimer);
|
|
397
|
+
this.feedbackTimer = undefined;
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
/**
|
|
401
|
+
* Build workload profile from metrics
|
|
402
|
+
*/
|
|
403
|
+
buildWorkloadProfile(metrics) {
|
|
404
|
+
// Calculate average complexity from multiple factors:
|
|
405
|
+
// 1. Duration factor: normalized task duration (0-1 scale, baseline 5000ms)
|
|
406
|
+
const durationFactor = Math.min(metrics.averageTaskDuration / 5000, 1);
|
|
407
|
+
// 2. Error factor: higher error rates indicate complex/problematic tasks
|
|
408
|
+
const errorFactor = metrics.errorRate;
|
|
409
|
+
// 3. Throughput factor: low throughput relative to agents indicates coordination complexity
|
|
410
|
+
const expectedThroughput = metrics.activeAgents * 0.5; // 0.5 tasks/sec per agent baseline
|
|
411
|
+
const throughputFactor = metrics.activeAgents > 0 && expectedThroughput > 0
|
|
412
|
+
? Math.max(0, 1 - (metrics.throughput / expectedThroughput))
|
|
413
|
+
: 0;
|
|
414
|
+
// 4. Memory factor: high memory usage indicates data-intensive complexity
|
|
415
|
+
const memoryFactor = Math.min(metrics.memoryUsage / 1073741824, 1); // 1GB baseline
|
|
416
|
+
// Weighted average complexity (0-1 scale)
|
|
417
|
+
const averageComplexity = Math.min(1, Math.max(0, durationFactor * 0.4 + // Duration is primary indicator
|
|
418
|
+
errorFactor * 0.2 + // Errors suggest complexity
|
|
419
|
+
throughputFactor * 0.2 + // Low throughput means coordination overhead
|
|
420
|
+
memoryFactor * 0.2 // Memory usage indicates data complexity
|
|
421
|
+
));
|
|
422
|
+
return {
|
|
423
|
+
taskCount: metrics.totalTasks,
|
|
424
|
+
averageComplexity,
|
|
425
|
+
parallelizationPotential: metrics.activeAgents > 1 ? 0.8 : 0.3,
|
|
426
|
+
coordinationNeeds: metrics.activeAgents > 5 ? 0.8 : 0.4,
|
|
427
|
+
memoryIntensity: metrics.memoryUsage > 500000000 ? 0.8 : 0.4, // 500MB threshold
|
|
428
|
+
};
|
|
429
|
+
}
|
|
430
|
+
/**
|
|
431
|
+
* Persist current metrics
|
|
432
|
+
*/
|
|
433
|
+
async persistMetrics() {
|
|
434
|
+
try {
|
|
435
|
+
await this.memoryCoordinator.store('swarm:metrics:final', {
|
|
436
|
+
metrics: this.getMetrics(),
|
|
437
|
+
history: this.metricsHistory.slice(-20),
|
|
438
|
+
shutdownTime: new Date().toISOString(),
|
|
439
|
+
});
|
|
440
|
+
}
|
|
441
|
+
catch (error) {
|
|
442
|
+
this.logger.error('Failed to persist metrics:', error);
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
exports.SwarmCoordinator = SwarmCoordinator;
|
|
447
|
+
/**
|
|
448
|
+
* Default coordinator instance
|
|
449
|
+
*/
|
|
450
|
+
let defaultCoordinator = null;
|
|
451
|
+
/**
|
|
452
|
+
* Get or create default coordinator
|
|
453
|
+
*/
|
|
454
|
+
async function getSwarmCoordinator(memoryManager, eventBus, config) {
|
|
455
|
+
if (!defaultCoordinator && memoryManager && eventBus) {
|
|
456
|
+
defaultCoordinator = new SwarmCoordinator(memoryManager, eventBus, config);
|
|
457
|
+
await defaultCoordinator.initialize();
|
|
458
|
+
}
|
|
459
|
+
if (!defaultCoordinator) {
|
|
460
|
+
throw new Error('SwarmCoordinator not initialized. Provide memoryManager and eventBus.');
|
|
461
|
+
}
|
|
462
|
+
return defaultCoordinator;
|
|
463
|
+
}
|
|
464
|
+
/**
|
|
465
|
+
* Reset default coordinator (for testing)
|
|
466
|
+
*/
|
|
467
|
+
async function resetSwarmCoordinator() {
|
|
468
|
+
if (defaultCoordinator) {
|
|
469
|
+
await defaultCoordinator.shutdown();
|
|
470
|
+
defaultCoordinator = null;
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
//# sourceMappingURL=SwarmCoordinator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SwarmCoordinator.js","sourceRoot":"","sources":["../../src/core/SwarmCoordinator.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AA+mBH,kDAeC;AAKD,sDAKC;AAtoBD,mCAAsC;AACtC,kDAA4C;AAG5C,wEAA+E;AAC/E,qFAA+E;AAC/E,sFAAgF;AAChF,kDAAoF;AAEpF,iDAAiD;AACjD,IAAI,YAAY,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;AACtC,IAAI,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAE7B;;;GAGG;AACH,SAAS,iBAAiB;IACxB,MAAM,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACvD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC/B,MAAM,SAAS,GAAG,WAAW,GAAG,WAAW,CAAC;IAE5C,IAAI,SAAS,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAE9B,sDAAsD;IACtD,MAAM,YAAY,GAAG,eAAe,CAAC,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC;IACnE,uEAAuE;IACvE,MAAM,UAAU,GAAG,CAAC,YAAY,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,GAAG,CAAC;IAE3D,6CAA6C;IAC7C,YAAY,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAClC,WAAW,GAAG,WAAW,CAAC;IAE1B,8CAA8C;IAC9C,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;AACvC,CAAC;AAiED;;GAEG;AACH,MAAa,gBAAiB,SAAQ,qBAAY;IAgChD,YACE,aAAiC,EACjC,QAAoB,EACpB,MAAwC;QAExC,KAAK,EAAE,CAAC;QAzBV,QAAQ;QACA,WAAM,GAAgB,cAAc,CAAC;QACrC,oBAAe,GAAkB,cAAc,CAAC;QAChD,WAAM,GAAuB,IAAI,GAAG,EAAE,CAAC;QACvC,cAAS,GAAS,IAAI,IAAI,EAAE,CAAC;QAC7B,mBAAc,GAAmB,EAAE,CAAC;QAO5C,mBAAmB;QACX,cAAS,GAAG;YAClB,KAAK,EAAE,CAAC;YACR,SAAS,EAAE,CAAC;YACZ,MAAM,EAAE,CAAC;YACT,SAAS,EAAE,EAAc;SAC1B,CAAC;QASA,IAAI,CAAC,MAAM,GAAG,kBAAM,CAAC,WAAW,EAAE,CAAC;QACnC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAEzB,IAAI,CAAC,MAAM,GAAG;YACZ,eAAe,EAAE,cAAc;YAC/B,SAAS,EAAE,EAAE;YACb,YAAY,EAAE,IAAI;YAClB,oBAAoB,EAAE,KAAK,EAAE,WAAW;YACxC,gBAAgB,EAAE,IAAI;YACtB,mBAAmB,EAAE,KAAK,EAAE,aAAa;YACzC,kBAAkB,EAAE,IAAI;YACxB,gBAAgB,EAAE,MAAM,EAAE,YAAY;YACtC,YAAY,EAAE,IAAI;YAClB,GAAG,MAAM;SACV,CAAC;QAEF,6BAA6B;QAC7B,IAAI,CAAC,SAAS,GAAG,IAAI,kCAAc,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;QAC7D,IAAI,CAAC,YAAY,GAAG,IAAI,8CAAoB,CAAC,aAAa,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACtF,IAAI,CAAC,iBAAiB,GAAG,IAAI,sDAAwB,EAAE,CAAC;QACxD,IAAI,CAAC,oBAAoB,GAAG,IAAA,kCAAuB,GAAE,CAAC;QAEtD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC;QAE7B,IAAI,CAAC;YACH,iCAAiC;YACjC,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;YAClC,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;YACrC,MAAM,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,CAAC;YAE1C,wBAAwB;YACxB,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAE1B,8BAA8B;YAC9B,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;gBAC7B,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC/B,CAAC;YAED,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;gBACjC,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC/B,CAAC;YAED,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC;gBACnC,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,CAAC;YAED,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;YACxB,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;YAE7D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;QAChE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC;YACtB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAC;YACnE,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,UAAU;QACR,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;YACrD,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM;YACvF,CAAC,CAAC,CAAC,CAAC;QAEN,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QACrD,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC;YAC3B,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;YAC9C,CAAC,CAAC,CAAC,CAAC;QAEN,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC;YACxC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK;YAC9C,CAAC,CAAC,CAAC,CAAC;QAEN,oCAAoC;QACpC,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;QAE3D,0DAA0D;QAC1D,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC;QAE3C,OAAO;YACL,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;YAC9B,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK;YAChC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS;YACxC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM;YAClC,mBAAmB,EAAE,WAAW;YAChC,UAAU;YACV,UAAU;YACV,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ;YAC3C,cAAc;YACd,SAAS;YACT,QAAQ,EAAE,IAAI,CAAC,eAAe;YAC9B,MAAM;SACP,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,KAAY;QAC9B,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,CAAC,MAAM,CAAC,SAAS,WAAW,CAAC,CAAC;QAC5E,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAEvE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;IACpE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,OAAe;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACvC,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC5B,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAC/D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,OAAO,EAAE,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,IAAU;QACzB,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QAEvB,IAAI,CAAC;YACH,oDAAoD;YACpD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,CAChE,eAAe,EACf,QAAQ,IAAI,CAAC,EAAE,EAAE,EACjB,KAAK,IAAI,EAAE;gBACT,wCAAwC;gBACxC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,cAAc,CACpD,CAAC,IAAI,CAAC,EACN,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CACjC,CAAC;gBAEF,+BAA+B;gBAC/B,sDAAsD;gBACtD,OAAO,IAAI,CAAC,EAAE,CAAC;YACjB,CAAC,CACF,CAAC;YAEF,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC1E,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;YACxB,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,WAA0B;QAC7C,IAAI,WAAW,KAAK,IAAI,CAAC,eAAe,EAAE,CAAC;YACzC,OAAO;QACT,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,IAAI,CAAC,eAAe,OAAO,WAAW,EAAE,CAAC,CAAC;QAEjF,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC;QACzC,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC;QAEnC,uCAAuC;QACvC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;QAEtE,kCAAkC;QAClC,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAChC,gBAAgB,EAChB,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAC/D,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;QACvB,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM;QACV,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QAExB,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;YAC7B,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC/B,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;YACjC,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC/B,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC;YACnC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACrB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QAExB,IAAI,CAAC,UAAU,EAAE,CAAC;QAElB,wBAAwB;QACxB,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACtB,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;IACzD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAEhD,IAAI,CAAC;YACH,+BAA+B;YAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YAClC,MAAM,eAAe,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;YAE3D,8BAA8B;YAC9B,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC;YAE/E,iDAAiD;YACjD,IAAI,cAAc,IAAI,cAAc,CAAC,QAAQ,KAAK,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvE,IAAI,cAAc,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC;oBACpC,MAAM,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,QAAyB,CAAC,CAAC;gBACtE,CAAC;YACH,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC,CAAC;QAClE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;YACvD,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe;QACnB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC;QAEhE,yDAAyD;QACzD,MAAM,wBAAwB,GAAG,IAAI,CAAC,SAAS,EAAE,uBAAuB,EAAE,IAAI,IAAI,CAAC;QAEnF,8DAA8D;QAC9D,MAAM,kBAAkB,GAAG,IAAI,CAAC,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QAEnF,OAAO;YACL,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,OAAO;YACP,wBAAwB;YACxB,kBAAkB;YAClB,YAAY,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE;SACxC,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,kBAAkB;QACxB,qCAAqC;QACrC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,iBAAiB,EAAE,CAAC,IAAI,EAAE,EAAE;YAClD,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;YAC3B,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC7C,gCAAgC;gBAChC,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;oBAC3C,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;gBACnE,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,cAAc,EAAE,GAAG,EAAE;YAC3C,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,6BAA6B;QAC7B,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC,kBAAkB,EAAE,CAAC,IAAI,EAAE,EAAE;YACxD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,IAAI,CAAC,SAAS,GAAG,EAAE,IAAI,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC,IAAI,EAAE,EAAE;YACvD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,IAAI,CAAC,SAAS,GAAG,EAAE,IAAI,CAAC,CAAC;YACjE,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;gBAC/B,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC;gBACzB,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YACvD,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,qBAAqB;QAC3B,IAAI,CAAC,iBAAiB,GAAG,WAAW,CAAC,GAAG,EAAE;YACxC,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;gBAC1B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAC;YACrD,CAAC,CAAC,CAAC;QACL,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACK,qBAAqB;QAC3B,IAAI,CAAC,gBAAgB,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;YAC7C,IAAI,CAAC;gBACH,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC;gBAEjE,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;oBAC/C,MAAM,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAC7C,QAAQ,EACR,IAAI,KAAK,CAAC,4BAA4B,CAAC,CACxC,CAAC;gBACJ,CAAC;gBAED,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;oBAC1B,aAAa;oBACb,MAAM,EAAE,IAAI,CAAC,MAAM;iBACpB,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;YACnD,CAAC;QACH,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACK,iBAAiB;QACvB,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;YAC1C,IAAI,CAAC;gBACH,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;gBAElD,wBAAwB;gBACxB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;gBAC/C,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;oBACrC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;gBACxD,CAAC;gBAED,mCAAmC;gBACnC,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAChC,kBAAkB,IAAI,CAAC,GAAG,EAAE,EAAE,EAC9B,YAAY,EACZ,QAAQ,CAAC,iBAAiB;iBAC3B,CAAC;gBAEF,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,YAAY,CAAC,CAAC;YAChD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;YACnD,CAAC;QACH,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACK,UAAU;QAChB,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACtC,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;QACrC,CAAC;QACD,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACrC,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;QACpC,CAAC;QACD,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAClC,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QACjC,CAAC;IACH,CAAC;IAED;;OAEG;IACK,oBAAoB,CAAC,OAAqB;QAChD,sDAAsD;QACtD,4EAA4E;QAC5E,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,mBAAmB,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;QAEvE,yEAAyE;QACzE,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC;QAEtC,4FAA4F;QAC5F,MAAM,kBAAkB,GAAG,OAAO,CAAC,YAAY,GAAG,GAAG,CAAC,CAAC,mCAAmC;QAC1F,MAAM,gBAAgB,GAAG,OAAO,CAAC,YAAY,GAAG,CAAC,IAAI,kBAAkB,GAAG,CAAC;YACzE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,GAAG,kBAAkB,CAAC,CAAC;YAC5D,CAAC,CAAC,CAAC,CAAC;QAEN,0EAA0E;QAC1E,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,GAAG,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,eAAe;QAEnF,0CAA0C;QAC1C,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAC9C,cAAc,GAAG,GAAG,GAAM,gCAAgC;YAC1D,WAAW,GAAG,GAAG,GAAS,4BAA4B;YACtD,gBAAgB,GAAG,GAAG,GAAI,6CAA6C;YACvE,YAAY,GAAG,GAAG,CAAQ,yCAAyC;SACpE,CAAC,CAAC;QAEH,OAAO;YACL,SAAS,EAAE,OAAO,CAAC,UAAU;YAC7B,iBAAiB;YACjB,wBAAwB,EAAE,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;YAC9D,iBAAiB,EAAE,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;YACvD,eAAe,EAAE,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,kBAAkB;SACjF,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc;QAC1B,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAChC,qBAAqB,EACrB;gBACE,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;gBAC1B,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBACvC,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACvC,CACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;CACF;AA5fD,4CA4fC;AAED;;GAEG;AACH,IAAI,kBAAkB,GAA4B,IAAI,CAAC;AAEvD;;GAEG;AACI,KAAK,UAAU,mBAAmB,CACvC,aAAkC,EAClC,QAAqB,EACrB,MAAwC;IAExC,IAAI,CAAC,kBAAkB,IAAI,aAAa,IAAI,QAAQ,EAAE,CAAC;QACrD,kBAAkB,GAAG,IAAI,gBAAgB,CAAC,aAAa,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC3E,MAAM,kBAAkB,CAAC,UAAU,EAAE,CAAC;IACxC,CAAC;IAED,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;IAC3F,CAAC;IAED,OAAO,kBAAkB,CAAC;AAC5B,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,qBAAqB;IACzC,IAAI,kBAAkB,EAAE,CAAC;QACvB,MAAM,kBAAkB,CAAC,QAAQ,EAAE,CAAC;QACpC,kBAAkB,GAAG,IAAI,CAAC;IAC5B,CAAC;AACH,CAAC"}
|