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,531 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* LearningEngine - Phase 2 (Milestone 2.2)
|
|
4
|
+
*
|
|
5
|
+
* Implements reinforcement learning for agent performance improvement.
|
|
6
|
+
* Uses Q-learning algorithm to optimize task execution strategies.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.LearningEngine = void 0;
|
|
10
|
+
const uuid_1 = require("uuid");
|
|
11
|
+
const Logger_1 = require("../utils/Logger");
|
|
12
|
+
/**
|
|
13
|
+
* Default learning configuration
|
|
14
|
+
*/
|
|
15
|
+
const DEFAULT_CONFIG = {
|
|
16
|
+
enabled: true,
|
|
17
|
+
learningRate: 0.1,
|
|
18
|
+
discountFactor: 0.95,
|
|
19
|
+
explorationRate: 0.3,
|
|
20
|
+
explorationDecay: 0.995,
|
|
21
|
+
minExplorationRate: 0.01,
|
|
22
|
+
maxMemorySize: 100 * 1024 * 1024, // 100MB
|
|
23
|
+
batchSize: 32,
|
|
24
|
+
updateFrequency: 10
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* LearningEngine - Reinforcement learning for agents
|
|
28
|
+
*/
|
|
29
|
+
class LearningEngine {
|
|
30
|
+
constructor(agentId, memoryStore, config = {}) {
|
|
31
|
+
this.logger = Logger_1.Logger.getInstance();
|
|
32
|
+
this.agentId = agentId;
|
|
33
|
+
this.memoryStore = memoryStore;
|
|
34
|
+
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
35
|
+
this.qTable = new Map();
|
|
36
|
+
this.experiences = [];
|
|
37
|
+
this.patterns = new Map();
|
|
38
|
+
this.failurePatterns = new Map();
|
|
39
|
+
this.taskCount = 0;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Initialize the learning engine
|
|
43
|
+
*/
|
|
44
|
+
async initialize() {
|
|
45
|
+
this.logger.info(`Initializing LearningEngine for agent ${this.agentId}`);
|
|
46
|
+
// Load previous learning state if exists
|
|
47
|
+
await this.loadState();
|
|
48
|
+
// Store config in memory
|
|
49
|
+
await this.memoryStore.store(`phase2/learning/${this.agentId}/config`, this.config, { partition: 'learning' });
|
|
50
|
+
this.logger.info('LearningEngine initialized successfully');
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Learn from a task execution
|
|
54
|
+
*/
|
|
55
|
+
async learnFromExecution(task, result, feedback) {
|
|
56
|
+
if (!this.config.enabled) {
|
|
57
|
+
return this.createOutcome(false, 0, 0);
|
|
58
|
+
}
|
|
59
|
+
// Extract experience from task execution
|
|
60
|
+
const experience = this.extractExperience(task, result, feedback);
|
|
61
|
+
this.experiences.push(experience);
|
|
62
|
+
// Calculate reward
|
|
63
|
+
const reward = this.calculateReward(result, feedback);
|
|
64
|
+
experience.reward = reward;
|
|
65
|
+
// Update Q-table
|
|
66
|
+
await this.updateQTable(experience);
|
|
67
|
+
// Update patterns
|
|
68
|
+
await this.updatePatterns(experience);
|
|
69
|
+
// Detect failure patterns
|
|
70
|
+
if (!result.success) {
|
|
71
|
+
await this.detectFailurePattern(experience);
|
|
72
|
+
}
|
|
73
|
+
// Increment task count
|
|
74
|
+
this.taskCount++;
|
|
75
|
+
// Periodic model update
|
|
76
|
+
if (this.taskCount % this.config.updateFrequency === 0) {
|
|
77
|
+
await this.performBatchUpdate();
|
|
78
|
+
}
|
|
79
|
+
// Decay exploration rate
|
|
80
|
+
this.decayExploration();
|
|
81
|
+
// Calculate improvement
|
|
82
|
+
const improvement = await this.calculateImprovement();
|
|
83
|
+
// Emit learning event
|
|
84
|
+
await this.emitLearningEvent('training', {
|
|
85
|
+
experience,
|
|
86
|
+
reward,
|
|
87
|
+
improvement
|
|
88
|
+
});
|
|
89
|
+
// Save state periodically
|
|
90
|
+
if (this.taskCount % 50 === 0) {
|
|
91
|
+
await this.saveState();
|
|
92
|
+
}
|
|
93
|
+
return improvement;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Recommend best strategy for a given state
|
|
97
|
+
*/
|
|
98
|
+
async recommendStrategy(state) {
|
|
99
|
+
const stateKey = this.encodeState(state);
|
|
100
|
+
// Get Q-values for all actions in this state
|
|
101
|
+
const actionValues = this.qTable.get(stateKey) || new Map();
|
|
102
|
+
if (actionValues.size === 0) {
|
|
103
|
+
// No learned strategies yet, return default
|
|
104
|
+
return {
|
|
105
|
+
strategy: 'default',
|
|
106
|
+
confidence: 0.5,
|
|
107
|
+
expectedImprovement: 0,
|
|
108
|
+
reasoning: 'No learned strategies available yet',
|
|
109
|
+
alternatives: []
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
// Find best action
|
|
113
|
+
let bestAction = '';
|
|
114
|
+
let bestValue = -Infinity;
|
|
115
|
+
const alternatives = [];
|
|
116
|
+
for (const [action, value] of actionValues.entries()) {
|
|
117
|
+
if (value > bestValue) {
|
|
118
|
+
if (bestAction) {
|
|
119
|
+
alternatives.push({
|
|
120
|
+
strategy: bestAction,
|
|
121
|
+
confidence: this.valueToConfidence(bestValue)
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
bestValue = value;
|
|
125
|
+
bestAction = action;
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
alternatives.push({
|
|
129
|
+
strategy: action,
|
|
130
|
+
confidence: this.valueToConfidence(value)
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
// Sort alternatives by confidence
|
|
135
|
+
alternatives.sort((a, b) => b.confidence - a.confidence);
|
|
136
|
+
return {
|
|
137
|
+
strategy: bestAction,
|
|
138
|
+
confidence: this.valueToConfidence(bestValue),
|
|
139
|
+
expectedImprovement: Math.max(0, bestValue * 100),
|
|
140
|
+
reasoning: `Learned from ${this.experiences.length} experiences`,
|
|
141
|
+
alternatives: alternatives.slice(0, 3)
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Get learned patterns
|
|
146
|
+
*/
|
|
147
|
+
getPatterns() {
|
|
148
|
+
return Array.from(this.patterns.values())
|
|
149
|
+
.sort((a, b) => b.confidence - a.confidence);
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Get failure patterns
|
|
153
|
+
*/
|
|
154
|
+
getFailurePatterns() {
|
|
155
|
+
return Array.from(this.failurePatterns.values())
|
|
156
|
+
.sort((a, b) => b.frequency - a.frequency);
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Extract features from state for learning
|
|
160
|
+
*/
|
|
161
|
+
extractFeatures(state) {
|
|
162
|
+
return [
|
|
163
|
+
state.taskComplexity,
|
|
164
|
+
state.requiredCapabilities.length / 10, // normalize
|
|
165
|
+
state.previousAttempts / 5, // normalize
|
|
166
|
+
state.availableResources,
|
|
167
|
+
state.timeConstraint ? Math.min(state.timeConstraint / 300000, 1) : 1 // normalize to 5 min
|
|
168
|
+
];
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Encode state to string key for Q-table
|
|
172
|
+
*/
|
|
173
|
+
encodeState(state) {
|
|
174
|
+
const features = this.extractFeatures(state);
|
|
175
|
+
return features.map(f => Math.round(f * 10) / 10).join(',');
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Encode action to string key
|
|
179
|
+
*/
|
|
180
|
+
encodeAction(action) {
|
|
181
|
+
return `${action.strategy}:${action.parallelization.toFixed(1)}:${action.retryPolicy}`;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Extract experience from task execution
|
|
185
|
+
*/
|
|
186
|
+
extractExperience(task, result, feedback) {
|
|
187
|
+
const state = {
|
|
188
|
+
taskComplexity: this.estimateComplexity(task),
|
|
189
|
+
requiredCapabilities: task.requirements?.capabilities || [],
|
|
190
|
+
contextFeatures: task.context || {},
|
|
191
|
+
previousAttempts: task.previousAttempts || 0,
|
|
192
|
+
availableResources: 0.8, // TODO: get from system
|
|
193
|
+
timeConstraint: task.timeout
|
|
194
|
+
};
|
|
195
|
+
const action = {
|
|
196
|
+
strategy: result.strategy || 'default',
|
|
197
|
+
toolsUsed: result.toolsUsed || [],
|
|
198
|
+
parallelization: result.parallelization || 0.5,
|
|
199
|
+
retryPolicy: result.retryPolicy || 'exponential',
|
|
200
|
+
resourceAllocation: result.resourceAllocation || 0.5
|
|
201
|
+
};
|
|
202
|
+
// Next state (after execution)
|
|
203
|
+
const nextState = {
|
|
204
|
+
...state,
|
|
205
|
+
previousAttempts: state.previousAttempts + 1,
|
|
206
|
+
availableResources: state.availableResources * 0.9 // resource consumption
|
|
207
|
+
};
|
|
208
|
+
return {
|
|
209
|
+
taskId: task.id || (0, uuid_1.v4)(),
|
|
210
|
+
taskType: task.type,
|
|
211
|
+
state,
|
|
212
|
+
action,
|
|
213
|
+
reward: 0, // will be calculated
|
|
214
|
+
nextState,
|
|
215
|
+
timestamp: new Date(),
|
|
216
|
+
agentId: this.agentId
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Calculate reward from execution result and feedback
|
|
221
|
+
*/
|
|
222
|
+
calculateReward(result, feedback) {
|
|
223
|
+
let reward = 0;
|
|
224
|
+
// Success/failure (primary component)
|
|
225
|
+
reward += result.success ? 1.0 : -1.0;
|
|
226
|
+
// Execution time (faster is better)
|
|
227
|
+
if (result.executionTime) {
|
|
228
|
+
const timeFactor = Math.max(0, 1 - result.executionTime / 30000); // 30 sec baseline
|
|
229
|
+
reward += timeFactor * 0.5;
|
|
230
|
+
}
|
|
231
|
+
// Error rate penalty
|
|
232
|
+
if (result.errors) {
|
|
233
|
+
reward -= result.errors.length * 0.1;
|
|
234
|
+
}
|
|
235
|
+
// User feedback
|
|
236
|
+
if (feedback) {
|
|
237
|
+
reward += (feedback.rating - 0.5) * 2; // -1 to +1
|
|
238
|
+
reward -= feedback.issues.length * 0.2;
|
|
239
|
+
}
|
|
240
|
+
// Coverage/quality bonus (for test generation)
|
|
241
|
+
if (result.coverage) {
|
|
242
|
+
reward += (result.coverage - 0.8) * 2; // bonus above 80%
|
|
243
|
+
}
|
|
244
|
+
return Math.max(-2, Math.min(2, reward)); // clamp to [-2, 2]
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Update Q-table with new experience (Q-learning algorithm)
|
|
248
|
+
*/
|
|
249
|
+
async updateQTable(experience) {
|
|
250
|
+
const stateKey = this.encodeState(experience.state);
|
|
251
|
+
const actionKey = this.encodeAction(experience.action);
|
|
252
|
+
const nextStateKey = this.encodeState(experience.nextState);
|
|
253
|
+
// Get or create state-action map
|
|
254
|
+
if (!this.qTable.has(stateKey)) {
|
|
255
|
+
this.qTable.set(stateKey, new Map());
|
|
256
|
+
}
|
|
257
|
+
const stateActions = this.qTable.get(stateKey);
|
|
258
|
+
// Get current Q-value
|
|
259
|
+
const currentQ = stateActions.get(actionKey) || 0;
|
|
260
|
+
// Get max Q-value for next state
|
|
261
|
+
const nextStateActions = this.qTable.get(nextStateKey) || new Map();
|
|
262
|
+
const maxNextQ = nextStateActions.size > 0
|
|
263
|
+
? Math.max(...Array.from(nextStateActions.values()))
|
|
264
|
+
: 0;
|
|
265
|
+
// Q-learning update: Q(s,a) = Q(s,a) + α * [r + γ * max(Q(s',a')) - Q(s,a)]
|
|
266
|
+
const newQ = currentQ + this.config.learningRate * (experience.reward + this.config.discountFactor * maxNextQ - currentQ);
|
|
267
|
+
stateActions.set(actionKey, newQ);
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Perform batch update on experiences
|
|
271
|
+
*/
|
|
272
|
+
async performBatchUpdate() {
|
|
273
|
+
if (this.experiences.length < this.config.batchSize) {
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
// Sample recent experiences
|
|
277
|
+
const batch = this.experiences.slice(-this.config.batchSize);
|
|
278
|
+
// Re-train on batch
|
|
279
|
+
for (const experience of batch) {
|
|
280
|
+
await this.updateQTable(experience);
|
|
281
|
+
}
|
|
282
|
+
this.logger.info(`Performed batch update on ${batch.length} experiences`);
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Update learned patterns
|
|
286
|
+
*/
|
|
287
|
+
async updatePatterns(experience) {
|
|
288
|
+
const patternKey = `${experience.taskType}:${experience.action.strategy}`;
|
|
289
|
+
if (this.patterns.has(patternKey)) {
|
|
290
|
+
const pattern = this.patterns.get(patternKey);
|
|
291
|
+
pattern.usageCount++;
|
|
292
|
+
pattern.lastUsedAt = new Date();
|
|
293
|
+
// Update success rate
|
|
294
|
+
if (experience.reward > 0) {
|
|
295
|
+
pattern.successRate = (pattern.successRate * (pattern.usageCount - 1) + 1) / pattern.usageCount;
|
|
296
|
+
}
|
|
297
|
+
else {
|
|
298
|
+
pattern.successRate = (pattern.successRate * (pattern.usageCount - 1)) / pattern.usageCount;
|
|
299
|
+
}
|
|
300
|
+
// Update confidence
|
|
301
|
+
pattern.confidence = Math.min(0.95, pattern.confidence + 0.01);
|
|
302
|
+
}
|
|
303
|
+
else {
|
|
304
|
+
// Create new pattern
|
|
305
|
+
const pattern = {
|
|
306
|
+
id: (0, uuid_1.v4)(),
|
|
307
|
+
pattern: patternKey,
|
|
308
|
+
confidence: 0.5,
|
|
309
|
+
successRate: experience.reward > 0 ? 1.0 : 0.0,
|
|
310
|
+
usageCount: 1,
|
|
311
|
+
contexts: [experience.taskType],
|
|
312
|
+
createdAt: new Date(),
|
|
313
|
+
lastUsedAt: new Date()
|
|
314
|
+
};
|
|
315
|
+
this.patterns.set(patternKey, pattern);
|
|
316
|
+
// Emit pattern discovered event
|
|
317
|
+
await this.emitLearningEvent('pattern_discovered', pattern);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
/**
|
|
321
|
+
* Detect failure patterns
|
|
322
|
+
*/
|
|
323
|
+
async detectFailurePattern(experience) {
|
|
324
|
+
const patternKey = `${experience.taskType}:failure`;
|
|
325
|
+
if (this.failurePatterns.has(patternKey)) {
|
|
326
|
+
const pattern = this.failurePatterns.get(patternKey);
|
|
327
|
+
pattern.frequency++;
|
|
328
|
+
pattern.confidence = Math.min(0.95, pattern.frequency / this.experiences.length);
|
|
329
|
+
}
|
|
330
|
+
else {
|
|
331
|
+
const pattern = {
|
|
332
|
+
id: (0, uuid_1.v4)(),
|
|
333
|
+
pattern: patternKey,
|
|
334
|
+
frequency: 1,
|
|
335
|
+
contexts: [experience.taskType],
|
|
336
|
+
confidence: 0.1,
|
|
337
|
+
identifiedAt: new Date()
|
|
338
|
+
};
|
|
339
|
+
this.failurePatterns.set(patternKey, pattern);
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* Calculate improvement over time
|
|
344
|
+
*/
|
|
345
|
+
async calculateImprovement() {
|
|
346
|
+
if (this.experiences.length < 10) {
|
|
347
|
+
return this.createOutcome(false, 0, 0);
|
|
348
|
+
}
|
|
349
|
+
// Compare recent performance vs baseline
|
|
350
|
+
const recentExperiences = this.experiences.slice(-20);
|
|
351
|
+
const baselineExperiences = this.experiences.slice(0, 20);
|
|
352
|
+
const recentAvgReward = recentExperiences.reduce((sum, e) => sum + e.reward, 0) / recentExperiences.length;
|
|
353
|
+
const baselineAvgReward = baselineExperiences.reduce((sum, e) => sum + e.reward, 0) / baselineExperiences.length;
|
|
354
|
+
const improvementRate = baselineAvgReward !== 0
|
|
355
|
+
? ((recentAvgReward - baselineAvgReward) / Math.abs(baselineAvgReward)) * 100
|
|
356
|
+
: 0;
|
|
357
|
+
return this.createOutcome(improvementRate > 0, baselineAvgReward, recentAvgReward, improvementRate);
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Create learning outcome
|
|
361
|
+
*/
|
|
362
|
+
createOutcome(improved, previous, current, rate = 0) {
|
|
363
|
+
return {
|
|
364
|
+
improved,
|
|
365
|
+
previousPerformance: previous,
|
|
366
|
+
newPerformance: current,
|
|
367
|
+
improvementRate: rate,
|
|
368
|
+
confidence: Math.min(0.95, this.experiences.length / 100),
|
|
369
|
+
patterns: this.getPatterns().slice(0, 5),
|
|
370
|
+
timestamp: new Date()
|
|
371
|
+
};
|
|
372
|
+
}
|
|
373
|
+
/**
|
|
374
|
+
* Estimate task complexity
|
|
375
|
+
*/
|
|
376
|
+
estimateComplexity(task) {
|
|
377
|
+
let complexity = 0.5; // baseline
|
|
378
|
+
if (task.requirements?.capabilities) {
|
|
379
|
+
complexity += task.requirements.capabilities.length * 0.1;
|
|
380
|
+
}
|
|
381
|
+
if (task.previousAttempts) {
|
|
382
|
+
complexity += task.previousAttempts * 0.1;
|
|
383
|
+
}
|
|
384
|
+
return Math.min(1.0, complexity);
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Convert Q-value to confidence score
|
|
388
|
+
*/
|
|
389
|
+
valueToConfidence(value) {
|
|
390
|
+
return Math.max(0, Math.min(1, (value + 2) / 4)); // map [-2, 2] to [0, 1]
|
|
391
|
+
}
|
|
392
|
+
/**
|
|
393
|
+
* Decay exploration rate
|
|
394
|
+
*/
|
|
395
|
+
decayExploration() {
|
|
396
|
+
this.config.explorationRate = Math.max(this.config.minExplorationRate, this.config.explorationRate * this.config.explorationDecay);
|
|
397
|
+
}
|
|
398
|
+
/**
|
|
399
|
+
* Save learning state to memory
|
|
400
|
+
*/
|
|
401
|
+
async saveState() {
|
|
402
|
+
const state = {
|
|
403
|
+
agentId: this.agentId,
|
|
404
|
+
qTable: this.serializeQTable(),
|
|
405
|
+
experiences: this.experiences.slice(-1000), // keep last 1000
|
|
406
|
+
patterns: this.getPatterns(),
|
|
407
|
+
config: this.config,
|
|
408
|
+
performance: await this.getCurrentPerformance(),
|
|
409
|
+
version: '1.0.0',
|
|
410
|
+
lastUpdated: new Date(),
|
|
411
|
+
size: this.calculateStateSize()
|
|
412
|
+
};
|
|
413
|
+
// Check size limit
|
|
414
|
+
if (state.size > this.config.maxMemorySize) {
|
|
415
|
+
this.logger.warn(`Learning state exceeds max size (${state.size} bytes), pruning...`);
|
|
416
|
+
state.experiences = state.experiences.slice(-500);
|
|
417
|
+
state.size = this.calculateStateSize();
|
|
418
|
+
}
|
|
419
|
+
await this.memoryStore.store(`phase2/learning/${this.agentId}/state`, state, { partition: 'learning' });
|
|
420
|
+
this.logger.info(`Saved learning state (${state.size} bytes, ${state.experiences.length} experiences)`);
|
|
421
|
+
}
|
|
422
|
+
/**
|
|
423
|
+
* Load learning state from memory
|
|
424
|
+
*/
|
|
425
|
+
async loadState() {
|
|
426
|
+
try {
|
|
427
|
+
const state = await this.memoryStore.retrieve(`phase2/learning/${this.agentId}/state`, { partition: 'learning' });
|
|
428
|
+
if (state) {
|
|
429
|
+
this.deserializeQTable(state.qTable);
|
|
430
|
+
this.experiences = state.experiences;
|
|
431
|
+
this.patterns = new Map(state.patterns.map(p => [p.pattern, p]));
|
|
432
|
+
this.taskCount = state.experiences.length;
|
|
433
|
+
this.logger.info(`Loaded learning state: ${state.experiences.length} experiences`);
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
catch (error) {
|
|
437
|
+
this.logger.warn('No previous learning state found, starting fresh');
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
/**
|
|
441
|
+
* Serialize Q-table for storage
|
|
442
|
+
*/
|
|
443
|
+
serializeQTable() {
|
|
444
|
+
const serialized = {};
|
|
445
|
+
for (const [state, actions] of this.qTable.entries()) {
|
|
446
|
+
serialized[state] = Object.fromEntries(actions.entries());
|
|
447
|
+
}
|
|
448
|
+
return serialized;
|
|
449
|
+
}
|
|
450
|
+
/**
|
|
451
|
+
* Deserialize Q-table from storage
|
|
452
|
+
*/
|
|
453
|
+
deserializeQTable(data) {
|
|
454
|
+
this.qTable.clear();
|
|
455
|
+
for (const [state, actions] of Object.entries(data)) {
|
|
456
|
+
this.qTable.set(state, new Map(Object.entries(actions)));
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
/**
|
|
460
|
+
* Calculate state size in bytes
|
|
461
|
+
*/
|
|
462
|
+
calculateStateSize() {
|
|
463
|
+
return JSON.stringify({
|
|
464
|
+
qTable: this.serializeQTable(),
|
|
465
|
+
experiences: this.experiences,
|
|
466
|
+
patterns: this.getPatterns()
|
|
467
|
+
}).length;
|
|
468
|
+
}
|
|
469
|
+
/**
|
|
470
|
+
* Get current performance metrics
|
|
471
|
+
*/
|
|
472
|
+
async getCurrentPerformance() {
|
|
473
|
+
const recentExperiences = this.experiences.slice(-100);
|
|
474
|
+
if (recentExperiences.length === 0) {
|
|
475
|
+
return {
|
|
476
|
+
avgReward: 0,
|
|
477
|
+
successRate: 0,
|
|
478
|
+
totalExperiences: 0
|
|
479
|
+
};
|
|
480
|
+
}
|
|
481
|
+
return {
|
|
482
|
+
avgReward: recentExperiences.reduce((sum, e) => sum + e.reward, 0) / recentExperiences.length,
|
|
483
|
+
successRate: recentExperiences.filter(e => e.reward > 0).length / recentExperiences.length,
|
|
484
|
+
totalExperiences: this.experiences.length
|
|
485
|
+
};
|
|
486
|
+
}
|
|
487
|
+
/**
|
|
488
|
+
* Emit learning event
|
|
489
|
+
*/
|
|
490
|
+
async emitLearningEvent(type, data) {
|
|
491
|
+
const event = {
|
|
492
|
+
id: (0, uuid_1.v4)(),
|
|
493
|
+
type: type,
|
|
494
|
+
agentId: this.agentId,
|
|
495
|
+
data,
|
|
496
|
+
timestamp: new Date()
|
|
497
|
+
};
|
|
498
|
+
await this.memoryStore.storeEvent({
|
|
499
|
+
type: `learning:${type}`,
|
|
500
|
+
payload: event,
|
|
501
|
+
source: this.agentId,
|
|
502
|
+
timestamp: Date.now()
|
|
503
|
+
});
|
|
504
|
+
}
|
|
505
|
+
/**
|
|
506
|
+
* Get current exploration rate
|
|
507
|
+
*/
|
|
508
|
+
getExplorationRate() {
|
|
509
|
+
return this.config.explorationRate;
|
|
510
|
+
}
|
|
511
|
+
/**
|
|
512
|
+
* Get total experiences
|
|
513
|
+
*/
|
|
514
|
+
getTotalExperiences() {
|
|
515
|
+
return this.experiences.length;
|
|
516
|
+
}
|
|
517
|
+
/**
|
|
518
|
+
* Enable/disable learning
|
|
519
|
+
*/
|
|
520
|
+
setEnabled(enabled) {
|
|
521
|
+
this.config.enabled = enabled;
|
|
522
|
+
}
|
|
523
|
+
/**
|
|
524
|
+
* Check if learning is enabled
|
|
525
|
+
*/
|
|
526
|
+
isEnabled() {
|
|
527
|
+
return this.config.enabled;
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
exports.LearningEngine = LearningEngine;
|
|
531
|
+
//# sourceMappingURL=LearningEngine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LearningEngine.js","sourceRoot":"","sources":["../../src/learning/LearningEngine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PerformanceTracker - Phase 2 (Milestone 2.2)
|
|
3
|
+
*
|
|
4
|
+
* Tracks agent performance metrics over time and calculates improvement rates.
|
|
5
|
+
* Target: 20% performance improvement over 30 days.
|
|
6
|
+
*/
|
|
7
|
+
import { SwarmMemoryManager } from '../core/memory/SwarmMemoryManager';
|
|
8
|
+
import { PerformanceMetrics, ImprovementData } from './types';
|
|
9
|
+
/**
|
|
10
|
+
* PerformanceTracker - Track and analyze agent performance over time
|
|
11
|
+
*/
|
|
12
|
+
export declare class PerformanceTracker {
|
|
13
|
+
private readonly logger;
|
|
14
|
+
private readonly memoryStore;
|
|
15
|
+
private readonly agentId;
|
|
16
|
+
private snapshots;
|
|
17
|
+
private baselineMetrics?;
|
|
18
|
+
private readonly TARGET_IMPROVEMENT;
|
|
19
|
+
private readonly TARGET_PERIOD_DAYS;
|
|
20
|
+
constructor(agentId: string, memoryStore: SwarmMemoryManager);
|
|
21
|
+
/**
|
|
22
|
+
* Initialize the performance tracker
|
|
23
|
+
*/
|
|
24
|
+
initialize(): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* Record current performance snapshot
|
|
27
|
+
*/
|
|
28
|
+
recordSnapshot(metrics: Omit<PerformanceMetrics, 'agentId' | 'period'>): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Calculate current improvement rate vs baseline
|
|
31
|
+
*/
|
|
32
|
+
calculateImprovement(): Promise<ImprovementData>;
|
|
33
|
+
/**
|
|
34
|
+
* Get improvement trend over time
|
|
35
|
+
*/
|
|
36
|
+
getImprovementTrend(days?: number): Promise<{
|
|
37
|
+
timeline: {
|
|
38
|
+
date: Date;
|
|
39
|
+
improvementRate: number;
|
|
40
|
+
}[];
|
|
41
|
+
currentRate: number;
|
|
42
|
+
projected30Day: number;
|
|
43
|
+
}>;
|
|
44
|
+
/**
|
|
45
|
+
* Get performance metrics for a specific time period
|
|
46
|
+
*/
|
|
47
|
+
getMetricsForPeriod(startDate: Date, endDate: Date): Promise<PerformanceMetrics>;
|
|
48
|
+
/**
|
|
49
|
+
* Generate performance report
|
|
50
|
+
*/
|
|
51
|
+
generateReport(): Promise<{
|
|
52
|
+
summary: string;
|
|
53
|
+
improvement: ImprovementData;
|
|
54
|
+
trends: PerformanceMetrics['trends'];
|
|
55
|
+
recommendations: string[];
|
|
56
|
+
}>;
|
|
57
|
+
/**
|
|
58
|
+
* Calculate composite performance score
|
|
59
|
+
*/
|
|
60
|
+
private calculatePerformanceScore;
|
|
61
|
+
/**
|
|
62
|
+
* Aggregate metrics from multiple snapshots
|
|
63
|
+
*/
|
|
64
|
+
private aggregateMetrics;
|
|
65
|
+
/**
|
|
66
|
+
* Calculate trends from snapshots
|
|
67
|
+
*/
|
|
68
|
+
private calculateTrends;
|
|
69
|
+
/**
|
|
70
|
+
* Project future improvement based on current trend
|
|
71
|
+
*/
|
|
72
|
+
private projectImprovement;
|
|
73
|
+
/**
|
|
74
|
+
* Generate summary text
|
|
75
|
+
*/
|
|
76
|
+
private generateSummary;
|
|
77
|
+
/**
|
|
78
|
+
* Generate recommendations based on performance
|
|
79
|
+
*/
|
|
80
|
+
private generateRecommendations;
|
|
81
|
+
/**
|
|
82
|
+
* Get current metrics (most recent snapshot)
|
|
83
|
+
*/
|
|
84
|
+
private getCurrentMetrics;
|
|
85
|
+
/**
|
|
86
|
+
* Get days elapsed since baseline
|
|
87
|
+
*/
|
|
88
|
+
private getDaysElapsed;
|
|
89
|
+
/**
|
|
90
|
+
* Get last snapshot timestamp
|
|
91
|
+
*/
|
|
92
|
+
private getLastSnapshotTime;
|
|
93
|
+
/**
|
|
94
|
+
* Store snapshot in memory
|
|
95
|
+
*/
|
|
96
|
+
private storeSnapshot;
|
|
97
|
+
/**
|
|
98
|
+
* Store baseline metrics
|
|
99
|
+
*/
|
|
100
|
+
private storeBaseline;
|
|
101
|
+
/**
|
|
102
|
+
* Load snapshots from memory
|
|
103
|
+
*/
|
|
104
|
+
private loadSnapshots;
|
|
105
|
+
/**
|
|
106
|
+
* Prune old snapshots
|
|
107
|
+
*/
|
|
108
|
+
private pruneOldSnapshots;
|
|
109
|
+
/**
|
|
110
|
+
* Get total snapshots count
|
|
111
|
+
*/
|
|
112
|
+
getSnapshotCount(): number;
|
|
113
|
+
/**
|
|
114
|
+
* Get baseline metrics
|
|
115
|
+
*/
|
|
116
|
+
getBaseline(): PerformanceMetrics | undefined;
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=PerformanceTracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PerformanceTracker.d.ts","sourceRoot":"","sources":["../../src/learning/PerformanceTracker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAU9D;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,SAAS,CAAwB;IACzC,OAAO,CAAC,eAAe,CAAC,CAAqB;IAG7C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAQ;IAC3C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAM;gBAE7B,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,kBAAkB;IAO5D;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAcjC;;OAEG;IACG,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,kBAAkB,EAAE,SAAS,GAAG,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAgC5F;;OAEG;IACG,oBAAoB,IAAI,OAAO,CAAC,eAAe,CAAC;IAkCtD;;OAEG;IACG,mBAAmB,CAAC,IAAI,GAAE,MAAW,GAAG,OAAO,CAAC;QACpD,QAAQ,EAAE;YAAE,IAAI,EAAE,IAAI,CAAC;YAAC,eAAe,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QACpD,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IA+BF;;OAEG;IACG,mBAAmB,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAoBtF;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC;QAC9B,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,eAAe,CAAC;QAC7B,MAAM,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QACrC,eAAe,EAAE,MAAM,EAAE,CAAC;KAC3B,CAAC;IAeF;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAyBjC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAuBxB;;OAEG;IACH,OAAO,CAAC,eAAe;IA4BvB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA2B1B;;OAEG;IACH,OAAO,CAAC,eAAe;IAgBvB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAsC/B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAOzB;;OAEG;IACH,OAAO,CAAC,cAAc;IAWtB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAO3B;;OAEG;YACW,aAAa;IAK3B;;OAEG;YACW,aAAa;IAQ3B;;OAEG;YACW,aAAa;IA2B3B;;OAEG;YACW,iBAAiB;IAa/B;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAI1B;;OAEG;IACH,WAAW,IAAI,kBAAkB,GAAG,SAAS;CAG9C"}
|