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,392 @@
1
+ "use strict";
2
+ /**
3
+ * PatternReplicationService - Pattern Replication with Health Monitoring
4
+ *
5
+ * Features:
6
+ * - Multi-agent pattern replication with configurable replication factor
7
+ * - Health monitoring for replication nodes
8
+ * - Conflict resolution for concurrent updates
9
+ * - Automatic failover and recovery
10
+ * - Replication consistency tracking
11
+ *
12
+ * @module memory/PatternReplicationService
13
+ * @version 1.0.0
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.PatternReplicationService = exports.ReplicationNodeStatus = void 0;
17
+ const events_1 = require("events");
18
+ /**
19
+ * Replication node status
20
+ */
21
+ var ReplicationNodeStatus;
22
+ (function (ReplicationNodeStatus) {
23
+ ReplicationNodeStatus["HEALTHY"] = "healthy";
24
+ ReplicationNodeStatus["DEGRADED"] = "degraded";
25
+ ReplicationNodeStatus["FAILED"] = "failed";
26
+ ReplicationNodeStatus["RECOVERING"] = "recovering";
27
+ })(ReplicationNodeStatus || (exports.ReplicationNodeStatus = ReplicationNodeStatus = {}));
28
+ /**
29
+ * PatternReplicationService - Manages pattern replication across multiple agents
30
+ *
31
+ * This service provides:
32
+ * - Automatic pattern replication to N nodes (configurable replication factor)
33
+ * - Health monitoring with heartbeat mechanism
34
+ * - Automatic failover and recovery
35
+ * - Consistency checking and repair
36
+ * - Event-driven notifications for replication events
37
+ */
38
+ class PatternReplicationService extends events_1.EventEmitter {
39
+ constructor(config) {
40
+ super();
41
+ this.DEFAULT_HEARTBEAT_INTERVAL = 5000; // 5 seconds
42
+ this.DEFAULT_SYNC_INTERVAL = 30000; // 30 seconds
43
+ this.DEFAULT_FAILURE_THRESHOLD = 3;
44
+ this.config = {
45
+ ...config,
46
+ heartbeatInterval: config.heartbeatInterval || this.DEFAULT_HEARTBEAT_INTERVAL,
47
+ failureThreshold: config.failureThreshold || this.DEFAULT_FAILURE_THRESHOLD,
48
+ syncInterval: config.syncInterval || this.DEFAULT_SYNC_INTERVAL,
49
+ autoRecover: config.autoRecover !== false,
50
+ minHealthyNodes: config.minHealthyNodes || Math.ceil(config.replicationFactor / 2)
51
+ };
52
+ this.nodes = new Map();
53
+ this.isRunning = false;
54
+ }
55
+ /**
56
+ * Start the replication service
57
+ */
58
+ async start() {
59
+ if (this.isRunning) {
60
+ throw new Error('Replication service is already running');
61
+ }
62
+ this.isRunning = true;
63
+ // Start heartbeat monitoring
64
+ this.startHeartbeat();
65
+ // Start periodic sync
66
+ this.startSync();
67
+ }
68
+ /**
69
+ * Stop the replication service
70
+ */
71
+ async stop() {
72
+ this.isRunning = false;
73
+ if (this.heartbeatTimer) {
74
+ clearInterval(this.heartbeatTimer);
75
+ this.heartbeatTimer = undefined;
76
+ }
77
+ if (this.syncTimer) {
78
+ clearInterval(this.syncTimer);
79
+ this.syncTimer = undefined;
80
+ }
81
+ }
82
+ /**
83
+ * Register a replication node
84
+ */
85
+ async registerNode(agentId, library) {
86
+ const stats = await library.getStats();
87
+ const node = {
88
+ agentId,
89
+ library,
90
+ status: ReplicationNodeStatus.HEALTHY,
91
+ lastHeartbeat: Date.now(),
92
+ consecutiveFailures: 0,
93
+ totalPatterns: stats.totalPatterns,
94
+ lastSyncTimestamp: stats.lastSyncTimestamp
95
+ };
96
+ this.nodes.set(agentId, node);
97
+ // Trigger initial sync if service is running
98
+ if (this.isRunning) {
99
+ await this.syncNode(node);
100
+ }
101
+ }
102
+ /**
103
+ * Unregister a replication node
104
+ */
105
+ async unregisterNode(agentId) {
106
+ return this.nodes.delete(agentId);
107
+ }
108
+ /**
109
+ * Replicate a pattern to all healthy nodes
110
+ */
111
+ async replicatePattern(pattern, sourceAgentId) {
112
+ const healthyNodes = this.getHealthyNodes();
113
+ if (healthyNodes.length < this.config.minHealthyNodes) {
114
+ throw new Error(`Insufficient healthy nodes: ${healthyNodes.length} < ${this.config.minHealthyNodes}`);
115
+ }
116
+ let replicatedCount = 0;
117
+ const errors = [];
118
+ // Replicate to nodes (up to replication factor)
119
+ const targetNodes = healthyNodes.slice(0, this.config.replicationFactor);
120
+ for (const node of targetNodes) {
121
+ // Skip source node if specified
122
+ if (sourceAgentId && node.agentId === sourceAgentId) {
123
+ continue;
124
+ }
125
+ try {
126
+ await node.library.storePattern(pattern, sourceAgentId);
127
+ replicatedCount++;
128
+ }
129
+ catch (error) {
130
+ errors.push({ agentId: node.agentId, error: error });
131
+ await this.handleNodeFailure(node, error);
132
+ }
133
+ }
134
+ // Emit replication event
135
+ this.emit('pattern_replicated', {
136
+ type: 'pattern_replicated',
137
+ patternId: pattern.id,
138
+ nodeCount: replicatedCount
139
+ });
140
+ if (errors.length > 0 && replicatedCount < this.config.minHealthyNodes) {
141
+ throw new Error(`Pattern replication failed: only ${replicatedCount} successful replications`);
142
+ }
143
+ return replicatedCount;
144
+ }
145
+ /**
146
+ * Sync patterns across all nodes
147
+ */
148
+ async syncPatterns() {
149
+ const startTime = Date.now();
150
+ let totalSynced = 0;
151
+ const healthyNodes = this.getHealthyNodes();
152
+ if (healthyNodes.length < 2) {
153
+ return { synced: 0, duration: 0 };
154
+ }
155
+ // Use first healthy node as source of truth
156
+ const sourceNode = healthyNodes[0];
157
+ const sourcePatterns = await sourceNode.library.exportPatterns();
158
+ // Sync to other nodes
159
+ for (let i = 1; i < healthyNodes.length; i++) {
160
+ const targetNode = healthyNodes[i];
161
+ try {
162
+ const synced = await targetNode.library.mergePatterns(sourcePatterns);
163
+ totalSynced += synced;
164
+ targetNode.lastSyncTimestamp = Date.now();
165
+ }
166
+ catch (error) {
167
+ await this.handleNodeFailure(targetNode, error);
168
+ }
169
+ }
170
+ const duration = Date.now() - startTime;
171
+ this.emit('sync_completed', {
172
+ type: 'sync_completed',
173
+ duration,
174
+ patternsReplicated: totalSynced
175
+ });
176
+ return { synced: totalSynced, duration };
177
+ }
178
+ /**
179
+ * Check replication health
180
+ */
181
+ async checkHealth() {
182
+ let totalReplicationLag = 0;
183
+ let healthyCount = 0;
184
+ let degradedCount = 0;
185
+ let failedCount = 0;
186
+ let recoveringCount = 0;
187
+ const now = Date.now();
188
+ for (const node of Array.from(this.nodes.values())) {
189
+ // Update stats
190
+ try {
191
+ const stats = await node.library.getStats();
192
+ node.totalPatterns = stats.totalPatterns;
193
+ node.lastSyncTimestamp = stats.lastSyncTimestamp;
194
+ }
195
+ catch {
196
+ // Ignore stats errors during health check
197
+ }
198
+ // Count by status
199
+ switch (node.status) {
200
+ case ReplicationNodeStatus.HEALTHY:
201
+ healthyCount++;
202
+ break;
203
+ case ReplicationNodeStatus.DEGRADED:
204
+ degradedCount++;
205
+ break;
206
+ case ReplicationNodeStatus.FAILED:
207
+ failedCount++;
208
+ break;
209
+ case ReplicationNodeStatus.RECOVERING:
210
+ recoveringCount++;
211
+ break;
212
+ }
213
+ // Calculate replication lag
214
+ const lag = now - node.lastSyncTimestamp;
215
+ totalReplicationLag += lag;
216
+ }
217
+ const averageReplicationLag = this.nodes.size > 0 ? totalReplicationLag / this.nodes.size : 0;
218
+ // Calculate consistency percentage
219
+ const consistencyPercentage = await this.calculateConsistency();
220
+ return {
221
+ totalNodes: this.nodes.size,
222
+ healthyNodes: healthyCount,
223
+ degradedNodes: degradedCount,
224
+ failedNodes: failedCount,
225
+ recoveringNodes: recoveringCount,
226
+ averageReplicationLag,
227
+ consistencyPercentage,
228
+ lastHealthCheck: now
229
+ };
230
+ }
231
+ /**
232
+ * Get replication statistics
233
+ */
234
+ async getStats() {
235
+ const health = await this.checkHealth();
236
+ return {
237
+ replicationFactor: this.config.replicationFactor,
238
+ registeredNodes: this.nodes.size,
239
+ health
240
+ };
241
+ }
242
+ /**
243
+ * Get all registered nodes
244
+ */
245
+ getNodes() {
246
+ return Array.from(this.nodes.values());
247
+ }
248
+ /**
249
+ * Get healthy nodes only
250
+ */
251
+ getHealthyNodes() {
252
+ return Array.from(this.nodes.values()).filter(node => node.status === ReplicationNodeStatus.HEALTHY);
253
+ }
254
+ /**
255
+ * Start heartbeat monitoring
256
+ */
257
+ startHeartbeat() {
258
+ this.heartbeatTimer = setInterval(async () => {
259
+ await this.performHeartbeat();
260
+ }, this.config.heartbeatInterval);
261
+ }
262
+ /**
263
+ * Start periodic sync
264
+ */
265
+ startSync() {
266
+ this.syncTimer = setInterval(async () => {
267
+ await this.syncPatterns();
268
+ }, this.config.syncInterval);
269
+ }
270
+ /**
271
+ * Perform heartbeat check on all nodes
272
+ */
273
+ async performHeartbeat() {
274
+ const now = Date.now();
275
+ for (const node of Array.from(this.nodes.values())) {
276
+ try {
277
+ // Try to get stats as health check
278
+ const stats = await node.library.getStats();
279
+ node.totalPatterns = stats.totalPatterns;
280
+ node.lastHeartbeat = now;
281
+ node.consecutiveFailures = 0;
282
+ // Update status if recovering
283
+ if (node.status === ReplicationNodeStatus.RECOVERING) {
284
+ node.status = ReplicationNodeStatus.HEALTHY;
285
+ this.emit('node_recovered', {
286
+ type: 'node_recovered',
287
+ agentId: node.agentId
288
+ });
289
+ }
290
+ }
291
+ catch (error) {
292
+ await this.handleNodeFailure(node, error);
293
+ }
294
+ }
295
+ }
296
+ /**
297
+ * Handle node failure
298
+ */
299
+ async handleNodeFailure(node, error) {
300
+ node.consecutiveFailures++;
301
+ if (node.consecutiveFailures >= this.config.failureThreshold) {
302
+ if (node.status !== ReplicationNodeStatus.FAILED) {
303
+ node.status = ReplicationNodeStatus.FAILED;
304
+ this.emit('node_failed', {
305
+ type: 'node_failed',
306
+ agentId: node.agentId,
307
+ reason: error.message
308
+ });
309
+ // Attempt recovery if enabled
310
+ if (this.config.autoRecover) {
311
+ await this.attemptRecovery(node);
312
+ }
313
+ }
314
+ }
315
+ else if (node.status === ReplicationNodeStatus.HEALTHY) {
316
+ node.status = ReplicationNodeStatus.DEGRADED;
317
+ }
318
+ }
319
+ /**
320
+ * Attempt to recover a failed node
321
+ */
322
+ async attemptRecovery(node) {
323
+ node.status = ReplicationNodeStatus.RECOVERING;
324
+ try {
325
+ // Reinitialize the library
326
+ await node.library.initialize();
327
+ // Sync patterns from healthy node
328
+ await this.syncNode(node);
329
+ node.status = ReplicationNodeStatus.HEALTHY;
330
+ node.consecutiveFailures = 0;
331
+ this.emit('node_recovered', {
332
+ type: 'node_recovered',
333
+ agentId: node.agentId
334
+ });
335
+ }
336
+ catch (error) {
337
+ node.status = ReplicationNodeStatus.FAILED;
338
+ }
339
+ }
340
+ /**
341
+ * Sync a single node with the cluster
342
+ */
343
+ async syncNode(targetNode) {
344
+ const healthyNodes = this.getHealthyNodes().filter(n => n.agentId !== targetNode.agentId);
345
+ if (healthyNodes.length === 0) {
346
+ return; // No healthy nodes to sync from
347
+ }
348
+ const sourceNode = healthyNodes[0];
349
+ const patterns = await sourceNode.library.exportPatterns();
350
+ await targetNode.library.mergePatterns(patterns);
351
+ targetNode.lastSyncTimestamp = Date.now();
352
+ }
353
+ /**
354
+ * Calculate consistency percentage across all nodes
355
+ */
356
+ async calculateConsistency() {
357
+ if (this.nodes.size < 2) {
358
+ return 100; // Single node is always consistent
359
+ }
360
+ const healthyNodes = this.getHealthyNodes();
361
+ if (healthyNodes.length < 2) {
362
+ return 0; // Need at least 2 healthy nodes to measure consistency
363
+ }
364
+ // Get all pattern IDs from all nodes
365
+ const allPatternIds = new Set();
366
+ const nodePatterns = new Map();
367
+ for (const node of healthyNodes) {
368
+ const patterns = await node.library.exportPatterns();
369
+ const patternIds = new Set(patterns.map(p => p.pattern.id));
370
+ nodePatterns.set(node.agentId, patternIds);
371
+ for (const id of Array.from(patternIds)) {
372
+ allPatternIds.add(id);
373
+ }
374
+ }
375
+ // Count how many patterns are fully replicated
376
+ let fullyReplicatedCount = 0;
377
+ for (const patternId of Array.from(allPatternIds)) {
378
+ let replicationCount = 0;
379
+ for (const patternIds of Array.from(nodePatterns.values())) {
380
+ if (patternIds.has(patternId)) {
381
+ replicationCount++;
382
+ }
383
+ }
384
+ if (replicationCount === healthyNodes.length) {
385
+ fullyReplicatedCount++;
386
+ }
387
+ }
388
+ return allPatternIds.size > 0 ? (fullyReplicatedCount / allPatternIds.size) * 100 : 100;
389
+ }
390
+ }
391
+ exports.PatternReplicationService = PatternReplicationService;
392
+ //# sourceMappingURL=PatternReplicationService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PatternReplicationService.js","sourceRoot":"","sources":["../../src/memory/PatternReplicationService.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;;AAIH,mCAAsC;AAEtC;;GAEG;AACH,IAAY,qBAKX;AALD,WAAY,qBAAqB;IAC/B,4CAAmB,CAAA;IACnB,8CAAqB,CAAA;IACrB,0CAAiB,CAAA;IACjB,kDAAyB,CAAA;AAC3B,CAAC,EALW,qBAAqB,qCAArB,qBAAqB,QAKhC;AAyDD;;;;;;;;;GASG;AACH,MAAa,yBAA0B,SAAQ,qBAAY;IAUzD,YAAY,MAAyB;QACnC,KAAK,EAAE,CAAC;QALO,+BAA0B,GAAG,IAAI,CAAC,CAAC,YAAY;QAC/C,0BAAqB,GAAG,KAAK,CAAC,CAAC,aAAa;QAC5C,8BAAyB,GAAG,CAAC,CAAC;QAI7C,IAAI,CAAC,MAAM,GAAG;YACZ,GAAG,MAAM;YACT,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,IAAI,IAAI,CAAC,0BAA0B;YAC9E,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,IAAI,IAAI,CAAC,yBAAyB;YAC3E,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC,qBAAqB;YAC/D,WAAW,EAAE,MAAM,CAAC,WAAW,KAAK,KAAK;YACzC,eAAe,EAAE,MAAM,CAAC,eAAe,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,GAAG,CAAC,CAAC;SACnF,CAAC;QACF,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAEtB,6BAA6B;QAC7B,IAAI,CAAC,cAAc,EAAE,CAAC;QAEtB,sBAAsB;QACtB,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QAEvB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACnC,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAClC,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC9B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC7B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,OAAe,EAAE,OAAkC;QACpE,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC;QAEvC,MAAM,IAAI,GAAoB;YAC5B,OAAO;YACP,OAAO;YACP,MAAM,EAAE,qBAAqB,CAAC,OAAO;YACrC,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE;YACzB,mBAAmB,EAAE,CAAC;YACtB,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;SAC3C,CAAC;QAEF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAE9B,6CAA6C;QAC7C,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,OAAe;QAClC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CAAC,OAAoB,EAAE,aAAsB;QACjE,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAE5C,IAAI,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,eAAgB,EAAE,CAAC;YACvD,MAAM,IAAI,KAAK,CACb,+BAA+B,YAAY,CAAC,MAAM,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CACtF,CAAC;QACJ,CAAC;QAED,IAAI,eAAe,GAAG,CAAC,CAAC;QACxB,MAAM,MAAM,GAA6C,EAAE,CAAC;QAE5D,gDAAgD;QAChD,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAEzE,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;YAC/B,gCAAgC;YAChC,IAAI,aAAa,IAAI,IAAI,CAAC,OAAO,KAAK,aAAa,EAAE,CAAC;gBACpD,SAAS;YACX,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;gBACxD,eAAe,EAAE,CAAC;YACpB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,KAAc,EAAE,CAAC,CAAC;gBAC9D,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAc,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;QAED,yBAAyB;QACzB,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;YAC9B,IAAI,EAAE,oBAAoB;YAC1B,SAAS,EAAE,OAAO,CAAC,EAAE;YACrB,SAAS,EAAE,eAAe;SACP,CAAC,CAAC;QAEvB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,eAAgB,EAAE,CAAC;YACxE,MAAM,IAAI,KAAK,CACb,oCAAoC,eAAe,0BAA0B,CAC9E,CAAC;QACJ,CAAC;QAED,OAAO,eAAe,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY;QAChB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,IAAI,WAAW,GAAG,CAAC,CAAC;QAEpB,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAE5C,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;QACpC,CAAC;QAED,4CAA4C;QAC5C,MAAM,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,cAAc,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QAEjE,sBAAsB;QACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7C,MAAM,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YAEnC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;gBACtE,WAAW,IAAI,MAAM,CAAC;gBACtB,UAAU,CAAC,iBAAiB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC5C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,KAAc,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAExC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YAC1B,IAAI,EAAE,gBAAgB;YACtB,QAAQ;YACR,kBAAkB,EAAE,WAAW;SACZ,CAAC,CAAC;QAEvB,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW;QACf,IAAI,mBAAmB,GAAG,CAAC,CAAC;QAC5B,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,eAAe,GAAG,CAAC,CAAC;QAExB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;YACnD,eAAe;YACf,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;gBAC5C,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;gBACzC,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,iBAAiB,CAAC;YACnD,CAAC;YAAC,MAAM,CAAC;gBACP,0CAA0C;YAC5C,CAAC;YAED,kBAAkB;YAClB,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;gBACpB,KAAK,qBAAqB,CAAC,OAAO;oBAChC,YAAY,EAAE,CAAC;oBACf,MAAM;gBACR,KAAK,qBAAqB,CAAC,QAAQ;oBACjC,aAAa,EAAE,CAAC;oBAChB,MAAM;gBACR,KAAK,qBAAqB,CAAC,MAAM;oBAC/B,WAAW,EAAE,CAAC;oBACd,MAAM;gBACR,KAAK,qBAAqB,CAAC,UAAU;oBACnC,eAAe,EAAE,CAAC;oBAClB,MAAM;YACV,CAAC;YAED,4BAA4B;YAC5B,MAAM,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC;YACzC,mBAAmB,IAAI,GAAG,CAAC;QAC7B,CAAC;QAED,MAAM,qBAAqB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAE9F,mCAAmC;QACnC,MAAM,qBAAqB,GAAG,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAEhE,OAAO;YACL,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;YAC3B,YAAY,EAAE,YAAY;YAC1B,aAAa,EAAE,aAAa;YAC5B,WAAW,EAAE,WAAW;YACxB,eAAe,EAAE,eAAe;YAChC,qBAAqB;YACrB,qBAAqB;YACrB,eAAe,EAAE,GAAG;SACrB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QAKZ,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAExC,OAAO;YACL,iBAAiB,EAAE,IAAI,CAAC,MAAM,CAAC,iBAAiB;YAChD,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;YAChC,MAAM;SACP,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACK,eAAe;QACrB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAC3C,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,qBAAqB,CAAC,OAAO,CACtD,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,cAAc;QACpB,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;YAC3C,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAChC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,iBAAkB,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACK,SAAS;QACf,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;YACtC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC5B,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,YAAa,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,gBAAgB;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;YACnD,IAAI,CAAC;gBACH,mCAAmC;gBACnC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;gBAC5C,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;gBACzC,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC;gBACzB,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;gBAE7B,8BAA8B;gBAC9B,IAAI,IAAI,CAAC,MAAM,KAAK,qBAAqB,CAAC,UAAU,EAAE,CAAC;oBACrD,IAAI,CAAC,MAAM,GAAG,qBAAqB,CAAC,OAAO,CAAC;oBAC5C,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;wBAC1B,IAAI,EAAE,gBAAgB;wBACtB,OAAO,EAAE,IAAI,CAAC,OAAO;qBACF,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAc,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,iBAAiB,CAAC,IAAqB,EAAE,KAAY;QACjE,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAE3B,IAAI,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAiB,EAAE,CAAC;YAC9D,IAAI,IAAI,CAAC,MAAM,KAAK,qBAAqB,CAAC,MAAM,EAAE,CAAC;gBACjD,IAAI,CAAC,MAAM,GAAG,qBAAqB,CAAC,MAAM,CAAC;gBAC3C,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;oBACvB,IAAI,EAAE,aAAa;oBACnB,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,MAAM,EAAE,KAAK,CAAC,OAAO;iBACF,CAAC,CAAC;gBAEvB,8BAA8B;gBAC9B,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;oBAC5B,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;gBACnC,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,KAAK,qBAAqB,CAAC,OAAO,EAAE,CAAC;YACzD,IAAI,CAAC,MAAM,GAAG,qBAAqB,CAAC,QAAQ,CAAC;QAC/C,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,eAAe,CAAC,IAAqB;QACjD,IAAI,CAAC,MAAM,GAAG,qBAAqB,CAAC,UAAU,CAAC;QAE/C,IAAI,CAAC;YACH,2BAA2B;YAC3B,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YAEhC,kCAAkC;YAClC,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAE1B,IAAI,CAAC,MAAM,GAAG,qBAAqB,CAAC,OAAO,CAAC;YAC5C,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;YAE7B,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBAC1B,IAAI,EAAE,gBAAgB;gBACtB,OAAO,EAAE,IAAI,CAAC,OAAO;aACF,CAAC,CAAC;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,GAAG,qBAAqB,CAAC,MAAM,CAAC;QAC7C,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,QAAQ,CAAC,UAA2B;QAChD,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,UAAU,CAAC,OAAO,CAAC,CAAC;QAE1F,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,gCAAgC;QAC1C,CAAC;QAED,MAAM,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QAE3D,MAAM,UAAU,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACjD,UAAU,CAAC,iBAAiB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC5C,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,oBAAoB;QAChC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACxB,OAAO,GAAG,CAAC,CAAC,mCAAmC;QACjD,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAC5C,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,CAAC,CAAC,uDAAuD;QACnE,CAAC;QAED,qCAAqC;QACrC,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;QACxC,MAAM,YAAY,GAAG,IAAI,GAAG,EAAuB,CAAC;QAEpD,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YAChC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;YACrD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;YAE5D,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YAE3C,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBACxC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QAED,+CAA+C;QAC/C,IAAI,oBAAoB,GAAG,CAAC,CAAC;QAE7B,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;YAClD,IAAI,gBAAgB,GAAG,CAAC,CAAC;YAEzB,KAAK,MAAM,UAAU,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;gBAC3D,IAAI,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC9B,gBAAgB,EAAE,CAAC;gBACrB,CAAC;YACH,CAAC;YAED,IAAI,gBAAgB,KAAK,YAAY,CAAC,MAAM,EAAE,CAAC;gBAC7C,oBAAoB,EAAE,CAAC;YACzB,CAAC;QACH,CAAC;QAED,OAAO,aAAa,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,oBAAoB,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAC1F,CAAC;CACF;AAhbD,8DAgbC"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * ClaudeProvider - Anthropic Claude API Implementation
3
+ *
4
+ * Provides LLM capabilities through Anthropic's Claude API with support for:
5
+ * - Prompt caching for cost optimization
6
+ * - Streaming responses
7
+ * - Token counting
8
+ * - Health checks
9
+ *
10
+ * @module providers/ClaudeProvider
11
+ * @version 1.0.0
12
+ */
13
+ import { ILLMProvider, LLMProviderConfig, LLMCompletionOptions, LLMCompletionResponse, LLMStreamEvent, LLMEmbeddingOptions, LLMEmbeddingResponse, LLMTokenCountOptions, LLMHealthStatus, LLMProviderMetadata } from './ILLMProvider';
14
+ /**
15
+ * Claude-specific configuration
16
+ */
17
+ export interface ClaudeProviderConfig extends LLMProviderConfig {
18
+ /** Anthropic API key (uses ANTHROPIC_API_KEY env var if not provided) */
19
+ apiKey?: string;
20
+ /** Default model to use */
21
+ defaultModel?: string;
22
+ /** Enable prompt caching */
23
+ enableCaching?: boolean;
24
+ /** Base URL for API (for testing/proxies) */
25
+ baseUrl?: string;
26
+ }
27
+ /**
28
+ * ClaudeProvider - Anthropic Claude API implementation of ILLMProvider
29
+ *
30
+ * This provider enables access to Claude models through the Anthropic API
31
+ * with full support for caching, streaming, and cost tracking.
32
+ */
33
+ export declare class ClaudeProvider implements ILLMProvider {
34
+ private readonly logger;
35
+ private client?;
36
+ private config;
37
+ private isInitialized;
38
+ private totalCost;
39
+ private requestCount;
40
+ constructor(config?: ClaudeProviderConfig);
41
+ /**
42
+ * Initialize the Claude provider
43
+ */
44
+ initialize(): Promise<void>;
45
+ /**
46
+ * Complete a prompt
47
+ */
48
+ complete(options: LLMCompletionOptions): Promise<LLMCompletionResponse>;
49
+ /**
50
+ * Stream a completion
51
+ */
52
+ streamComplete(options: LLMCompletionOptions): AsyncIterableIterator<LLMStreamEvent>;
53
+ /**
54
+ * Generate embeddings (Claude doesn't natively support embeddings)
55
+ */
56
+ embed(options: LLMEmbeddingOptions): Promise<LLMEmbeddingResponse>;
57
+ /**
58
+ * Count tokens in text
59
+ */
60
+ countTokens(options: LLMTokenCountOptions): Promise<number>;
61
+ /**
62
+ * Health check
63
+ */
64
+ healthCheck(): Promise<LLMHealthStatus>;
65
+ /**
66
+ * Get provider metadata
67
+ */
68
+ getMetadata(): LLMProviderMetadata;
69
+ /**
70
+ * Shutdown the provider
71
+ */
72
+ shutdown(): Promise<void>;
73
+ /**
74
+ * Track cost for a request
75
+ */
76
+ trackCost(usage: LLMCompletionResponse['usage']): number;
77
+ /**
78
+ * Get total cost incurred
79
+ */
80
+ getTotalCost(): number;
81
+ /**
82
+ * Ensure provider is initialized
83
+ */
84
+ private ensureInitialized;
85
+ /**
86
+ * Map Anthropic stream event to LLMStreamEvent
87
+ */
88
+ private mapStreamEvent;
89
+ /**
90
+ * Get error code from exception
91
+ */
92
+ private getErrorCode;
93
+ /**
94
+ * Check if error is retryable
95
+ */
96
+ private isRetryableError;
97
+ }
98
+ //# sourceMappingURL=ClaudeProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClaudeProvider.d.ts","sourceRoot":"","sources":["../../src/providers/ClaudeProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,EACrB,cAAc,EACd,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,eAAe,EACf,mBAAmB,EAEpB,MAAM,gBAAgB,CAAC;AAGxB;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,iBAAiB;IAC7D,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2BAA2B;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4BAA4B;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAeD;;;;;GAKG;AACH,qBAAa,cAAe,YAAW,YAAY;IACjD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,MAAM,CAAC,CAAY;IAC3B,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,aAAa,CAAU;IAC/B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,YAAY,CAAS;gBAEjB,MAAM,GAAE,oBAAyB;IAiB7C;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA8BjC;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IA+F7E;;OAEG;IACI,cAAc,CAAC,OAAO,EAAE,oBAAoB,GAAG,qBAAqB,CAAC,cAAc,CAAC;IA0D3F;;OAEG;IACG,KAAK,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IASxE;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC;IAiBjE;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,eAAe,CAAC;IAmC7C;;OAEG;IACH,WAAW,IAAI,mBAAmB;IAuBlC;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAS/B;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,qBAAqB,CAAC,OAAO,CAAC,GAAG,MAAM;IAwBxD;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAWzB;;OAEG;IACH,OAAO,CAAC,cAAc;IA0DtB;;OAEG;IACH,OAAO,CAAC,YAAY;IAOpB;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAMzB"}