agentic-qe 1.0.4 → 1.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/qe-quality-analyzer.md +405 -0
- package/CHANGELOG.md +109 -0
- package/CONTRIBUTING.md +51 -0
- package/README.md +690 -134
- package/bin/aqe +90 -938
- package/dist/adapters/MemoryStoreAdapter.d.ts.map +1 -1
- package/dist/adapters/MemoryStoreAdapter.js +6 -0
- package/dist/adapters/MemoryStoreAdapter.js.map +1 -1
- package/dist/agents/CoverageAnalyzerAgent.d.ts +58 -3
- package/dist/agents/CoverageAnalyzerAgent.d.ts.map +1 -1
- package/dist/agents/CoverageAnalyzerAgent.js +316 -48
- package/dist/agents/CoverageAnalyzerAgent.js.map +1 -1
- package/dist/agents/FlakyTestHunterAgent.d.ts +48 -4
- package/dist/agents/FlakyTestHunterAgent.d.ts.map +1 -1
- package/dist/agents/FlakyTestHunterAgent.js +217 -10
- package/dist/agents/FlakyTestHunterAgent.js.map +1 -1
- package/dist/agents/LearningAgent.d.ts +75 -0
- package/dist/agents/LearningAgent.d.ts.map +1 -0
- package/dist/agents/LearningAgent.js +177 -0
- package/dist/agents/LearningAgent.js.map +1 -0
- package/dist/agents/TestGeneratorAgent.d.ts +42 -2
- package/dist/agents/TestGeneratorAgent.d.ts.map +1 -1
- package/dist/agents/TestGeneratorAgent.js +232 -13
- package/dist/agents/TestGeneratorAgent.js.map +1 -1
- package/dist/cli/commands/improve/index.d.ts +70 -0
- package/dist/cli/commands/improve/index.d.ts.map +1 -0
- package/dist/cli/commands/improve/index.js +530 -0
- package/dist/cli/commands/improve/index.js.map +1 -0
- package/dist/cli/commands/init.d.ts +34 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +875 -42
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/learn/index.d.ts +68 -0
- package/dist/cli/commands/learn/index.d.ts.map +1 -0
- package/dist/cli/commands/learn/index.js +431 -0
- package/dist/cli/commands/learn/index.js.map +1 -0
- package/dist/cli/commands/patterns/index.d.ts +75 -0
- package/dist/cli/commands/patterns/index.d.ts.map +1 -0
- package/dist/cli/commands/patterns/index.js +502 -0
- package/dist/cli/commands/patterns/index.js.map +1 -0
- package/dist/cli/commands/routing/index.d.ts +95 -0
- package/dist/cli/commands/routing/index.d.ts.map +1 -0
- package/dist/cli/commands/routing/index.js +399 -0
- package/dist/cli/commands/routing/index.js.map +1 -0
- package/dist/cli/index.js +455 -8
- package/dist/cli/index.js.map +1 -1
- package/dist/core/memory/SwarmMemoryManager.d.ts +5 -0
- package/dist/core/memory/SwarmMemoryManager.d.ts.map +1 -1
- package/dist/core/memory/SwarmMemoryManager.js +7 -0
- package/dist/core/memory/SwarmMemoryManager.js.map +1 -1
- package/dist/core/routing/AdaptiveModelRouter.d.ts +86 -0
- package/dist/core/routing/AdaptiveModelRouter.d.ts.map +1 -0
- package/dist/core/routing/AdaptiveModelRouter.js +264 -0
- package/dist/core/routing/AdaptiveModelRouter.js.map +1 -0
- package/dist/core/routing/ComplexityAnalyzer.d.ts +49 -0
- package/dist/core/routing/ComplexityAnalyzer.d.ts.map +1 -0
- package/dist/core/routing/ComplexityAnalyzer.js +182 -0
- package/dist/core/routing/ComplexityAnalyzer.js.map +1 -0
- package/dist/core/routing/CostTracker.d.ts +55 -0
- package/dist/core/routing/CostTracker.d.ts.map +1 -0
- package/dist/core/routing/CostTracker.js +210 -0
- package/dist/core/routing/CostTracker.js.map +1 -0
- package/dist/core/routing/FleetManagerIntegration.d.ts +68 -0
- package/dist/core/routing/FleetManagerIntegration.d.ts.map +1 -0
- package/dist/core/routing/FleetManagerIntegration.js +170 -0
- package/dist/core/routing/FleetManagerIntegration.js.map +1 -0
- package/dist/core/routing/ModelRules.d.ts +38 -0
- package/dist/core/routing/ModelRules.d.ts.map +1 -0
- package/dist/core/routing/ModelRules.js +170 -0
- package/dist/core/routing/ModelRules.js.map +1 -0
- package/dist/core/routing/QETask.d.ts +12 -0
- package/dist/core/routing/QETask.d.ts.map +1 -0
- package/dist/core/routing/QETask.js +21 -0
- package/dist/core/routing/QETask.js.map +1 -0
- package/dist/core/routing/index.d.ts +19 -0
- package/dist/core/routing/index.d.ts.map +1 -0
- package/dist/core/routing/index.js +50 -0
- package/dist/core/routing/index.js.map +1 -0
- package/dist/core/routing/types.d.ts +136 -0
- package/dist/core/routing/types.d.ts.map +1 -0
- package/dist/core/routing/types.js +28 -0
- package/dist/core/routing/types.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -1
- package/dist/learning/FlakyFixRecommendations.d.ts +40 -0
- package/dist/learning/FlakyFixRecommendations.d.ts.map +1 -0
- package/dist/learning/FlakyFixRecommendations.js +247 -0
- package/dist/learning/FlakyFixRecommendations.js.map +1 -0
- package/dist/learning/FlakyPredictionModel.d.ts +57 -0
- package/dist/learning/FlakyPredictionModel.d.ts.map +1 -0
- package/dist/learning/FlakyPredictionModel.js +289 -0
- package/dist/learning/FlakyPredictionModel.js.map +1 -0
- package/dist/learning/FlakyTestDetector.d.ts +46 -0
- package/dist/learning/FlakyTestDetector.d.ts.map +1 -0
- package/dist/learning/FlakyTestDetector.js +215 -0
- package/dist/learning/FlakyTestDetector.js.map +1 -0
- package/dist/learning/ImprovementLoop.d.ts +119 -0
- package/dist/learning/ImprovementLoop.d.ts.map +1 -0
- package/dist/learning/ImprovementLoop.js +353 -0
- package/dist/learning/ImprovementLoop.js.map +1 -0
- package/dist/learning/LearningEngine.d.ts +144 -0
- package/dist/learning/LearningEngine.d.ts.map +1 -0
- package/dist/learning/LearningEngine.js +531 -0
- package/dist/learning/LearningEngine.js.map +1 -0
- package/dist/learning/PerformanceTracker.d.ts +118 -0
- package/dist/learning/PerformanceTracker.d.ts.map +1 -0
- package/dist/learning/PerformanceTracker.js +376 -0
- package/dist/learning/PerformanceTracker.js.map +1 -0
- package/dist/learning/StatisticalAnalysis.d.ts +47 -0
- package/dist/learning/StatisticalAnalysis.d.ts.map +1 -0
- package/dist/learning/StatisticalAnalysis.js +170 -0
- package/dist/learning/StatisticalAnalysis.js.map +1 -0
- package/dist/learning/SwarmIntegration.d.ts +107 -0
- package/dist/learning/SwarmIntegration.d.ts.map +1 -0
- package/dist/learning/SwarmIntegration.js +191 -0
- package/dist/learning/SwarmIntegration.js.map +1 -0
- package/dist/learning/index.d.ts +10 -0
- package/dist/learning/index.d.ts.map +1 -0
- package/dist/learning/index.js +16 -0
- package/dist/learning/index.js.map +1 -0
- package/dist/learning/types.d.ts +288 -0
- package/dist/learning/types.d.ts.map +1 -0
- package/dist/learning/types.js +9 -0
- package/dist/learning/types.js.map +1 -0
- package/dist/mcp/handlers/phase2/Phase2Tools.d.ts +175 -0
- package/dist/mcp/handlers/phase2/Phase2Tools.d.ts.map +1 -0
- package/dist/mcp/handlers/phase2/Phase2Tools.js +693 -0
- package/dist/mcp/handlers/phase2/Phase2Tools.js.map +1 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +171 -9
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/streaming/CoverageAnalyzeStreamHandler.d.ts +112 -0
- package/dist/mcp/streaming/CoverageAnalyzeStreamHandler.d.ts.map +1 -0
- package/dist/mcp/streaming/CoverageAnalyzeStreamHandler.js +341 -0
- package/dist/mcp/streaming/CoverageAnalyzeStreamHandler.js.map +1 -0
- package/dist/mcp/streaming/StreamingMCPTool.d.ts +80 -0
- package/dist/mcp/streaming/StreamingMCPTool.d.ts.map +1 -0
- package/dist/mcp/streaming/StreamingMCPTool.js +276 -0
- package/dist/mcp/streaming/StreamingMCPTool.js.map +1 -0
- package/dist/mcp/streaming/TestExecuteStreamHandler.d.ts +73 -0
- package/dist/mcp/streaming/TestExecuteStreamHandler.d.ts.map +1 -0
- package/dist/mcp/streaming/TestExecuteStreamHandler.js +436 -0
- package/dist/mcp/streaming/TestExecuteStreamHandler.js.map +1 -0
- package/dist/mcp/streaming/index.d.ts +14 -0
- package/dist/mcp/streaming/index.d.ts.map +1 -0
- package/dist/mcp/streaming/index.js +30 -0
- package/dist/mcp/streaming/index.js.map +1 -0
- package/dist/mcp/streaming/types.d.ts +117 -0
- package/dist/mcp/streaming/types.d.ts.map +1 -0
- package/dist/mcp/streaming/types.js +88 -0
- package/dist/mcp/streaming/types.js.map +1 -0
- package/dist/mcp/tools.d.ts +18 -1
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +123 -1
- package/dist/mcp/tools.js.map +1 -1
- package/dist/reasoning/CodeSignatureGenerator.d.ts +98 -0
- package/dist/reasoning/CodeSignatureGenerator.d.ts.map +1 -0
- package/dist/reasoning/CodeSignatureGenerator.js +427 -0
- package/dist/reasoning/CodeSignatureGenerator.js.map +1 -0
- package/dist/reasoning/PatternClassifier.d.ts +98 -0
- package/dist/reasoning/PatternClassifier.d.ts.map +1 -0
- package/dist/reasoning/PatternClassifier.js +345 -0
- package/dist/reasoning/PatternClassifier.js.map +1 -0
- package/dist/reasoning/PatternExtractor.d.ts +131 -0
- package/dist/reasoning/PatternExtractor.d.ts.map +1 -0
- package/dist/reasoning/PatternExtractor.js +539 -0
- package/dist/reasoning/PatternExtractor.js.map +1 -0
- package/dist/reasoning/PatternMemoryIntegration.d.ts +102 -0
- package/dist/reasoning/PatternMemoryIntegration.d.ts.map +1 -0
- package/dist/reasoning/PatternMemoryIntegration.js +336 -0
- package/dist/reasoning/PatternMemoryIntegration.js.map +1 -0
- package/dist/reasoning/QEReasoningBank.d.ts +121 -0
- package/dist/reasoning/QEReasoningBank.d.ts.map +1 -0
- package/dist/reasoning/QEReasoningBank.js +235 -0
- package/dist/reasoning/QEReasoningBank.js.map +1 -0
- package/dist/reasoning/TestTemplateCreator.d.ts +95 -0
- package/dist/reasoning/TestTemplateCreator.d.ts.map +1 -0
- package/dist/reasoning/TestTemplateCreator.js +535 -0
- package/dist/reasoning/TestTemplateCreator.js.map +1 -0
- package/dist/reasoning/index.d.ts +10 -0
- package/dist/reasoning/index.d.ts.map +1 -0
- package/dist/reasoning/index.js +31 -0
- package/dist/reasoning/index.js.map +1 -0
- package/dist/reasoning/types.d.ts +717 -0
- package/dist/reasoning/types.d.ts.map +1 -0
- package/dist/reasoning/types.js +57 -0
- package/dist/reasoning/types.js.map +1 -0
- package/dist/types/index.d.ts +20 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/pattern.types.d.ts +364 -0
- package/dist/types/pattern.types.d.ts.map +1 -0
- package/dist/types/pattern.types.js +60 -0
- package/dist/types/pattern.types.js.map +1 -0
- package/package.json +25 -3
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* StreamingMCPTool - Base class for streaming MCP tools
|
|
4
|
+
*
|
|
5
|
+
* Provides AsyncGenerator-based streaming with progress updates, error handling,
|
|
6
|
+
* and resource cleanup for long-running MCP operations.
|
|
7
|
+
*
|
|
8
|
+
* @version 1.0.5
|
|
9
|
+
* @author Agentic QE Team
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.StreamingMCPTool = void 0;
|
|
13
|
+
const types_js_1 = require("./types.js");
|
|
14
|
+
/**
|
|
15
|
+
* Abstract base class for streaming MCP tools
|
|
16
|
+
* Subclasses implement executeWithProgress to provide streaming functionality
|
|
17
|
+
*/
|
|
18
|
+
class StreamingMCPTool {
|
|
19
|
+
constructor(memoryStore, eventBus, config = {}) {
|
|
20
|
+
this.session = null;
|
|
21
|
+
this.lastProgressTime = 0;
|
|
22
|
+
this.progressBuffer = [];
|
|
23
|
+
this.cancelled = false;
|
|
24
|
+
this.context = {
|
|
25
|
+
sessionId: this.generateSessionId(),
|
|
26
|
+
memoryStore,
|
|
27
|
+
eventBus,
|
|
28
|
+
config: { ...types_js_1.DEFAULT_STREAMING_CONFIG, ...config }
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Execute tool with streaming progress updates
|
|
33
|
+
* Returns an AsyncGenerator that yields progress events and final result
|
|
34
|
+
*/
|
|
35
|
+
async *execute(params) {
|
|
36
|
+
const startTime = Date.now();
|
|
37
|
+
try {
|
|
38
|
+
// Initialize session
|
|
39
|
+
this.session = this.createSession();
|
|
40
|
+
await this.initializeSession(this.session);
|
|
41
|
+
// Emit initial progress
|
|
42
|
+
yield (0, types_js_1.createProgress)('Starting operation...', 0, {
|
|
43
|
+
metadata: { sessionId: this.session.id }
|
|
44
|
+
});
|
|
45
|
+
// Create progress reporter
|
|
46
|
+
const reporter = this.createProgressReporter();
|
|
47
|
+
// Execute the actual streaming operation
|
|
48
|
+
try {
|
|
49
|
+
const result = await this.executeWithProgress(params, reporter);
|
|
50
|
+
if (this.cancelled) {
|
|
51
|
+
yield (0, types_js_1.createError)('Operation cancelled', {
|
|
52
|
+
recoverable: true,
|
|
53
|
+
details: { sessionId: this.session.id }
|
|
54
|
+
});
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
// Update session to completed
|
|
58
|
+
if (this.session) {
|
|
59
|
+
this.session.status = 'completed';
|
|
60
|
+
await this.persistSession(this.session);
|
|
61
|
+
}
|
|
62
|
+
// Emit final result
|
|
63
|
+
const executionTime = Date.now() - startTime;
|
|
64
|
+
yield (0, types_js_1.createResult)(result, {
|
|
65
|
+
executionTime,
|
|
66
|
+
metadata: { sessionId: this.session.id }
|
|
67
|
+
});
|
|
68
|
+
// Emit completion event
|
|
69
|
+
this.context.eventBus.emit('streaming:completed', {
|
|
70
|
+
sessionId: this.session.id,
|
|
71
|
+
executionTime,
|
|
72
|
+
result
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
// Update session to failed
|
|
77
|
+
if (this.session) {
|
|
78
|
+
this.session.status = 'failed';
|
|
79
|
+
await this.persistSession(this.session);
|
|
80
|
+
}
|
|
81
|
+
// Emit error event
|
|
82
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
83
|
+
yield (0, types_js_1.createError)(errorMessage, {
|
|
84
|
+
details: error instanceof Error ? { stack: error.stack } : undefined,
|
|
85
|
+
recoverable: this.isRecoverableError(error)
|
|
86
|
+
});
|
|
87
|
+
// Emit error to event bus
|
|
88
|
+
this.context.eventBus.emit('streaming:error', {
|
|
89
|
+
sessionId: this.session.id,
|
|
90
|
+
error: errorMessage
|
|
91
|
+
});
|
|
92
|
+
throw error;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
// Outer catch for initialization errors
|
|
97
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
98
|
+
yield (0, types_js_1.createError)(`Streaming execution failed: ${errorMessage}`, {
|
|
99
|
+
recoverable: false
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
finally {
|
|
103
|
+
// Cleanup resources
|
|
104
|
+
await this.cleanup();
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Create a progress reporter for emitting progress updates
|
|
109
|
+
*/
|
|
110
|
+
createProgressReporter() {
|
|
111
|
+
const self = this;
|
|
112
|
+
let currentProgress = null;
|
|
113
|
+
return {
|
|
114
|
+
async report(progress) {
|
|
115
|
+
const now = Date.now();
|
|
116
|
+
const timeSinceLastProgress = now - self.lastProgressTime;
|
|
117
|
+
// Apply progress interval throttling
|
|
118
|
+
if (timeSinceLastProgress < self.context.config.progressInterval) {
|
|
119
|
+
// Buffer progress if buffering is enabled
|
|
120
|
+
if (self.context.config.bufferEvents) {
|
|
121
|
+
const progressEvent = (0, types_js_1.createProgress)(progress.message, progress.percent, progress);
|
|
122
|
+
self.progressBuffer.push(progressEvent);
|
|
123
|
+
// Flush buffer if it exceeds max size
|
|
124
|
+
if (self.progressBuffer.length >= self.context.config.maxBufferSize) {
|
|
125
|
+
await self.flushProgressBuffer();
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
// Create and store progress event
|
|
131
|
+
const progressEvent = (0, types_js_1.createProgress)(progress.message, progress.percent, progress);
|
|
132
|
+
currentProgress = progressEvent;
|
|
133
|
+
// Update session state
|
|
134
|
+
if (self.session) {
|
|
135
|
+
self.session.progress = {
|
|
136
|
+
percent: progressEvent.percent,
|
|
137
|
+
message: progressEvent.message,
|
|
138
|
+
itemsProcessed: progressEvent.itemsProcessed || 0,
|
|
139
|
+
itemsTotal: progressEvent.itemsTotal || 0
|
|
140
|
+
};
|
|
141
|
+
await self.persistSession(self.session);
|
|
142
|
+
}
|
|
143
|
+
// Emit progress event to event bus
|
|
144
|
+
self.context.eventBus.emit('streaming:progress', progressEvent);
|
|
145
|
+
// Store progress in memory
|
|
146
|
+
await self.context.memoryStore.set(`streaming/session-${self.context.sessionId}/progress`, progressEvent);
|
|
147
|
+
self.lastProgressTime = now;
|
|
148
|
+
},
|
|
149
|
+
async complete(result) {
|
|
150
|
+
// Flush any remaining buffered progress
|
|
151
|
+
await self.flushProgressBuffer();
|
|
152
|
+
const resultEvent = (0, types_js_1.createResult)(result.data, result);
|
|
153
|
+
// Store result in memory
|
|
154
|
+
await self.context.memoryStore.set(`streaming/session-${self.context.sessionId}/result`, resultEvent);
|
|
155
|
+
},
|
|
156
|
+
async error(error) {
|
|
157
|
+
const errorEvent = (0, types_js_1.createError)(error.error, error);
|
|
158
|
+
// Store error in memory
|
|
159
|
+
await self.context.memoryStore.set(`streaming/session-${self.context.sessionId}/error`, errorEvent);
|
|
160
|
+
// Emit error event
|
|
161
|
+
self.context.eventBus.emit('streaming:error', errorEvent);
|
|
162
|
+
},
|
|
163
|
+
getProgress() {
|
|
164
|
+
return currentProgress;
|
|
165
|
+
},
|
|
166
|
+
async cancel() {
|
|
167
|
+
self.cancelled = true;
|
|
168
|
+
if (self.session) {
|
|
169
|
+
self.session.status = 'cancelled';
|
|
170
|
+
await self.persistSession(self.session);
|
|
171
|
+
}
|
|
172
|
+
// Emit cancellation event
|
|
173
|
+
self.context.eventBus.emit('streaming:cancelled', {
|
|
174
|
+
sessionId: self.context.sessionId
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Initialize streaming session
|
|
181
|
+
*/
|
|
182
|
+
createSession() {
|
|
183
|
+
return {
|
|
184
|
+
id: this.context.sessionId,
|
|
185
|
+
toolName: this.constructor.name,
|
|
186
|
+
startedAt: new Date().toISOString(),
|
|
187
|
+
status: 'active',
|
|
188
|
+
progress: {
|
|
189
|
+
percent: 0,
|
|
190
|
+
message: 'Initializing...',
|
|
191
|
+
itemsProcessed: 0,
|
|
192
|
+
itemsTotal: 0
|
|
193
|
+
}
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Initialize session with memory storage and event emission
|
|
198
|
+
*/
|
|
199
|
+
async initializeSession(session) {
|
|
200
|
+
if (this.context.config.persistSession) {
|
|
201
|
+
await this.context.memoryStore.set(`streaming/session-${session.id}`, session);
|
|
202
|
+
}
|
|
203
|
+
// Emit session started event
|
|
204
|
+
this.context.eventBus.emit('streaming:started', { sessionId: session.id });
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Persist session state to memory
|
|
208
|
+
*/
|
|
209
|
+
async persistSession(session) {
|
|
210
|
+
if (this.context.config.persistSession) {
|
|
211
|
+
await this.context.memoryStore.set(`streaming/session-${session.id}`, session);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Flush buffered progress events
|
|
216
|
+
*/
|
|
217
|
+
async flushProgressBuffer() {
|
|
218
|
+
if (this.progressBuffer.length === 0)
|
|
219
|
+
return;
|
|
220
|
+
// Emit all buffered progress events
|
|
221
|
+
for (const progress of this.progressBuffer) {
|
|
222
|
+
this.context.eventBus.emit('streaming:progress', progress);
|
|
223
|
+
}
|
|
224
|
+
// Store latest progress in memory
|
|
225
|
+
const latestProgress = this.progressBuffer[this.progressBuffer.length - 1];
|
|
226
|
+
await this.context.memoryStore.set(`streaming/session-${this.context.sessionId}/progress`, latestProgress);
|
|
227
|
+
// Clear buffer
|
|
228
|
+
this.progressBuffer = [];
|
|
229
|
+
this.lastProgressTime = Date.now();
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Cleanup resources after streaming completes
|
|
233
|
+
*/
|
|
234
|
+
async cleanup() {
|
|
235
|
+
// Flush any remaining buffered progress
|
|
236
|
+
await this.flushProgressBuffer();
|
|
237
|
+
// Optional: Clean up old session data (can be configured)
|
|
238
|
+
// This is commented out to allow session history retrieval
|
|
239
|
+
// await this.context.memoryStore.delete(`streaming/session-${this.context.sessionId}`);
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Check if error is recoverable (e.g., network timeout)
|
|
243
|
+
*/
|
|
244
|
+
isRecoverableError(error) {
|
|
245
|
+
if (error instanceof Error) {
|
|
246
|
+
const recoverablePatterns = [
|
|
247
|
+
'TIMEOUT',
|
|
248
|
+
'ECONNRESET',
|
|
249
|
+
'ETIMEDOUT',
|
|
250
|
+
'CANCELLED'
|
|
251
|
+
];
|
|
252
|
+
return recoverablePatterns.some(pattern => error.message.includes(pattern));
|
|
253
|
+
}
|
|
254
|
+
return false;
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Generate unique session ID
|
|
258
|
+
*/
|
|
259
|
+
generateSessionId() {
|
|
260
|
+
return `stream-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Get current session
|
|
264
|
+
*/
|
|
265
|
+
getSession() {
|
|
266
|
+
return this.session;
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Check if operation is cancelled
|
|
270
|
+
*/
|
|
271
|
+
isCancelled() {
|
|
272
|
+
return this.cancelled;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
exports.StreamingMCPTool = StreamingMCPTool;
|
|
276
|
+
//# sourceMappingURL=StreamingMCPTool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StreamingMCPTool.js","sourceRoot":"","sources":["../../../src/mcp/streaming/StreamingMCPTool.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAGH,yCAYoB;AASpB;;;GAGG;AACH,MAAsB,gBAAgB;IAOpC,YACE,WAA6B,EAC7B,QAAsB,EACtB,SAAmC,EAAE;QAR7B,YAAO,GAA4B,IAAI,CAAC;QAC1C,qBAAgB,GAAW,CAAC,CAAC;QAC7B,mBAAc,GAAmB,EAAE,CAAC;QACpC,cAAS,GAAY,KAAK,CAAC;QAOjC,IAAI,CAAC,OAAO,GAAG;YACb,SAAS,EAAE,IAAI,CAAC,iBAAiB,EAAE;YACnC,WAAW;YACX,QAAQ;YACR,MAAM,EAAE,EAAE,GAAG,mCAAwB,EAAE,GAAG,MAAM,EAAE;SACnD,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,CAAC,OAAO,CAAC,MAAW;QACxB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,IAAI,CAAC;YACH,qBAAqB;YACrB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACpC,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAE3C,wBAAwB;YACxB,MAAM,IAAA,yBAAc,EAAC,uBAAuB,EAAE,CAAC,EAAE;gBAC/C,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE;aACzC,CAAC,CAAC;YAEH,2BAA2B;YAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAE/C,yCAAyC;YACzC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;gBAEhE,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;oBACnB,MAAM,IAAA,sBAAW,EAAC,qBAAqB,EAAE;wBACvC,WAAW,EAAE,IAAI;wBACjB,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE;qBACxC,CAAC,CAAC;oBACH,OAAO;gBACT,CAAC;gBAED,8BAA8B;gBAC9B,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACjB,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,WAAW,CAAC;oBAClC,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC1C,CAAC;gBAED,oBAAoB;gBACpB,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;gBAC7C,MAAM,IAAA,uBAAY,EAAC,MAAM,EAAE;oBACzB,aAAa;oBACb,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE;iBACzC,CAAC,CAAC;gBAEH,wBAAwB;gBACxB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,qBAAqB,EAAE;oBAChD,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE;oBAC1B,aAAa;oBACb,MAAM;iBACP,CAAC,CAAC;YAEL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,2BAA2B;gBAC3B,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACjB,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC;oBAC/B,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC1C,CAAC;gBAED,mBAAmB;gBACnB,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC5E,MAAM,IAAA,sBAAW,EAAC,YAAY,EAAE;oBAC9B,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS;oBACpE,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;iBAC5C,CAAC,CAAC;gBAEH,0BAA0B;gBAC1B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,EAAE;oBAC5C,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE;oBAC1B,KAAK,EAAE,YAAY;iBACpB,CAAC,CAAC;gBAEH,MAAM,KAAK,CAAC;YACd,CAAC;QAEH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,wCAAwC;YACxC,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5E,MAAM,IAAA,sBAAW,EAAC,+BAA+B,YAAY,EAAE,EAAE;gBAC/D,WAAW,EAAE,KAAK;aACnB,CAAC,CAAC;QACL,CAAC;gBAAS,CAAC;YACT,oBAAoB;YACpB,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;IAWD;;OAEG;IACO,sBAAsB;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC;QAClB,IAAI,eAAe,GAAwB,IAAI,CAAC;QAEhD,OAAO;YACL,KAAK,CAAC,MAAM,CAAC,QAAQ;gBACnB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACvB,MAAM,qBAAqB,GAAG,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC;gBAE1D,qCAAqC;gBACrC,IAAI,qBAAqB,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;oBACjE,0CAA0C;oBAC1C,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;wBACrC,MAAM,aAAa,GAAG,IAAA,yBAAc,EAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;wBACnF,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;wBAExC,sCAAsC;wBACtC,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;4BACpE,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;wBACnC,CAAC;oBACH,CAAC;oBACD,OAAO;gBACT,CAAC;gBAED,kCAAkC;gBAClC,MAAM,aAAa,GAAG,IAAA,yBAAc,EAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;gBACnF,eAAe,GAAG,aAAa,CAAC;gBAEhC,uBAAuB;gBACvB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACjB,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG;wBACtB,OAAO,EAAE,aAAa,CAAC,OAAO;wBAC9B,OAAO,EAAE,aAAa,CAAC,OAAO;wBAC9B,cAAc,EAAE,aAAa,CAAC,cAAc,IAAI,CAAC;wBACjD,UAAU,EAAE,aAAa,CAAC,UAAU,IAAI,CAAC;qBAC1C,CAAC;oBACF,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC1C,CAAC;gBAED,mCAAmC;gBACnC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,oBAAoB,EAAE,aAAa,CAAC,CAAC;gBAEhE,2BAA2B;gBAC3B,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAChC,qBAAqB,IAAI,CAAC,OAAO,CAAC,SAAS,WAAW,EACtD,aAAa,CACd,CAAC;gBAEF,IAAI,CAAC,gBAAgB,GAAG,GAAG,CAAC;YAC9B,CAAC;YAED,KAAK,CAAC,QAAQ,CAAC,MAAM;gBACnB,wCAAwC;gBACxC,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBAEjC,MAAM,WAAW,GAAG,IAAA,uBAAY,EAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBAEtD,yBAAyB;gBACzB,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAChC,qBAAqB,IAAI,CAAC,OAAO,CAAC,SAAS,SAAS,EACpD,WAAW,CACZ,CAAC;YACJ,CAAC;YAED,KAAK,CAAC,KAAK,CAAC,KAAK;gBACf,MAAM,UAAU,GAAG,IAAA,sBAAW,EAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gBAEnD,wBAAwB;gBACxB,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAChC,qBAAqB,IAAI,CAAC,OAAO,CAAC,SAAS,QAAQ,EACnD,UAAU,CACX,CAAC;gBAEF,mBAAmB;gBACnB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;YAC5D,CAAC;YAED,WAAW;gBACT,OAAO,eAAe,CAAC;YACzB,CAAC;YAED,KAAK,CAAC,MAAM;gBACV,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;gBAEtB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACjB,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,WAAW,CAAC;oBAClC,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC1C,CAAC;gBAED,0BAA0B;gBAC1B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,qBAAqB,EAAE;oBAChD,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS;iBAClC,CAAC,CAAC;YACL,CAAC;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,aAAa;QACnB,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS;YAC1B,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI;YAC/B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,MAAM,EAAE,QAAQ;YAChB,QAAQ,EAAE;gBACR,OAAO,EAAE,CAAC;gBACV,OAAO,EAAE,iBAAiB;gBAC1B,cAAc,EAAE,CAAC;gBACjB,UAAU,EAAE,CAAC;aACd;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,iBAAiB,CAAC,OAAyB;QACvD,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YACvC,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAChC,qBAAqB,OAAO,CAAC,EAAE,EAAE,EACjC,OAAO,CACR,CAAC;QACJ,CAAC;QAED,6BAA6B;QAC7B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc,CAAC,OAAyB;QACpD,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YACvC,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAChC,qBAAqB,OAAO,CAAC,EAAE,EAAE,EACjC,OAAO,CACR,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,mBAAmB;QAC/B,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAE7C,oCAAoC;QACpC,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YAC3C,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAAC;QAC7D,CAAC;QAED,kCAAkC;QAClC,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC3E,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAChC,qBAAqB,IAAI,CAAC,OAAO,CAAC,SAAS,WAAW,EACtD,cAAc,CACf,CAAC;QAEF,eAAe;QACf,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACrC,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,OAAO;QACnB,wCAAwC;QACxC,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAEjC,0DAA0D;QAC1D,2DAA2D;QAC3D,wFAAwF;IAC1F,CAAC;IAED;;OAEG;IACK,kBAAkB,CAAC,KAAc;QACvC,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,MAAM,mBAAmB,GAAG;gBAC1B,SAAS;gBACT,YAAY;gBACZ,WAAW;gBACX,WAAW;aACZ,CAAC;YACF,OAAO,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CACxC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAChC,CAAC;QACJ,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,iBAAiB;QACvB,OAAO,UAAU,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IAC3E,CAAC;IAED;;OAEG;IACI,UAAU;QACf,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;OAEG;IACI,WAAW;QAChB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;CACF;AA9UD,4CA8UC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test Execution Streaming Handler
|
|
3
|
+
*
|
|
4
|
+
* Provides real-time progress updates for long-running test executions.
|
|
5
|
+
* Emits progress for each test completion with status, duration, and metrics.
|
|
6
|
+
*
|
|
7
|
+
* @version 1.0.5
|
|
8
|
+
* @author Agentic QE Team
|
|
9
|
+
*/
|
|
10
|
+
import { EventEmitter } from 'events';
|
|
11
|
+
import { StreamingMCPTool } from './StreamingMCPTool.js';
|
|
12
|
+
import { ProgressReporter } from './types.js';
|
|
13
|
+
import type { TestExecution, SuiteResult } from '../handlers/test-execute.js';
|
|
14
|
+
import { TestExecutionSpec } from '../tools.js';
|
|
15
|
+
export interface TestExecuteStreamParams {
|
|
16
|
+
spec: TestExecutionSpec;
|
|
17
|
+
fleetId?: string;
|
|
18
|
+
enableRealtimeUpdates?: boolean;
|
|
19
|
+
}
|
|
20
|
+
export interface TestStreamProgress {
|
|
21
|
+
currentSuite: string;
|
|
22
|
+
currentTest: string;
|
|
23
|
+
suitesCompleted: number;
|
|
24
|
+
suitesTotal: number;
|
|
25
|
+
testsCompleted: number;
|
|
26
|
+
testsTotal: number;
|
|
27
|
+
passed: number;
|
|
28
|
+
failed: number;
|
|
29
|
+
skipped: number;
|
|
30
|
+
duration: number;
|
|
31
|
+
currentSuiteResult?: Partial<SuiteResult>;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Streaming handler for test execution with real-time progress
|
|
35
|
+
*/
|
|
36
|
+
export declare class TestExecuteStreamHandler extends StreamingMCPTool {
|
|
37
|
+
private execution;
|
|
38
|
+
private startTime;
|
|
39
|
+
constructor(memoryStore: Map<string, any>, eventBus: EventEmitter);
|
|
40
|
+
/**
|
|
41
|
+
* Execute tests with streaming progress updates
|
|
42
|
+
*/
|
|
43
|
+
protected executeWithProgress(params: TestExecuteStreamParams, reporter: ProgressReporter): Promise<TestExecution>;
|
|
44
|
+
/**
|
|
45
|
+
* Execute tests sequentially with progress updates
|
|
46
|
+
*/
|
|
47
|
+
private executeTestsSequentiallyWithProgress;
|
|
48
|
+
/**
|
|
49
|
+
* Execute tests in parallel with progress updates
|
|
50
|
+
*/
|
|
51
|
+
private executeTestsInParallelWithProgress;
|
|
52
|
+
/**
|
|
53
|
+
* Execute single suite with per-test progress updates
|
|
54
|
+
*/
|
|
55
|
+
private executeSuiteWithProgress;
|
|
56
|
+
/**
|
|
57
|
+
* Validate test execution spec
|
|
58
|
+
*/
|
|
59
|
+
private validateSpec;
|
|
60
|
+
/**
|
|
61
|
+
* Create execution object
|
|
62
|
+
*/
|
|
63
|
+
private createExecution;
|
|
64
|
+
/**
|
|
65
|
+
* Calculate final results and metrics
|
|
66
|
+
*/
|
|
67
|
+
private calculateFinalResults;
|
|
68
|
+
/**
|
|
69
|
+
* Generate test artifacts
|
|
70
|
+
*/
|
|
71
|
+
private generateArtifacts;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=TestExecuteStreamHandler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TestExecuteStreamHandler.d.ts","sourceRoot":"","sources":["../../../src/mcp/streaming/TestExecuteStreamHandler.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAqB,MAAM,YAAY,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAc,MAAM,6BAA6B,CAAC;AAC1F,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,iBAAiB,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;CAC3C;AAED;;GAEG;AACH,qBAAa,wBAAyB,SAAQ,gBAAgB;IAC5D,OAAO,CAAC,SAAS,CAA8B;IAC/C,OAAO,CAAC,SAAS,CAAa;gBAElB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,YAAY;IASjE;;OAEG;cACa,mBAAmB,CACjC,MAAM,EAAE,uBAAuB,EAC/B,QAAQ,EAAE,gBAAgB,GACzB,OAAO,CAAC,aAAa,CAAC;IAyEzB;;OAEG;YACW,oCAAoC;IA0FlD;;OAEG;YACW,kCAAkC;IAmGhD;;OAEG;YACW,wBAAwB;IA+EtC;;OAEG;IACH,OAAO,CAAC,YAAY;IAcpB;;OAEG;IACH,OAAO,CAAC,eAAe;IAkCvB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAiC7B;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAW1B"}
|