agentic-qe 2.1.1 → 2.2.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.
Files changed (167) hide show
  1. package/CHANGELOG.md +213 -0
  2. package/README.md +37 -11
  3. package/dist/agents/index.d.ts.map +1 -1
  4. package/dist/agents/index.js +5 -1
  5. package/dist/agents/index.js.map +1 -1
  6. package/dist/core/MemoryManager.d.ts.map +1 -1
  7. package/dist/core/MemoryManager.js +4 -0
  8. package/dist/core/MemoryManager.js.map +1 -1
  9. package/dist/core/di/AgentDependencies.d.ts +127 -0
  10. package/dist/core/di/AgentDependencies.d.ts.map +1 -0
  11. package/dist/core/di/AgentDependencies.js +251 -0
  12. package/dist/core/di/AgentDependencies.js.map +1 -0
  13. package/dist/core/di/DIContainer.d.ts +149 -0
  14. package/dist/core/di/DIContainer.d.ts.map +1 -0
  15. package/dist/core/di/DIContainer.js +333 -0
  16. package/dist/core/di/DIContainer.js.map +1 -0
  17. package/dist/core/di/index.d.ts +11 -0
  18. package/dist/core/di/index.d.ts.map +1 -0
  19. package/dist/core/di/index.js +22 -0
  20. package/dist/core/di/index.js.map +1 -0
  21. package/dist/core/index.d.ts +1 -0
  22. package/dist/core/index.d.ts.map +1 -1
  23. package/dist/core/index.js +11 -1
  24. package/dist/core/index.js.map +1 -1
  25. package/dist/core/memory/RuVectorPatternStore.d.ts +5 -1
  26. package/dist/core/memory/RuVectorPatternStore.d.ts.map +1 -1
  27. package/dist/core/memory/RuVectorPatternStore.js +43 -1
  28. package/dist/core/memory/RuVectorPatternStore.js.map +1 -1
  29. package/dist/learning/ExperienceSharingProtocol.d.ts +243 -0
  30. package/dist/learning/ExperienceSharingProtocol.d.ts.map +1 -0
  31. package/dist/learning/ExperienceSharingProtocol.js +538 -0
  32. package/dist/learning/ExperienceSharingProtocol.js.map +1 -0
  33. package/dist/learning/LearningEngine.d.ts +101 -1
  34. package/dist/learning/LearningEngine.d.ts.map +1 -1
  35. package/dist/learning/LearningEngine.js +330 -3
  36. package/dist/learning/LearningEngine.js.map +1 -1
  37. package/dist/learning/QLearning.d.ts +38 -125
  38. package/dist/learning/QLearning.d.ts.map +1 -1
  39. package/dist/learning/QLearning.js +46 -267
  40. package/dist/learning/QLearning.js.map +1 -1
  41. package/dist/learning/QLearningLegacy.d.ts +154 -0
  42. package/dist/learning/QLearningLegacy.d.ts.map +1 -0
  43. package/dist/learning/QLearningLegacy.js +337 -0
  44. package/dist/learning/QLearningLegacy.js.map +1 -0
  45. package/dist/learning/algorithms/AbstractRLLearner.d.ts +162 -0
  46. package/dist/learning/algorithms/AbstractRLLearner.d.ts.map +1 -0
  47. package/dist/learning/algorithms/AbstractRLLearner.js +300 -0
  48. package/dist/learning/algorithms/AbstractRLLearner.js.map +1 -0
  49. package/dist/learning/algorithms/ActorCriticLearner.d.ts +201 -0
  50. package/dist/learning/algorithms/ActorCriticLearner.d.ts.map +1 -0
  51. package/dist/learning/algorithms/ActorCriticLearner.js +447 -0
  52. package/dist/learning/algorithms/ActorCriticLearner.js.map +1 -0
  53. package/dist/learning/algorithms/PPOLearner.d.ts +207 -0
  54. package/dist/learning/algorithms/PPOLearner.d.ts.map +1 -0
  55. package/dist/learning/algorithms/PPOLearner.js +490 -0
  56. package/dist/learning/algorithms/PPOLearner.js.map +1 -0
  57. package/dist/learning/algorithms/QLearning.d.ts +68 -0
  58. package/dist/learning/algorithms/QLearning.d.ts.map +1 -0
  59. package/dist/learning/algorithms/QLearning.js +116 -0
  60. package/dist/learning/algorithms/QLearning.js.map +1 -0
  61. package/dist/learning/algorithms/SARSALearner.d.ts +107 -0
  62. package/dist/learning/algorithms/SARSALearner.d.ts.map +1 -0
  63. package/dist/learning/algorithms/SARSALearner.js +252 -0
  64. package/dist/learning/algorithms/SARSALearner.js.map +1 -0
  65. package/dist/learning/algorithms/index.d.ts +29 -0
  66. package/dist/learning/algorithms/index.d.ts.map +1 -0
  67. package/dist/learning/algorithms/index.js +44 -0
  68. package/dist/learning/algorithms/index.js.map +1 -0
  69. package/dist/learning/index.d.ts +3 -0
  70. package/dist/learning/index.d.ts.map +1 -1
  71. package/dist/learning/index.js +15 -1
  72. package/dist/learning/index.js.map +1 -1
  73. package/dist/learning/types.d.ts +2 -0
  74. package/dist/learning/types.d.ts.map +1 -1
  75. package/dist/mcp/handlers/advanced/index.d.ts +3 -2
  76. package/dist/mcp/handlers/advanced/index.d.ts.map +1 -1
  77. package/dist/mcp/handlers/advanced/index.js +4 -5
  78. package/dist/mcp/handlers/advanced/index.js.map +1 -1
  79. package/dist/mcp/handlers/analysis/coverageAnalyzeSublinear.d.ts +1 -0
  80. package/dist/mcp/handlers/analysis/coverageAnalyzeSublinear.d.ts.map +1 -1
  81. package/dist/mcp/handlers/analysis/coverageAnalyzeSublinear.js +3 -0
  82. package/dist/mcp/handlers/analysis/coverageAnalyzeSublinear.js.map +1 -1
  83. package/dist/mcp/handlers/analysis/coverageGapsDetect.d.ts +1 -0
  84. package/dist/mcp/handlers/analysis/coverageGapsDetect.d.ts.map +1 -1
  85. package/dist/mcp/handlers/analysis/coverageGapsDetect.js +3 -0
  86. package/dist/mcp/handlers/analysis/coverageGapsDetect.js.map +1 -1
  87. package/dist/mcp/handlers/analysis/index.d.ts +0 -2
  88. package/dist/mcp/handlers/analysis/index.d.ts.map +1 -1
  89. package/dist/mcp/handlers/analysis/index.js +2 -3
  90. package/dist/mcp/handlers/analysis/index.js.map +1 -1
  91. package/dist/mcp/handlers/analysis/performanceMonitorRealtime.d.ts +1 -0
  92. package/dist/mcp/handlers/analysis/performanceMonitorRealtime.d.ts.map +1 -1
  93. package/dist/mcp/handlers/analysis/performanceMonitorRealtime.js +3 -0
  94. package/dist/mcp/handlers/analysis/performanceMonitorRealtime.js.map +1 -1
  95. package/dist/mcp/handlers/prediction/flaky-test-detect.d.ts.map +1 -1
  96. package/dist/mcp/handlers/prediction/flaky-test-detect.js +2 -0
  97. package/dist/mcp/handlers/prediction/flaky-test-detect.js.map +1 -1
  98. package/dist/mcp/handlers/prediction/index.d.ts +0 -2
  99. package/dist/mcp/handlers/prediction/index.d.ts.map +1 -1
  100. package/dist/mcp/handlers/prediction/index.js +2 -3
  101. package/dist/mcp/handlers/prediction/index.js.map +1 -1
  102. package/dist/mcp/handlers/security/index.d.ts +0 -30
  103. package/dist/mcp/handlers/security/index.d.ts.map +1 -1
  104. package/dist/mcp/handlers/security/index.js +5 -31
  105. package/dist/mcp/handlers/security/index.js.map +1 -1
  106. package/dist/mcp/lazy-loader.d.ts +156 -0
  107. package/dist/mcp/lazy-loader.d.ts.map +1 -0
  108. package/dist/mcp/lazy-loader.js +327 -0
  109. package/dist/mcp/lazy-loader.js.map +1 -0
  110. package/dist/mcp/server-instructions.d.ts +18 -0
  111. package/dist/mcp/server-instructions.d.ts.map +1 -0
  112. package/dist/mcp/server-instructions.js +133 -0
  113. package/dist/mcp/server-instructions.js.map +1 -0
  114. package/dist/mcp/server.d.ts.map +1 -1
  115. package/dist/mcp/server.js +236 -49
  116. package/dist/mcp/server.js.map +1 -1
  117. package/dist/mcp/tool-categories.d.ts +105 -0
  118. package/dist/mcp/tool-categories.d.ts.map +1 -0
  119. package/dist/mcp/tool-categories.js +463 -0
  120. package/dist/mcp/tool-categories.js.map +1 -0
  121. package/dist/mcp/tools.d.ts +3 -19
  122. package/dist/mcp/tools.d.ts.map +1 -1
  123. package/dist/mcp/tools.js +260 -647
  124. package/dist/mcp/tools.js.map +1 -1
  125. package/dist/memory/DistributedPatternLibrary.d.ts +159 -0
  126. package/dist/memory/DistributedPatternLibrary.d.ts.map +1 -0
  127. package/dist/memory/DistributedPatternLibrary.js +370 -0
  128. package/dist/memory/DistributedPatternLibrary.js.map +1 -0
  129. package/dist/memory/PatternQualityScorer.d.ts +169 -0
  130. package/dist/memory/PatternQualityScorer.d.ts.map +1 -0
  131. package/dist/memory/PatternQualityScorer.js +327 -0
  132. package/dist/memory/PatternQualityScorer.js.map +1 -0
  133. package/dist/memory/PatternReplicationService.d.ts +187 -0
  134. package/dist/memory/PatternReplicationService.d.ts.map +1 -0
  135. package/dist/memory/PatternReplicationService.js +392 -0
  136. package/dist/memory/PatternReplicationService.js.map +1 -0
  137. package/dist/providers/ClaudeProvider.d.ts +98 -0
  138. package/dist/providers/ClaudeProvider.d.ts.map +1 -0
  139. package/dist/providers/ClaudeProvider.js +418 -0
  140. package/dist/providers/ClaudeProvider.js.map +1 -0
  141. package/dist/providers/ILLMProvider.d.ts +287 -0
  142. package/dist/providers/ILLMProvider.d.ts.map +1 -0
  143. package/dist/providers/ILLMProvider.js +33 -0
  144. package/dist/providers/ILLMProvider.js.map +1 -0
  145. package/dist/providers/LLMProviderFactory.d.ts +154 -0
  146. package/dist/providers/LLMProviderFactory.d.ts.map +1 -0
  147. package/dist/providers/LLMProviderFactory.js +426 -0
  148. package/dist/providers/LLMProviderFactory.js.map +1 -0
  149. package/dist/providers/RuvllmProvider.d.ts +107 -0
  150. package/dist/providers/RuvllmProvider.d.ts.map +1 -0
  151. package/dist/providers/RuvllmProvider.js +417 -0
  152. package/dist/providers/RuvllmProvider.js.map +1 -0
  153. package/dist/providers/index.d.ts +31 -0
  154. package/dist/providers/index.d.ts.map +1 -0
  155. package/dist/providers/index.js +69 -0
  156. package/dist/providers/index.js.map +1 -0
  157. package/dist/utils/IntervalRegistry.d.ts +110 -0
  158. package/dist/utils/IntervalRegistry.d.ts.map +1 -0
  159. package/dist/utils/IntervalRegistry.js +190 -0
  160. package/dist/utils/IntervalRegistry.js.map +1 -0
  161. package/dist/utils/index.d.ts +1 -0
  162. package/dist/utils/index.d.ts.map +1 -1
  163. package/dist/utils/index.js +5 -1
  164. package/dist/utils/index.js.map +1 -1
  165. package/docs/reference/agents.md +33 -0
  166. package/docs/reference/usage.md +60 -0
  167. package/package.json +2 -2
@@ -0,0 +1,417 @@
1
+ "use strict";
2
+ /**
3
+ * RuvllmProvider - Local LLM Inference via ruvllm
4
+ *
5
+ * Provides local LLM inference for cost-effective operations on capable hardware.
6
+ * Uses ruvllm for fast local inference with support for various open models.
7
+ *
8
+ * Features:
9
+ * - Zero cloud costs for local inference
10
+ * - Low latency for local operations
11
+ * - Privacy-preserving (no data leaves the machine)
12
+ * - Streaming support
13
+ * - Model hot-swapping
14
+ *
15
+ * @module providers/RuvllmProvider
16
+ * @version 1.0.0
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.RuvllmProvider = void 0;
20
+ const child_process_1 = require("child_process");
21
+ const ILLMProvider_1 = require("./ILLMProvider");
22
+ const Logger_1 = require("../utils/Logger");
23
+ /**
24
+ * RuvllmProvider - Local LLM inference implementation of ILLMProvider
25
+ *
26
+ * This provider enables local LLM inference using ruvllm, providing
27
+ * cost-free, low-latency inference for development and privacy-sensitive tasks.
28
+ */
29
+ class RuvllmProvider {
30
+ constructor(config = {}) {
31
+ this.logger = Logger_1.Logger.getInstance();
32
+ this.config = {
33
+ name: config.name || 'ruvllm',
34
+ debug: config.debug ?? false,
35
+ timeout: config.timeout ?? 120000, // Longer timeout for local inference
36
+ maxRetries: config.maxRetries ?? 2,
37
+ ruvllmPath: config.ruvllmPath || 'npx',
38
+ port: config.port ?? 8080,
39
+ defaultModel: config.defaultModel || 'llama-3.2-3b-instruct',
40
+ gpuLayers: config.gpuLayers ?? -1,
41
+ contextSize: config.contextSize ?? 4096,
42
+ threads: config.threads ?? 4,
43
+ defaultTemperature: config.defaultTemperature ?? 0.7,
44
+ enableEmbeddings: config.enableEmbeddings ?? false
45
+ };
46
+ this.isInitialized = false;
47
+ this.baseUrl = `http://localhost:${this.config.port}`;
48
+ this.requestCount = 0;
49
+ }
50
+ /**
51
+ * Initialize the ruvllm provider
52
+ */
53
+ async initialize() {
54
+ if (this.isInitialized) {
55
+ this.logger.warn('RuvllmProvider already initialized');
56
+ return;
57
+ }
58
+ try {
59
+ // Check if server is already running
60
+ const isRunning = await this.checkServerHealth();
61
+ if (isRunning) {
62
+ this.isInitialized = true;
63
+ this.logger.info('Connected to existing ruvllm server');
64
+ return;
65
+ }
66
+ // Start ruvllm server
67
+ await this.startServer();
68
+ this.isInitialized = true;
69
+ this.logger.info('RuvllmProvider initialized', {
70
+ model: this.config.defaultModel,
71
+ port: this.config.port,
72
+ gpuLayers: this.config.gpuLayers
73
+ });
74
+ }
75
+ catch (error) {
76
+ throw new ILLMProvider_1.LLMProviderError(`Failed to initialize ruvllm: ${error.message}`, 'ruvllm', 'INIT_ERROR', false, error);
77
+ }
78
+ }
79
+ /**
80
+ * Complete a prompt using local inference
81
+ */
82
+ async complete(options) {
83
+ this.ensureInitialized();
84
+ const startTime = Date.now();
85
+ try {
86
+ // Build request body
87
+ const requestBody = {
88
+ model: options.model || this.config.defaultModel,
89
+ messages: options.messages.map(m => ({
90
+ role: m.role,
91
+ content: typeof m.content === 'string' ? m.content : m.content.map(c => c.text || '').join('')
92
+ })),
93
+ max_tokens: options.maxTokens || 2048,
94
+ temperature: options.temperature ?? this.config.defaultTemperature,
95
+ stream: false
96
+ };
97
+ // Add system message if provided
98
+ if (options.system && options.system.length > 0) {
99
+ const systemContent = options.system.map(s => s.text).join('\n');
100
+ requestBody.messages = [
101
+ { role: 'system', content: systemContent },
102
+ ...requestBody.messages
103
+ ];
104
+ }
105
+ const response = await fetch(`${this.baseUrl}/v1/chat/completions`, {
106
+ method: 'POST',
107
+ headers: { 'Content-Type': 'application/json' },
108
+ body: JSON.stringify(requestBody),
109
+ signal: AbortSignal.timeout(this.config.timeout)
110
+ });
111
+ if (!response.ok) {
112
+ throw new Error(`Server returned ${response.status}: ${await response.text()}`);
113
+ }
114
+ const data = await response.json();
115
+ this.requestCount++;
116
+ // Map to standard response format
117
+ const result = {
118
+ content: [{
119
+ type: 'text',
120
+ text: data.choices?.[0]?.message?.content || ''
121
+ }],
122
+ usage: {
123
+ input_tokens: data.usage?.prompt_tokens || 0,
124
+ output_tokens: data.usage?.completion_tokens || 0
125
+ },
126
+ model: data.model || this.config.defaultModel,
127
+ stop_reason: this.mapStopReason(data.choices?.[0]?.finish_reason),
128
+ id: data.id || `ruvllm-${Date.now()}`,
129
+ metadata: {
130
+ latency: Date.now() - startTime,
131
+ cost: 0 // Local inference is free
132
+ }
133
+ };
134
+ this.logger.debug('Ruvllm completion successful', {
135
+ model: result.model,
136
+ inputTokens: result.usage.input_tokens,
137
+ outputTokens: result.usage.output_tokens,
138
+ latency: result.metadata?.latency
139
+ });
140
+ return result;
141
+ }
142
+ catch (error) {
143
+ throw new ILLMProvider_1.LLMProviderError(`Ruvllm completion failed: ${error.message}`, 'ruvllm', 'INFERENCE_ERROR', true, error);
144
+ }
145
+ }
146
+ /**
147
+ * Stream a completion
148
+ */
149
+ async *streamComplete(options) {
150
+ this.ensureInitialized();
151
+ try {
152
+ const requestBody = {
153
+ model: options.model || this.config.defaultModel,
154
+ messages: options.messages.map(m => ({
155
+ role: m.role,
156
+ content: typeof m.content === 'string' ? m.content : m.content.map(c => c.text || '').join('')
157
+ })),
158
+ max_tokens: options.maxTokens || 2048,
159
+ temperature: options.temperature ?? this.config.defaultTemperature,
160
+ stream: true
161
+ };
162
+ if (options.system && options.system.length > 0) {
163
+ const systemContent = options.system.map(s => s.text).join('\n');
164
+ requestBody.messages = [
165
+ { role: 'system', content: systemContent },
166
+ ...requestBody.messages
167
+ ];
168
+ }
169
+ const response = await fetch(`${this.baseUrl}/v1/chat/completions`, {
170
+ method: 'POST',
171
+ headers: { 'Content-Type': 'application/json' },
172
+ body: JSON.stringify(requestBody)
173
+ });
174
+ if (!response.ok) {
175
+ throw new Error(`Server returned ${response.status}`);
176
+ }
177
+ const reader = response.body?.getReader();
178
+ if (!reader) {
179
+ throw new Error('No response body');
180
+ }
181
+ const decoder = new TextDecoder();
182
+ let buffer = '';
183
+ yield { type: 'message_start' };
184
+ yield { type: 'content_block_start', content_block: { type: 'text', text: '' } };
185
+ while (true) {
186
+ const { done, value } = await reader.read();
187
+ if (done)
188
+ break;
189
+ buffer += decoder.decode(value, { stream: true });
190
+ const lines = buffer.split('\n');
191
+ buffer = lines.pop() || '';
192
+ for (const line of lines) {
193
+ if (line.startsWith('data: ')) {
194
+ const data = line.slice(6);
195
+ if (data === '[DONE]')
196
+ continue;
197
+ try {
198
+ const parsed = JSON.parse(data);
199
+ const content = parsed.choices?.[0]?.delta?.content;
200
+ if (content) {
201
+ yield {
202
+ type: 'content_block_delta',
203
+ delta: { type: 'text_delta', text: content }
204
+ };
205
+ }
206
+ }
207
+ catch {
208
+ // Skip invalid JSON
209
+ }
210
+ }
211
+ }
212
+ }
213
+ yield { type: 'content_block_stop' };
214
+ yield { type: 'message_stop' };
215
+ this.requestCount++;
216
+ }
217
+ catch (error) {
218
+ throw new ILLMProvider_1.LLMProviderError(`Ruvllm stream failed: ${error.message}`, 'ruvllm', 'STREAM_ERROR', true, error);
219
+ }
220
+ }
221
+ /**
222
+ * Generate embeddings
223
+ */
224
+ async embed(options) {
225
+ this.ensureInitialized();
226
+ if (!this.config.enableEmbeddings) {
227
+ throw new ILLMProvider_1.LLMProviderError('Embeddings not enabled. Set enableEmbeddings: true in config.', 'ruvllm', 'UNSUPPORTED', false);
228
+ }
229
+ try {
230
+ const response = await fetch(`${this.baseUrl}/v1/embeddings`, {
231
+ method: 'POST',
232
+ headers: { 'Content-Type': 'application/json' },
233
+ body: JSON.stringify({
234
+ model: options.model || 'embedding',
235
+ input: options.text
236
+ })
237
+ });
238
+ if (!response.ok) {
239
+ throw new Error(`Server returned ${response.status}`);
240
+ }
241
+ const data = await response.json();
242
+ return {
243
+ embedding: data.data?.[0]?.embedding || [],
244
+ model: data.model || 'embedding',
245
+ tokens: data.usage?.total_tokens || 0
246
+ };
247
+ }
248
+ catch (error) {
249
+ throw new ILLMProvider_1.LLMProviderError(`Embedding generation failed: ${error.message}`, 'ruvllm', 'EMBEDDING_ERROR', true, error);
250
+ }
251
+ }
252
+ /**
253
+ * Count tokens in text
254
+ */
255
+ async countTokens(options) {
256
+ // Approximate token count (ruvllm doesn't have a direct endpoint)
257
+ // Most models use ~4 characters per token
258
+ return Math.ceil(options.text.length / 4);
259
+ }
260
+ /**
261
+ * Health check
262
+ */
263
+ async healthCheck() {
264
+ const startTime = Date.now();
265
+ try {
266
+ const isHealthy = await this.checkServerHealth();
267
+ return {
268
+ healthy: isHealthy,
269
+ latency: Date.now() - startTime,
270
+ timestamp: new Date(),
271
+ metadata: {
272
+ model: this.config.defaultModel,
273
+ port: this.config.port,
274
+ requestCount: this.requestCount
275
+ }
276
+ };
277
+ }
278
+ catch (error) {
279
+ return {
280
+ healthy: false,
281
+ error: error.message,
282
+ timestamp: new Date()
283
+ };
284
+ }
285
+ }
286
+ /**
287
+ * Get provider metadata
288
+ */
289
+ getMetadata() {
290
+ return {
291
+ name: 'ruvllm',
292
+ version: '1.0.0',
293
+ models: [
294
+ 'llama-3.2-3b-instruct',
295
+ 'llama-3.2-1b-instruct',
296
+ 'llama-3.1-8b-instruct',
297
+ 'phi-3-mini',
298
+ 'mistral-7b-instruct',
299
+ 'qwen2-7b-instruct'
300
+ ],
301
+ capabilities: {
302
+ streaming: true,
303
+ caching: false,
304
+ embeddings: this.config.enableEmbeddings,
305
+ vision: false
306
+ },
307
+ costs: {
308
+ inputPerMillion: 0, // Free for local inference
309
+ outputPerMillion: 0
310
+ },
311
+ location: 'local'
312
+ };
313
+ }
314
+ /**
315
+ * Shutdown the provider
316
+ */
317
+ async shutdown() {
318
+ if (this.serverProcess) {
319
+ this.serverProcess.kill();
320
+ this.serverProcess = undefined;
321
+ }
322
+ this.isInitialized = false;
323
+ this.logger.info('RuvllmProvider shutdown', {
324
+ requestCount: this.requestCount
325
+ });
326
+ }
327
+ /**
328
+ * Track cost (always 0 for local inference)
329
+ */
330
+ trackCost(usage) {
331
+ return 0; // Local inference is free
332
+ }
333
+ /**
334
+ * Start the ruvllm server
335
+ */
336
+ async startServer() {
337
+ return new Promise((resolve, reject) => {
338
+ const args = [
339
+ 'ruvllm',
340
+ 'serve',
341
+ '--model', this.config.defaultModel,
342
+ '--port', String(this.config.port),
343
+ '--gpu-layers', String(this.config.gpuLayers),
344
+ '--context-size', String(this.config.contextSize),
345
+ '--threads', String(this.config.threads)
346
+ ];
347
+ if (this.config.ruvllmPath === 'npx') {
348
+ this.serverProcess = (0, child_process_1.spawn)('npx', args, {
349
+ stdio: this.config.debug ? 'inherit' : 'pipe'
350
+ });
351
+ }
352
+ else {
353
+ this.serverProcess = (0, child_process_1.spawn)(this.config.ruvllmPath, args.slice(1), {
354
+ stdio: this.config.debug ? 'inherit' : 'pipe'
355
+ });
356
+ }
357
+ this.serverProcess.on('error', (error) => {
358
+ reject(new Error(`Failed to start ruvllm: ${error.message}`));
359
+ });
360
+ // Wait for server to be ready
361
+ const checkInterval = setInterval(async () => {
362
+ try {
363
+ const isReady = await this.checkServerHealth();
364
+ if (isReady) {
365
+ clearInterval(checkInterval);
366
+ resolve();
367
+ }
368
+ }
369
+ catch {
370
+ // Server not ready yet
371
+ }
372
+ }, 500);
373
+ // Timeout after 60 seconds
374
+ setTimeout(() => {
375
+ clearInterval(checkInterval);
376
+ reject(new Error('Timeout waiting for ruvllm server to start'));
377
+ }, 60000);
378
+ });
379
+ }
380
+ /**
381
+ * Check if server is healthy
382
+ */
383
+ async checkServerHealth() {
384
+ try {
385
+ const response = await fetch(`${this.baseUrl}/health`, {
386
+ signal: AbortSignal.timeout(5000)
387
+ });
388
+ return response.ok;
389
+ }
390
+ catch {
391
+ return false;
392
+ }
393
+ }
394
+ /**
395
+ * Ensure provider is initialized
396
+ */
397
+ ensureInitialized() {
398
+ if (!this.isInitialized) {
399
+ throw new ILLMProvider_1.LLMProviderError('RuvllmProvider not initialized. Call initialize() first.', 'ruvllm', 'NOT_INITIALIZED', false);
400
+ }
401
+ }
402
+ /**
403
+ * Map finish reason to standard stop reason
404
+ */
405
+ mapStopReason(reason) {
406
+ switch (reason) {
407
+ case 'length':
408
+ return 'max_tokens';
409
+ case 'stop':
410
+ return 'stop_sequence';
411
+ default:
412
+ return 'end_turn';
413
+ }
414
+ }
415
+ }
416
+ exports.RuvllmProvider = RuvllmProvider;
417
+ //# sourceMappingURL=RuvllmProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RuvllmProvider.js","sourceRoot":"","sources":["../../src/providers/RuvllmProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * LLM Providers - Unified LLM Provider Layer
3
+ *
4
+ * This module provides a unified interface for multiple LLM providers:
5
+ * - ClaudeProvider: Anthropic Claude API
6
+ * - RuvllmProvider: Local LLM inference via ruvllm
7
+ * - LLMProviderFactory: Factory for provider creation and hybrid routing
8
+ *
9
+ * @module providers
10
+ * @version 1.0.0
11
+ */
12
+ export { ILLMProvider, LLMProviderConfig, LLMCompletionOptions, LLMCompletionResponse, LLMStreamEvent, LLMEmbeddingOptions, LLMEmbeddingResponse, LLMTokenCountOptions, LLMHealthStatus, LLMProviderMetadata, LLMMessageParam, LLMTextBlockParam, LLMProviderError, isLLMProviderError } from './ILLMProvider';
13
+ export { ClaudeProvider, ClaudeProviderConfig } from './ClaudeProvider';
14
+ export { RuvllmProvider, RuvllmProviderConfig } from './RuvllmProvider';
15
+ export { LLMProviderFactory, LLMProviderFactoryConfig, ProviderType, ProviderSelectionCriteria, ProviderUsageStats, getGlobalLLMFactory, setGlobalLLMFactory } from './LLMProviderFactory';
16
+ import type { ILLMProvider } from './ILLMProvider';
17
+ /**
18
+ * Create a default LLM provider based on environment
19
+ *
20
+ * Uses Claude if ANTHROPIC_API_KEY is set, otherwise attempts ruvllm
21
+ */
22
+ export declare function createDefaultProvider(): Promise<ILLMProvider>;
23
+ /**
24
+ * Create a hybrid provider that routes between local and cloud
25
+ */
26
+ export declare function createHybridProvider(config?: {
27
+ preferLocal?: boolean;
28
+ claudeConfig?: any;
29
+ ruvllmConfig?: any;
30
+ }): Promise<ILLMProvider>;
31
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,EACrB,cAAc,EACd,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAGxE,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,YAAY,EACZ,yBAAyB,EACzB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAKnD;;;;GAIG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,YAAY,CAAC,CAkBnE;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,CAAC,EAAE;IAClD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,YAAY,CAAC,EAAE,GAAG,CAAC;CACpB,GAAG,OAAO,CAAC,YAAY,CAAC,CAWxB"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ /**
3
+ * LLM Providers - Unified LLM Provider Layer
4
+ *
5
+ * This module provides a unified interface for multiple LLM providers:
6
+ * - ClaudeProvider: Anthropic Claude API
7
+ * - RuvllmProvider: Local LLM inference via ruvllm
8
+ * - LLMProviderFactory: Factory for provider creation and hybrid routing
9
+ *
10
+ * @module providers
11
+ * @version 1.0.0
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.setGlobalLLMFactory = exports.getGlobalLLMFactory = exports.LLMProviderFactory = exports.RuvllmProvider = exports.ClaudeProvider = exports.isLLMProviderError = exports.LLMProviderError = void 0;
15
+ exports.createDefaultProvider = createDefaultProvider;
16
+ exports.createHybridProvider = createHybridProvider;
17
+ // Core interface and types
18
+ var ILLMProvider_1 = require("./ILLMProvider");
19
+ Object.defineProperty(exports, "LLMProviderError", { enumerable: true, get: function () { return ILLMProvider_1.LLMProviderError; } });
20
+ Object.defineProperty(exports, "isLLMProviderError", { enumerable: true, get: function () { return ILLMProvider_1.isLLMProviderError; } });
21
+ // Provider implementations
22
+ var ClaudeProvider_1 = require("./ClaudeProvider");
23
+ Object.defineProperty(exports, "ClaudeProvider", { enumerable: true, get: function () { return ClaudeProvider_1.ClaudeProvider; } });
24
+ var RuvllmProvider_1 = require("./RuvllmProvider");
25
+ Object.defineProperty(exports, "RuvllmProvider", { enumerable: true, get: function () { return RuvllmProvider_1.RuvllmProvider; } });
26
+ // Factory and utilities
27
+ var LLMProviderFactory_1 = require("./LLMProviderFactory");
28
+ Object.defineProperty(exports, "LLMProviderFactory", { enumerable: true, get: function () { return LLMProviderFactory_1.LLMProviderFactory; } });
29
+ Object.defineProperty(exports, "getGlobalLLMFactory", { enumerable: true, get: function () { return LLMProviderFactory_1.getGlobalLLMFactory; } });
30
+ Object.defineProperty(exports, "setGlobalLLMFactory", { enumerable: true, get: function () { return LLMProviderFactory_1.setGlobalLLMFactory; } });
31
+ const ClaudeProvider_2 = require("./ClaudeProvider");
32
+ const RuvllmProvider_2 = require("./RuvllmProvider");
33
+ const LLMProviderFactory_2 = require("./LLMProviderFactory");
34
+ /**
35
+ * Create a default LLM provider based on environment
36
+ *
37
+ * Uses Claude if ANTHROPIC_API_KEY is set, otherwise attempts ruvllm
38
+ */
39
+ async function createDefaultProvider() {
40
+ // Try Claude first (most common use case)
41
+ if (process.env.ANTHROPIC_API_KEY) {
42
+ const provider = new ClaudeProvider_2.ClaudeProvider();
43
+ await provider.initialize();
44
+ return provider;
45
+ }
46
+ // Fall back to local ruvllm
47
+ const provider = new RuvllmProvider_2.RuvllmProvider();
48
+ try {
49
+ await provider.initialize();
50
+ return provider;
51
+ }
52
+ catch {
53
+ throw new Error('No LLM provider available. Set ANTHROPIC_API_KEY for Claude or ensure ruvllm is installed.');
54
+ }
55
+ }
56
+ /**
57
+ * Create a hybrid provider that routes between local and cloud
58
+ */
59
+ async function createHybridProvider(config) {
60
+ const factory = new LLMProviderFactory_2.LLMProviderFactory({
61
+ claude: config?.claudeConfig,
62
+ ruvllm: config?.ruvllmConfig,
63
+ defaultProvider: config?.preferLocal ? 'ruvllm' : 'claude',
64
+ enableFallback: true
65
+ });
66
+ await factory.initialize();
67
+ return factory.createHybridRouter();
68
+ }
69
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;AA6CH,sDAkBC;AAKD,oDAeC;AAjFD,2BAA2B;AAC3B,+CAewB;AAFtB,gHAAA,gBAAgB,OAAA;AAChB,kHAAA,kBAAkB,OAAA;AAGpB,2BAA2B;AAC3B,mDAAwE;AAA/D,gHAAA,cAAc,OAAA;AACvB,mDAAwE;AAA/D,gHAAA,cAAc,OAAA;AAEvB,wBAAwB;AACxB,2DAQ8B;AAP5B,wHAAA,kBAAkB,OAAA;AAKlB,yHAAA,mBAAmB,OAAA;AACnB,yHAAA,mBAAmB,OAAA;AAIrB,qDAAkD;AAClD,qDAAkD;AAClD,6DAA0D;AAE1D;;;;GAIG;AACI,KAAK,UAAU,qBAAqB;IACzC,0CAA0C;IAC1C,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,IAAI,+BAAc,EAAE,CAAC;QACtC,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;QAC5B,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,4BAA4B;IAC5B,MAAM,QAAQ,GAAG,IAAI,+BAAc,EAAE,CAAC;IACtC,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;QAC5B,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,4FAA4F,CAC7F,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,oBAAoB,CAAC,MAI1C;IACC,MAAM,OAAO,GAAG,IAAI,uCAAkB,CAAC;QACrC,MAAM,EAAE,MAAM,EAAE,YAAY;QAC5B,MAAM,EAAE,MAAM,EAAE,YAAY;QAC5B,eAAe,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ;QAC1D,cAAc,EAAE,IAAI;KACrB,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;IAE3B,OAAO,OAAO,CAAC,kBAAkB,EAAE,CAAC;AACtC,CAAC"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Global Interval Registry for Memory Leak Prevention
3
+ *
4
+ * Provides a centralized registry for tracking intervals that need cleanup.
5
+ * This is especially important for:
6
+ * - Module-level intervals that persist across tests
7
+ * - Intervals in singleton instances
8
+ * - Cleanup during graceful shutdown
9
+ *
10
+ * Usage:
11
+ * ```typescript
12
+ * import { IntervalRegistry } from './utils/IntervalRegistry';
13
+ *
14
+ * // Register an interval for cleanup
15
+ * const intervalId = setInterval(fn, 1000);
16
+ * IntervalRegistry.register('my-feature', intervalId);
17
+ *
18
+ * // Register with shutdown callback
19
+ * IntervalRegistry.registerWithShutdown('my-feature', {
20
+ * interval: intervalId,
21
+ * shutdown: async () => { ... }
22
+ * });
23
+ *
24
+ * // Cleanup specific feature
25
+ * await IntervalRegistry.shutdown('my-feature');
26
+ *
27
+ * // Cleanup all (for tests or process exit)
28
+ * await IntervalRegistry.shutdownAll();
29
+ * ```
30
+ *
31
+ * @module utils/IntervalRegistry
32
+ */
33
+ export interface RegisteredInterval {
34
+ interval: NodeJS.Timeout;
35
+ shutdown?: () => Promise<void> | void;
36
+ registeredAt: number;
37
+ }
38
+ /**
39
+ * Global registry for tracking intervals that need cleanup
40
+ */
41
+ declare class IntervalRegistryClass {
42
+ private registry;
43
+ private shutdownCallbacks;
44
+ /**
45
+ * Register an interval for later cleanup
46
+ *
47
+ * @param feature - Feature/module name for grouping
48
+ * @param interval - The interval handle from setInterval
49
+ */
50
+ register(feature: string, interval: NodeJS.Timeout): void;
51
+ /**
52
+ * Register an interval with a custom shutdown callback
53
+ *
54
+ * @param feature - Feature/module name for grouping
55
+ * @param config - Interval and optional shutdown callback
56
+ */
57
+ registerWithShutdown(feature: string, config: {
58
+ interval: NodeJS.Timeout;
59
+ shutdown?: () => Promise<void> | void;
60
+ }): void;
61
+ /**
62
+ * Register a shutdown callback for a feature
63
+ * This is called even if no intervals are registered
64
+ *
65
+ * @param feature - Feature/module name
66
+ * @param callback - Shutdown callback
67
+ */
68
+ registerShutdownCallback(feature: string, callback: () => Promise<void> | void): void;
69
+ /**
70
+ * Unregister a specific interval
71
+ *
72
+ * @param feature - Feature name
73
+ * @param interval - The interval to unregister
74
+ */
75
+ unregister(feature: string, interval: NodeJS.Timeout): void;
76
+ /**
77
+ * Shutdown all intervals for a specific feature
78
+ *
79
+ * @param feature - Feature name to shutdown
80
+ */
81
+ shutdown(feature: string): Promise<void>;
82
+ /**
83
+ * Shutdown all registered intervals
84
+ * Typically called during test teardown or process exit
85
+ */
86
+ shutdownAll(): Promise<void>;
87
+ /**
88
+ * Get statistics about registered intervals
89
+ */
90
+ getStats(): {
91
+ totalIntervals: number;
92
+ features: string[];
93
+ byFeature: Record<string, number>;
94
+ };
95
+ /**
96
+ * Clear all registrations without calling shutdown
97
+ * Use with caution - primarily for testing
98
+ */
99
+ clear(): void;
100
+ }
101
+ /**
102
+ * Singleton instance of the interval registry
103
+ */
104
+ export declare const IntervalRegistry: IntervalRegistryClass;
105
+ /**
106
+ * Export shutdown functions for chaos handlers and other modules
107
+ */
108
+ export { shutdown as shutdownChaosLatency } from '../mcp/handlers/chaos/chaos-inject-latency';
109
+ export { shutdown as shutdownChaosFailure } from '../mcp/handlers/chaos/chaos-inject-failure';
110
+ //# sourceMappingURL=IntervalRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IntervalRegistry.d.ts","sourceRoot":"","sources":["../../src/utils/IntervalRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACtC,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,cAAM,qBAAqB;IACzB,OAAO,CAAC,QAAQ,CAAgD;IAChE,OAAO,CAAC,iBAAiB,CAAsD;IAE/E;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI;IAWzD;;;;;OAKG;IACH,oBAAoB,CAClB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;KAAE,GAC1E,IAAI;IAYP;;;;;;OAMG;IACH,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI;IAIrF;;;;;OAKG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI;IAY3D;;;;OAIG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA6B9C;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBlC;;OAEG;IACH,QAAQ,IAAI;QACV,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACnC;IAgBD;;;OAGG;IACH,KAAK,IAAI,IAAI;CASd;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,uBAA8B,CAAC;AAE5D;;GAEG;AACH,OAAO,EAAE,QAAQ,IAAI,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAC9F,OAAO,EAAE,QAAQ,IAAI,oBAAoB,EAAE,MAAM,4CAA4C,CAAC"}