agentic-qe 2.1.2 → 2.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (190) hide show
  1. package/.claude/skills/agentic-quality-engineering/SKILL.md +4 -4
  2. package/.claude/skills/cicd-pipeline-qe-orchestrator/README.md +14 -11
  3. package/.claude/skills/skills-manifest.json +2 -2
  4. package/CHANGELOG.md +138 -0
  5. package/README.md +92 -214
  6. package/dist/agents/BaseAgent.d.ts +5 -1
  7. package/dist/agents/BaseAgent.d.ts.map +1 -1
  8. package/dist/agents/BaseAgent.js +32 -17
  9. package/dist/agents/BaseAgent.js.map +1 -1
  10. package/dist/agents/index.d.ts.map +1 -1
  11. package/dist/agents/index.js +5 -1
  12. package/dist/agents/index.js.map +1 -1
  13. package/dist/cli/commands/improve/index.d.ts +8 -1
  14. package/dist/cli/commands/improve/index.d.ts.map +1 -1
  15. package/dist/cli/commands/improve/index.js +18 -16
  16. package/dist/cli/commands/improve/index.js.map +1 -1
  17. package/dist/cli/commands/learn/index.d.ts +10 -2
  18. package/dist/cli/commands/learn/index.d.ts.map +1 -1
  19. package/dist/cli/commands/learn/index.js +99 -63
  20. package/dist/cli/commands/learn/index.js.map +1 -1
  21. package/dist/cli/commands/patterns/index.d.ts +8 -1
  22. package/dist/cli/commands/patterns/index.d.ts.map +1 -1
  23. package/dist/cli/commands/patterns/index.js +79 -45
  24. package/dist/cli/commands/patterns/index.js.map +1 -1
  25. package/dist/cli/commands/routing/index.d.ts +5 -0
  26. package/dist/cli/commands/routing/index.d.ts.map +1 -1
  27. package/dist/cli/commands/routing/index.js +11 -10
  28. package/dist/cli/commands/routing/index.js.map +1 -1
  29. package/dist/cli/init/agents.d.ts +1 -1
  30. package/dist/cli/init/agents.js +2 -2
  31. package/dist/cli/init/database-init.d.ts +7 -0
  32. package/dist/cli/init/database-init.d.ts.map +1 -1
  33. package/dist/cli/init/database-init.js +29 -48
  34. package/dist/cli/init/database-init.js.map +1 -1
  35. package/dist/core/di/AgentDependencies.d.ts +127 -0
  36. package/dist/core/di/AgentDependencies.d.ts.map +1 -0
  37. package/dist/core/di/AgentDependencies.js +251 -0
  38. package/dist/core/di/AgentDependencies.js.map +1 -0
  39. package/dist/core/di/DIContainer.d.ts +149 -0
  40. package/dist/core/di/DIContainer.d.ts.map +1 -0
  41. package/dist/core/di/DIContainer.js +333 -0
  42. package/dist/core/di/DIContainer.js.map +1 -0
  43. package/dist/core/di/index.d.ts +11 -0
  44. package/dist/core/di/index.d.ts.map +1 -0
  45. package/dist/core/di/index.js +22 -0
  46. package/dist/core/di/index.js.map +1 -0
  47. package/dist/core/index.d.ts +1 -0
  48. package/dist/core/index.d.ts.map +1 -1
  49. package/dist/core/index.js +11 -1
  50. package/dist/core/index.js.map +1 -1
  51. package/dist/core/memory/HNSWVectorMemory.d.ts +261 -0
  52. package/dist/core/memory/HNSWVectorMemory.d.ts.map +1 -0
  53. package/dist/core/memory/HNSWVectorMemory.js +647 -0
  54. package/dist/core/memory/HNSWVectorMemory.js.map +1 -0
  55. package/dist/core/memory/SwarmMemoryManager.d.ts +7 -0
  56. package/dist/core/memory/SwarmMemoryManager.d.ts.map +1 -1
  57. package/dist/core/memory/SwarmMemoryManager.js +9 -0
  58. package/dist/core/memory/SwarmMemoryManager.js.map +1 -1
  59. package/dist/core/memory/index.d.ts +2 -0
  60. package/dist/core/memory/index.d.ts.map +1 -1
  61. package/dist/core/memory/index.js +11 -1
  62. package/dist/core/memory/index.js.map +1 -1
  63. package/dist/learning/ExperienceSharingProtocol.d.ts +243 -0
  64. package/dist/learning/ExperienceSharingProtocol.d.ts.map +1 -0
  65. package/dist/learning/ExperienceSharingProtocol.js +538 -0
  66. package/dist/learning/ExperienceSharingProtocol.js.map +1 -0
  67. package/dist/learning/ExplainableLearning.d.ts +191 -0
  68. package/dist/learning/ExplainableLearning.d.ts.map +1 -0
  69. package/dist/learning/ExplainableLearning.js +441 -0
  70. package/dist/learning/ExplainableLearning.js.map +1 -0
  71. package/dist/learning/GossipPatternSharingProtocol.d.ts +228 -0
  72. package/dist/learning/GossipPatternSharingProtocol.d.ts.map +1 -0
  73. package/dist/learning/GossipPatternSharingProtocol.js +590 -0
  74. package/dist/learning/GossipPatternSharingProtocol.js.map +1 -0
  75. package/dist/learning/LearningEngine.d.ts +104 -4
  76. package/dist/learning/LearningEngine.d.ts.map +1 -1
  77. package/dist/learning/LearningEngine.js +350 -16
  78. package/dist/learning/LearningEngine.js.map +1 -1
  79. package/dist/learning/PerformanceOptimizer.d.ts +268 -0
  80. package/dist/learning/PerformanceOptimizer.d.ts.map +1 -0
  81. package/dist/learning/PerformanceOptimizer.js +552 -0
  82. package/dist/learning/PerformanceOptimizer.js.map +1 -0
  83. package/dist/learning/PrivacyManager.d.ts +197 -0
  84. package/dist/learning/PrivacyManager.d.ts.map +1 -0
  85. package/dist/learning/PrivacyManager.js +551 -0
  86. package/dist/learning/PrivacyManager.js.map +1 -0
  87. package/dist/learning/QLearning.d.ts +38 -125
  88. package/dist/learning/QLearning.d.ts.map +1 -1
  89. package/dist/learning/QLearning.js +46 -267
  90. package/dist/learning/QLearning.js.map +1 -1
  91. package/dist/learning/QLearningLegacy.d.ts +154 -0
  92. package/dist/learning/QLearningLegacy.d.ts.map +1 -0
  93. package/dist/learning/QLearningLegacy.js +337 -0
  94. package/dist/learning/QLearningLegacy.js.map +1 -0
  95. package/dist/learning/TransferLearningManager.d.ts +212 -0
  96. package/dist/learning/TransferLearningManager.d.ts.map +1 -0
  97. package/dist/learning/TransferLearningManager.js +497 -0
  98. package/dist/learning/TransferLearningManager.js.map +1 -0
  99. package/dist/learning/algorithms/AbstractRLLearner.d.ts +162 -0
  100. package/dist/learning/algorithms/AbstractRLLearner.d.ts.map +1 -0
  101. package/dist/learning/algorithms/AbstractRLLearner.js +300 -0
  102. package/dist/learning/algorithms/AbstractRLLearner.js.map +1 -0
  103. package/dist/learning/algorithms/ActorCriticLearner.d.ts +201 -0
  104. package/dist/learning/algorithms/ActorCriticLearner.d.ts.map +1 -0
  105. package/dist/learning/algorithms/ActorCriticLearner.js +447 -0
  106. package/dist/learning/algorithms/ActorCriticLearner.js.map +1 -0
  107. package/dist/learning/algorithms/MAMLMetaLearner.d.ts +218 -0
  108. package/dist/learning/algorithms/MAMLMetaLearner.d.ts.map +1 -0
  109. package/dist/learning/algorithms/MAMLMetaLearner.js +532 -0
  110. package/dist/learning/algorithms/MAMLMetaLearner.js.map +1 -0
  111. package/dist/learning/algorithms/PPOLearner.d.ts +207 -0
  112. package/dist/learning/algorithms/PPOLearner.d.ts.map +1 -0
  113. package/dist/learning/algorithms/PPOLearner.js +490 -0
  114. package/dist/learning/algorithms/PPOLearner.js.map +1 -0
  115. package/dist/learning/algorithms/QLearning.d.ts +68 -0
  116. package/dist/learning/algorithms/QLearning.d.ts.map +1 -0
  117. package/dist/learning/algorithms/QLearning.js +116 -0
  118. package/dist/learning/algorithms/QLearning.js.map +1 -0
  119. package/dist/learning/algorithms/SARSALearner.d.ts +107 -0
  120. package/dist/learning/algorithms/SARSALearner.d.ts.map +1 -0
  121. package/dist/learning/algorithms/SARSALearner.js +252 -0
  122. package/dist/learning/algorithms/SARSALearner.js.map +1 -0
  123. package/dist/learning/algorithms/index.d.ts +32 -0
  124. package/dist/learning/algorithms/index.d.ts.map +1 -0
  125. package/dist/learning/algorithms/index.js +50 -0
  126. package/dist/learning/algorithms/index.js.map +1 -0
  127. package/dist/learning/index.d.ts +11 -0
  128. package/dist/learning/index.d.ts.map +1 -1
  129. package/dist/learning/index.js +31 -1
  130. package/dist/learning/index.js.map +1 -1
  131. package/dist/learning/types.d.ts +2 -0
  132. package/dist/learning/types.d.ts.map +1 -1
  133. package/dist/mcp/server-instructions.d.ts +1 -1
  134. package/dist/mcp/server-instructions.js +1 -1
  135. package/dist/memory/DistributedPatternLibrary.d.ts +159 -0
  136. package/dist/memory/DistributedPatternLibrary.d.ts.map +1 -0
  137. package/dist/memory/DistributedPatternLibrary.js +370 -0
  138. package/dist/memory/DistributedPatternLibrary.js.map +1 -0
  139. package/dist/memory/PatternQualityScorer.d.ts +169 -0
  140. package/dist/memory/PatternQualityScorer.d.ts.map +1 -0
  141. package/dist/memory/PatternQualityScorer.js +327 -0
  142. package/dist/memory/PatternQualityScorer.js.map +1 -0
  143. package/dist/memory/PatternReplicationService.d.ts +187 -0
  144. package/dist/memory/PatternReplicationService.d.ts.map +1 -0
  145. package/dist/memory/PatternReplicationService.js +392 -0
  146. package/dist/memory/PatternReplicationService.js.map +1 -0
  147. package/dist/providers/ClaudeProvider.d.ts +98 -0
  148. package/dist/providers/ClaudeProvider.d.ts.map +1 -0
  149. package/dist/providers/ClaudeProvider.js +418 -0
  150. package/dist/providers/ClaudeProvider.js.map +1 -0
  151. package/dist/providers/HybridRouter.d.ts +217 -0
  152. package/dist/providers/HybridRouter.d.ts.map +1 -0
  153. package/dist/providers/HybridRouter.js +679 -0
  154. package/dist/providers/HybridRouter.js.map +1 -0
  155. package/dist/providers/ILLMProvider.d.ts +287 -0
  156. package/dist/providers/ILLMProvider.d.ts.map +1 -0
  157. package/dist/providers/ILLMProvider.js +33 -0
  158. package/dist/providers/ILLMProvider.js.map +1 -0
  159. package/dist/providers/LLMProviderFactory.d.ts +154 -0
  160. package/dist/providers/LLMProviderFactory.d.ts.map +1 -0
  161. package/dist/providers/LLMProviderFactory.js +426 -0
  162. package/dist/providers/LLMProviderFactory.js.map +1 -0
  163. package/dist/providers/RuvllmProvider.d.ts +107 -0
  164. package/dist/providers/RuvllmProvider.d.ts.map +1 -0
  165. package/dist/providers/RuvllmProvider.js +417 -0
  166. package/dist/providers/RuvllmProvider.js.map +1 -0
  167. package/dist/providers/index.d.ts +32 -0
  168. package/dist/providers/index.d.ts.map +1 -0
  169. package/dist/providers/index.js +75 -0
  170. package/dist/providers/index.js.map +1 -0
  171. package/dist/telemetry/LearningTelemetry.d.ts +190 -0
  172. package/dist/telemetry/LearningTelemetry.d.ts.map +1 -0
  173. package/dist/telemetry/LearningTelemetry.js +403 -0
  174. package/dist/telemetry/LearningTelemetry.js.map +1 -0
  175. package/dist/telemetry/index.d.ts +1 -0
  176. package/dist/telemetry/index.d.ts.map +1 -1
  177. package/dist/telemetry/index.js +20 -2
  178. package/dist/telemetry/index.js.map +1 -1
  179. package/dist/telemetry/instrumentation/agent.d.ts +1 -1
  180. package/dist/telemetry/instrumentation/agent.js +1 -1
  181. package/dist/telemetry/instrumentation/index.d.ts +1 -1
  182. package/dist/telemetry/instrumentation/index.js +1 -1
  183. package/dist/utils/math.d.ts +11 -0
  184. package/dist/utils/math.d.ts.map +1 -0
  185. package/dist/utils/math.js +16 -0
  186. package/dist/utils/math.js.map +1 -0
  187. package/docs/reference/agents.md +1 -1
  188. package/docs/reference/skills.md +3 -3
  189. package/docs/reference/usage.md +4 -4
  190. package/package.json +1 -1
@@ -0,0 +1,497 @@
1
+ "use strict";
2
+ /**
3
+ * TransferLearningManager - Issue #118 Task 2.3
4
+ *
5
+ * Enables knowledge transfer between different QE domains (e.g., unit testing → integration testing).
6
+ * Supports domain similarity calculation, adjustable transfer coefficients, fine-tuning, and metrics tracking.
7
+ *
8
+ * Domain Examples:
9
+ * - Unit testing → Integration testing
10
+ * - API testing → Contract testing
11
+ * - Performance testing → Load testing
12
+ * - Security scanning → Vulnerability detection
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.TransferLearningManager = void 0;
16
+ const Logger_1 = require("../utils/Logger");
17
+ const uuid_1 = require("uuid");
18
+ /**
19
+ * Default transfer configuration
20
+ */
21
+ const DEFAULT_TRANSFER_CONFIG = {
22
+ enabled: true,
23
+ minSimilarity: 0.3,
24
+ defaultTransferCoefficient: 0.5,
25
+ adaptiveCoefficient: true,
26
+ maxTransferExperiences: 100,
27
+ fineTuningEnabled: true,
28
+ fineTuningIterations: 10
29
+ };
30
+ /**
31
+ * Domain feature definitions
32
+ */
33
+ const DOMAIN_FEATURES = {
34
+ 'unit-testing': {
35
+ complexity: 0.3,
36
+ isolation: 0.9,
37
+ stateful: 0.1,
38
+ externalDependencies: 0.1,
39
+ executionTime: 0.1,
40
+ parallelizable: 0.9,
41
+ deterministic: 0.9
42
+ },
43
+ 'integration-testing': {
44
+ complexity: 0.6,
45
+ isolation: 0.4,
46
+ stateful: 0.7,
47
+ externalDependencies: 0.6,
48
+ executionTime: 0.5,
49
+ parallelizable: 0.5,
50
+ deterministic: 0.7
51
+ },
52
+ 'api-testing': {
53
+ complexity: 0.5,
54
+ isolation: 0.5,
55
+ stateful: 0.5,
56
+ externalDependencies: 0.7,
57
+ executionTime: 0.4,
58
+ parallelizable: 0.7,
59
+ deterministic: 0.8
60
+ },
61
+ 'contract-testing': {
62
+ complexity: 0.5,
63
+ isolation: 0.6,
64
+ stateful: 0.4,
65
+ externalDependencies: 0.6,
66
+ executionTime: 0.3,
67
+ parallelizable: 0.8,
68
+ deterministic: 0.9
69
+ },
70
+ 'performance-testing': {
71
+ complexity: 0.7,
72
+ isolation: 0.3,
73
+ stateful: 0.6,
74
+ externalDependencies: 0.8,
75
+ executionTime: 0.8,
76
+ parallelizable: 0.6,
77
+ deterministic: 0.5
78
+ },
79
+ 'load-testing': {
80
+ complexity: 0.8,
81
+ isolation: 0.2,
82
+ stateful: 0.7,
83
+ externalDependencies: 0.9,
84
+ executionTime: 0.9,
85
+ parallelizable: 0.4,
86
+ deterministic: 0.4
87
+ },
88
+ 'security-scanning': {
89
+ complexity: 0.6,
90
+ isolation: 0.5,
91
+ stateful: 0.4,
92
+ externalDependencies: 0.5,
93
+ executionTime: 0.6,
94
+ parallelizable: 0.6,
95
+ deterministic: 0.7
96
+ },
97
+ 'vulnerability-detection': {
98
+ complexity: 0.7,
99
+ isolation: 0.4,
100
+ stateful: 0.5,
101
+ externalDependencies: 0.6,
102
+ executionTime: 0.7,
103
+ parallelizable: 0.5,
104
+ deterministic: 0.6
105
+ },
106
+ 'e2e-testing': {
107
+ complexity: 0.9,
108
+ isolation: 0.1,
109
+ stateful: 0.9,
110
+ externalDependencies: 0.9,
111
+ executionTime: 0.9,
112
+ parallelizable: 0.2,
113
+ deterministic: 0.5
114
+ },
115
+ 'regression-testing': {
116
+ complexity: 0.6,
117
+ isolation: 0.5,
118
+ stateful: 0.6,
119
+ externalDependencies: 0.5,
120
+ executionTime: 0.6,
121
+ parallelizable: 0.6,
122
+ deterministic: 0.8
123
+ }
124
+ };
125
+ /**
126
+ * TransferLearningManager - Manages knowledge transfer between QE domains
127
+ */
128
+ class TransferLearningManager {
129
+ constructor(memoryStore, config = {}) {
130
+ this.logger = Logger_1.Logger.getInstance();
131
+ this.memoryStore = memoryStore;
132
+ this.config = { ...DEFAULT_TRANSFER_CONFIG, ...config };
133
+ this.mappings = new Map();
134
+ this.metrics = new Map();
135
+ }
136
+ /**
137
+ * Initialize the transfer learning manager
138
+ */
139
+ async initialize() {
140
+ this.logger.info('Initializing TransferLearningManager');
141
+ // Load existing mappings from database
142
+ await this.loadMappings();
143
+ // Load existing metrics from database
144
+ await this.loadMetrics();
145
+ this.logger.info(`TransferLearningManager initialized with ${this.mappings.size} mappings`);
146
+ }
147
+ /**
148
+ * Calculate similarity between two QE domains
149
+ * Uses cosine similarity on domain feature vectors
150
+ *
151
+ * @param sourceDomain - Source domain
152
+ * @param targetDomain - Target domain
153
+ * @returns Similarity score (0-1)
154
+ */
155
+ calculateDomainSimilarity(sourceDomain, targetDomain) {
156
+ const sourceFeatures = this.getDomainFeatures(sourceDomain);
157
+ const targetFeatures = this.getDomainFeatures(targetDomain);
158
+ // Calculate cosine similarity
159
+ const dotProduct = this.calculateDotProduct(sourceFeatures, targetFeatures);
160
+ const sourceMagnitude = this.calculateMagnitude(sourceFeatures);
161
+ const targetMagnitude = this.calculateMagnitude(targetFeatures);
162
+ const similarity = dotProduct / (sourceMagnitude * targetMagnitude);
163
+ this.logger.debug(`Domain similarity: ${sourceDomain} → ${targetDomain} = ${similarity.toFixed(3)}`);
164
+ return Math.max(0, Math.min(1, similarity));
165
+ }
166
+ /**
167
+ * Transfer knowledge from source domain to target domain
168
+ *
169
+ * @param sourceDomain - Source domain with existing knowledge
170
+ * @param targetDomain - Target domain to receive knowledge
171
+ * @param sourceExperiences - Experiences from source domain
172
+ * @param transferCoefficient - Optional override for transfer coefficient (0-1)
173
+ * @returns Transfer mapping with results
174
+ */
175
+ async transferKnowledge(sourceDomain, targetDomain, sourceExperiences, transferCoefficient) {
176
+ if (!this.config.enabled) {
177
+ throw new Error('Transfer learning is disabled');
178
+ }
179
+ // Calculate domain similarity
180
+ const similarity = this.calculateDomainSimilarity(sourceDomain, targetDomain);
181
+ if (similarity < this.config.minSimilarity) {
182
+ throw new Error(`Domain similarity too low: ${similarity.toFixed(3)} < ${this.config.minSimilarity}`);
183
+ }
184
+ // Get or create transfer mapping
185
+ let mapping = this.getMapping(sourceDomain, targetDomain);
186
+ if (!mapping) {
187
+ mapping = await this.createMapping(sourceDomain, targetDomain, similarity, transferCoefficient ?? this.config.defaultTransferCoefficient);
188
+ }
189
+ // Limit experiences to transfer
190
+ const experiencesToTransfer = sourceExperiences.slice(0, this.config.maxTransferExperiences);
191
+ // Apply transfer coefficient to adjust experience rewards
192
+ const transferredExperiences = this.applyTransferCoefficient(experiencesToTransfer, mapping.transferCoefficient);
193
+ // Store transferred experiences in target domain namespace
194
+ await this.storeTransferredExperiences(targetDomain, transferredExperiences);
195
+ // Update mapping statistics
196
+ mapping.experiencesTransferred += transferredExperiences.length;
197
+ mapping.lastTransferAt = new Date();
198
+ await this.updateMapping(mapping);
199
+ // Update metrics
200
+ await this.updateTransferMetrics(mapping.id, true);
201
+ this.logger.info(`Transferred ${transferredExperiences.length} experiences from ${sourceDomain} to ${targetDomain} ` +
202
+ `(similarity: ${similarity.toFixed(3)}, coefficient: ${mapping.transferCoefficient.toFixed(3)})`);
203
+ return mapping;
204
+ }
205
+ /**
206
+ * Fine-tune transferred knowledge for target domain
207
+ * Adjusts transferred knowledge based on target domain feedback
208
+ *
209
+ * @param targetDomain - Target domain to fine-tune
210
+ * @param targetExperiences - New experiences from target domain
211
+ * @returns Fine-tuning result
212
+ */
213
+ async fineTuneTransferredKnowledge(targetDomain, targetExperiences) {
214
+ if (!this.config.fineTuningEnabled) {
215
+ throw new Error('Fine-tuning is disabled');
216
+ }
217
+ this.logger.info(`Fine-tuning transferred knowledge for ${targetDomain}`);
218
+ // Calculate initial performance (baseline from transferred experiences)
219
+ const transferredExperiences = await this.getTransferredExperiences(targetDomain);
220
+ const initialPerformance = this.calculateAverageReward(transferredExperiences);
221
+ // Perform iterative fine-tuning
222
+ let currentPerformance = initialPerformance;
223
+ let iterationCount = 0;
224
+ for (let i = 0; i < this.config.fineTuningIterations; i++) {
225
+ // Blend transferred and target experiences
226
+ const blendRatio = (i + 1) / this.config.fineTuningIterations;
227
+ const blendedExperiences = this.blendExperiences(transferredExperiences, targetExperiences, blendRatio);
228
+ // Recalculate performance
229
+ const newPerformance = this.calculateAverageReward(blendedExperiences);
230
+ // Early stopping if performance converges
231
+ if (Math.abs(newPerformance - currentPerformance) < 0.01) {
232
+ break;
233
+ }
234
+ currentPerformance = newPerformance;
235
+ iterationCount++;
236
+ }
237
+ const improvement = ((currentPerformance - initialPerformance) / Math.abs(initialPerformance)) * 100;
238
+ const result = {
239
+ domain: targetDomain,
240
+ initialPerformance,
241
+ finalPerformance: currentPerformance,
242
+ improvement,
243
+ iterations: iterationCount,
244
+ experiencesUsed: transferredExperiences.length + targetExperiences.length
245
+ };
246
+ this.logger.info(`Fine-tuning completed for ${targetDomain}: ` +
247
+ `${initialPerformance.toFixed(3)} → ${currentPerformance.toFixed(3)} ` +
248
+ `(+${improvement.toFixed(1)}%) in ${iterationCount} iterations`);
249
+ return result;
250
+ }
251
+ /**
252
+ * Adjust transfer coefficient based on transfer success
253
+ * Implements adaptive transfer learning
254
+ *
255
+ * @param mappingId - Transfer mapping ID
256
+ * @param success - Whether the transfer was successful
257
+ */
258
+ async adjustTransferCoefficient(mappingId, success) {
259
+ if (!this.config.adaptiveCoefficient) {
260
+ return;
261
+ }
262
+ const mapping = this.mappings.get(mappingId);
263
+ if (!mapping) {
264
+ throw new Error(`Transfer mapping not found: ${mappingId}`);
265
+ }
266
+ // Adaptive adjustment: increase on success, decrease on failure
267
+ const adjustmentRate = 0.05;
268
+ const oldCoefficient = mapping.transferCoefficient;
269
+ if (success) {
270
+ mapping.transferCoefficient = Math.min(1.0, mapping.transferCoefficient + adjustmentRate);
271
+ }
272
+ else {
273
+ mapping.transferCoefficient = Math.max(0.1, mapping.transferCoefficient - adjustmentRate);
274
+ }
275
+ await this.updateMapping(mapping);
276
+ this.logger.debug(`Adjusted transfer coefficient for ${mapping.sourceDomain} → ${mapping.targetDomain}: ` +
277
+ `${oldCoefficient.toFixed(3)} → ${mapping.transferCoefficient.toFixed(3)}`);
278
+ }
279
+ /**
280
+ * Get transfer metrics for a specific mapping
281
+ *
282
+ * @param sourceDomain - Source domain
283
+ * @param targetDomain - Target domain
284
+ * @returns Transfer metrics or undefined
285
+ */
286
+ getTransferMetrics(sourceDomain, targetDomain) {
287
+ const mapping = this.getMapping(sourceDomain, targetDomain);
288
+ if (!mapping) {
289
+ return undefined;
290
+ }
291
+ return this.metrics.get(mapping.id);
292
+ }
293
+ /**
294
+ * Get all transfer mappings
295
+ */
296
+ getAllMappings() {
297
+ return Array.from(this.mappings.values());
298
+ }
299
+ /**
300
+ * Get all transfer metrics
301
+ */
302
+ getAllMetrics() {
303
+ return Array.from(this.metrics.values());
304
+ }
305
+ // ============================================================================
306
+ // Private Helper Methods
307
+ // ============================================================================
308
+ /**
309
+ * Get domain feature vector
310
+ */
311
+ getDomainFeatures(domain) {
312
+ const features = DOMAIN_FEATURES[domain];
313
+ if (!features) {
314
+ throw new Error(`Unknown domain: ${domain}`);
315
+ }
316
+ return { domain, ...features };
317
+ }
318
+ /**
319
+ * Calculate dot product of two feature vectors
320
+ */
321
+ calculateDotProduct(a, b) {
322
+ return (a.complexity * b.complexity +
323
+ a.isolation * b.isolation +
324
+ a.stateful * b.stateful +
325
+ a.externalDependencies * b.externalDependencies +
326
+ a.executionTime * b.executionTime +
327
+ a.parallelizable * b.parallelizable +
328
+ a.deterministic * b.deterministic);
329
+ }
330
+ /**
331
+ * Calculate magnitude of feature vector
332
+ */
333
+ calculateMagnitude(features) {
334
+ return Math.sqrt(features.complexity ** 2 +
335
+ features.isolation ** 2 +
336
+ features.stateful ** 2 +
337
+ features.externalDependencies ** 2 +
338
+ features.executionTime ** 2 +
339
+ features.parallelizable ** 2 +
340
+ features.deterministic ** 2);
341
+ }
342
+ /**
343
+ * Get existing mapping between domains
344
+ */
345
+ getMapping(sourceDomain, targetDomain) {
346
+ for (const mapping of this.mappings.values()) {
347
+ if (mapping.sourceDomain === sourceDomain && mapping.targetDomain === targetDomain) {
348
+ return mapping;
349
+ }
350
+ }
351
+ return undefined;
352
+ }
353
+ /**
354
+ * Create new transfer mapping
355
+ */
356
+ async createMapping(sourceDomain, targetDomain, similarity, transferCoefficient) {
357
+ const mapping = {
358
+ id: (0, uuid_1.v4)(),
359
+ sourceDomain,
360
+ targetDomain,
361
+ similarity,
362
+ transferCoefficient,
363
+ experiencesTransferred: 0,
364
+ successRate: 0,
365
+ createdAt: new Date()
366
+ };
367
+ this.mappings.set(mapping.id, mapping);
368
+ // Persist to database
369
+ await this.memoryStore.store(`transfer-learning/mappings/${mapping.id}`, mapping, { partition: 'learning' });
370
+ // Initialize metrics
371
+ const metrics = {
372
+ mappingId: mapping.id,
373
+ sourceDomain,
374
+ targetDomain,
375
+ totalTransfers: 0,
376
+ successfulTransfers: 0,
377
+ failedTransfers: 0,
378
+ avgPerformanceGain: 0,
379
+ transferEfficiency: 0,
380
+ lastUpdated: new Date()
381
+ };
382
+ this.metrics.set(mapping.id, metrics);
383
+ await this.memoryStore.store(`transfer-learning/metrics/${mapping.id}`, metrics, { partition: 'learning' });
384
+ return mapping;
385
+ }
386
+ /**
387
+ * Update existing transfer mapping
388
+ */
389
+ async updateMapping(mapping) {
390
+ this.mappings.set(mapping.id, mapping);
391
+ await this.memoryStore.store(`transfer-learning/mappings/${mapping.id}`, mapping, { partition: 'learning' });
392
+ }
393
+ /**
394
+ * Apply transfer coefficient to experiences
395
+ */
396
+ applyTransferCoefficient(experiences, coefficient) {
397
+ return experiences.map(exp => ({
398
+ ...exp,
399
+ reward: exp.reward * coefficient
400
+ }));
401
+ }
402
+ /**
403
+ * Store transferred experiences for target domain
404
+ */
405
+ async storeTransferredExperiences(targetDomain, experiences) {
406
+ await this.memoryStore.store(`transfer-learning/experiences/${targetDomain}`, experiences, { partition: 'learning' });
407
+ }
408
+ /**
409
+ * Get transferred experiences for target domain
410
+ */
411
+ async getTransferredExperiences(targetDomain) {
412
+ const experiences = await this.memoryStore.retrieve(`transfer-learning/experiences/${targetDomain}`, { partition: 'learning' });
413
+ return experiences || [];
414
+ }
415
+ /**
416
+ * Calculate average reward from experiences
417
+ */
418
+ calculateAverageReward(experiences) {
419
+ if (experiences.length === 0) {
420
+ return 0;
421
+ }
422
+ const totalReward = experiences.reduce((sum, exp) => sum + exp.reward, 0);
423
+ return totalReward / experiences.length;
424
+ }
425
+ /**
426
+ * Blend transferred and target experiences
427
+ * Higher blendRatio = more weight on target experiences
428
+ */
429
+ blendExperiences(transferredExperiences, targetExperiences, blendRatio) {
430
+ const transferWeight = 1 - blendRatio;
431
+ const targetWeight = blendRatio;
432
+ const weightedTransferred = transferredExperiences.map(exp => ({
433
+ ...exp,
434
+ reward: exp.reward * transferWeight
435
+ }));
436
+ const weightedTarget = targetExperiences.map(exp => ({
437
+ ...exp,
438
+ reward: exp.reward * targetWeight
439
+ }));
440
+ return [...weightedTransferred, ...weightedTarget];
441
+ }
442
+ /**
443
+ * Update transfer metrics
444
+ */
445
+ async updateTransferMetrics(mappingId, success) {
446
+ const metrics = this.metrics.get(mappingId);
447
+ if (!metrics) {
448
+ return;
449
+ }
450
+ metrics.totalTransfers++;
451
+ if (success) {
452
+ metrics.successfulTransfers++;
453
+ }
454
+ else {
455
+ metrics.failedTransfers++;
456
+ }
457
+ metrics.transferEfficiency = metrics.successfulTransfers / metrics.totalTransfers;
458
+ metrics.lastUpdated = new Date();
459
+ this.metrics.set(mappingId, metrics);
460
+ await this.memoryStore.store(`transfer-learning/metrics/${mappingId}`, metrics, { partition: 'learning' });
461
+ }
462
+ /**
463
+ * Load mappings from database
464
+ */
465
+ async loadMappings() {
466
+ try {
467
+ // Query all mappings from memory store
468
+ // Note: This is a simplified version - in production, you'd query by pattern
469
+ this.logger.debug('Loading transfer mappings from database');
470
+ }
471
+ catch (error) {
472
+ this.logger.warn('Failed to load transfer mappings:', error);
473
+ }
474
+ }
475
+ /**
476
+ * Load metrics from database
477
+ */
478
+ async loadMetrics() {
479
+ try {
480
+ // Query all metrics from memory store
481
+ this.logger.debug('Loading transfer metrics from database');
482
+ }
483
+ catch (error) {
484
+ this.logger.warn('Failed to load transfer metrics:', error);
485
+ }
486
+ }
487
+ /**
488
+ * Cleanup resources
489
+ */
490
+ dispose() {
491
+ this.mappings.clear();
492
+ this.metrics.clear();
493
+ this.logger.info('TransferLearningManager disposed');
494
+ }
495
+ }
496
+ exports.TransferLearningManager = TransferLearningManager;
497
+ //# sourceMappingURL=TransferLearningManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TransferLearningManager.js","sourceRoot":"","sources":["../../src/learning/TransferLearningManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,162 @@
1
+ /**
2
+ * AbstractRLLearner - Base class for Reinforcement Learning algorithms
3
+ *
4
+ * Provides common functionality for all RL algorithms including:
5
+ * - Epsilon-greedy exploration policy
6
+ * - State/action encoding
7
+ * - Q-table management
8
+ * - Experience replay integration
9
+ * - Statistics tracking
10
+ */
11
+ import { Logger } from '../../utils/Logger';
12
+ import { TaskState, AgentAction, TaskExperience } from '../types';
13
+ import { ExperienceReplayBuffer } from '../ExperienceReplayBuffer';
14
+ /**
15
+ * Base configuration for RL algorithms
16
+ */
17
+ export interface RLConfig {
18
+ learningRate: number;
19
+ discountFactor: number;
20
+ explorationRate: number;
21
+ explorationDecay: number;
22
+ minExplorationRate: number;
23
+ useExperienceReplay: boolean;
24
+ replayBufferSize: number;
25
+ batchSize: number;
26
+ }
27
+ /**
28
+ * Q-value with metadata
29
+ */
30
+ export interface QValue {
31
+ state: string;
32
+ action: string;
33
+ value: number;
34
+ updateCount: number;
35
+ lastUpdated: number;
36
+ }
37
+ /**
38
+ * Abstract base class for RL algorithms
39
+ */
40
+ export declare abstract class AbstractRLLearner {
41
+ protected readonly logger: Logger;
42
+ protected config: RLConfig;
43
+ protected qTable: Map<string, Map<string, QValue>>;
44
+ protected replayBuffer?: ExperienceReplayBuffer;
45
+ protected stepCount: number;
46
+ protected episodeCount: number;
47
+ constructor(config: RLConfig);
48
+ /**
49
+ * Select action using epsilon-greedy policy
50
+ * With probability ε, select random action (exploration)
51
+ * Otherwise, select action with highest Q-value (exploitation)
52
+ */
53
+ selectAction(state: TaskState, availableActions: AgentAction[]): AgentAction;
54
+ /**
55
+ * Get best action based on current Q-values (greedy policy)
56
+ */
57
+ getBestAction(state: TaskState, availableActions: AgentAction[]): AgentAction;
58
+ /**
59
+ * Abstract method: Update Q-value with algorithm-specific rule
60
+ * Must be implemented by subclasses (Q-Learning, SARSA, etc.)
61
+ */
62
+ abstract update(experience: TaskExperience, nextAction?: AgentAction): void;
63
+ /**
64
+ * Get Q-value for a state-action pair
65
+ */
66
+ getQValue(state: TaskState, action: AgentAction): number;
67
+ /**
68
+ * Set Q-value for a state-action pair (protected for subclass use)
69
+ */
70
+ protected setQValue(stateKey: string, actionKey: string, value: number): void;
71
+ /**
72
+ * Get all Q-values for a state
73
+ */
74
+ getStateValues(state: TaskState): Map<string, number>;
75
+ /**
76
+ * Get value of a state (max Q-value over all actions)
77
+ * V(s) = max_a Q(s,a)
78
+ */
79
+ getStateValue(state: TaskState): number;
80
+ /**
81
+ * Perform batch update using experience replay
82
+ * Samples random batch from replay buffer and updates Q-values
83
+ */
84
+ batchUpdate(): void;
85
+ /**
86
+ * Decay exploration rate (epsilon)
87
+ * Called after each episode to gradually reduce exploration
88
+ */
89
+ decayExploration(): void;
90
+ /**
91
+ * Mark end of episode
92
+ */
93
+ endEpisode(): void;
94
+ /**
95
+ * Encode state to string key for Q-table
96
+ * Creates normalized feature vector and discretizes for generalization
97
+ */
98
+ protected encodeState(state: TaskState): string;
99
+ /**
100
+ * Encode action to string key for Q-table
101
+ */
102
+ protected encodeAction(action: AgentAction): string;
103
+ /**
104
+ * Get current exploration rate (epsilon)
105
+ */
106
+ getExplorationRate(): number;
107
+ /**
108
+ * Get total number of learning steps
109
+ */
110
+ getStepCount(): number;
111
+ /**
112
+ * Get total number of episodes
113
+ */
114
+ getEpisodeCount(): number;
115
+ /**
116
+ * Get Q-table size (number of state-action pairs)
117
+ */
118
+ getTableSize(): number;
119
+ /**
120
+ * Get statistics about learning progress
121
+ */
122
+ getStatistics(): {
123
+ steps: number;
124
+ episodes: number;
125
+ tableSize: number;
126
+ explorationRate: number;
127
+ avgQValue: number;
128
+ maxQValue: number;
129
+ minQValue: number;
130
+ };
131
+ /**
132
+ * Reset Q-table and learning state
133
+ */
134
+ reset(): void;
135
+ /**
136
+ * Get default exploration rate (for reset)
137
+ */
138
+ protected abstract getDefaultExplorationRate(): number;
139
+ /**
140
+ * Export Q-table and state for persistence
141
+ */
142
+ export(): {
143
+ qTable: Record<string, Record<string, QValue>>;
144
+ config: RLConfig;
145
+ stepCount: number;
146
+ episodeCount: number;
147
+ };
148
+ /**
149
+ * Import Q-table and state from persistence
150
+ */
151
+ import(state: {
152
+ qTable: Record<string, Record<string, QValue>>;
153
+ config: RLConfig;
154
+ stepCount: number;
155
+ episodeCount: number;
156
+ }): void;
157
+ /**
158
+ * Get memory usage estimate in bytes
159
+ */
160
+ getMemoryUsage(): number;
161
+ }
162
+ //# sourceMappingURL=AbstractRLLearner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AbstractRLLearner.d.ts","sourceRoot":"","sources":["../../../src/learning/algorithms/AbstractRLLearner.ts"],"names":[],"mappings":"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"}