agentic-qe 2.5.6 → 2.5.8

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 (210) hide show
  1. package/.claude/agents/n8n/n8n-base-agent.md +376 -0
  2. package/.claude/agents/n8n/n8n-bdd-scenario-tester.md +613 -0
  3. package/.claude/agents/n8n/n8n-chaos-tester.md +654 -0
  4. package/.claude/agents/n8n/n8n-ci-orchestrator.md +850 -0
  5. package/.claude/agents/n8n/n8n-compliance-validator.md +685 -0
  6. package/.claude/agents/n8n/n8n-expression-validator.md +560 -0
  7. package/.claude/agents/n8n/n8n-integration-test.md +602 -0
  8. package/.claude/agents/n8n/n8n-monitoring-validator.md +589 -0
  9. package/.claude/agents/n8n/n8n-node-validator.md +455 -0
  10. package/.claude/agents/n8n/n8n-performance-tester.md +630 -0
  11. package/.claude/agents/n8n/n8n-security-auditor.md +786 -0
  12. package/.claude/agents/n8n/n8n-trigger-test.md +500 -0
  13. package/.claude/agents/n8n/n8n-unit-tester.md +633 -0
  14. package/.claude/agents/n8n/n8n-version-comparator.md +567 -0
  15. package/.claude/agents/n8n/n8n-workflow-executor.md +392 -0
  16. package/.claude/skills/n8n-expression-testing/SKILL.md +434 -0
  17. package/.claude/skills/n8n-integration-testing-patterns/SKILL.md +540 -0
  18. package/.claude/skills/n8n-security-testing/SKILL.md +599 -0
  19. package/.claude/skills/n8n-trigger-testing-strategies/SKILL.md +541 -0
  20. package/.claude/skills/n8n-workflow-testing-fundamentals/SKILL.md +447 -0
  21. package/CHANGELOG.md +127 -0
  22. package/README.md +7 -4
  23. package/dist/agents/BaseAgent.d.ts +142 -0
  24. package/dist/agents/BaseAgent.d.ts.map +1 -1
  25. package/dist/agents/BaseAgent.js +372 -2
  26. package/dist/agents/BaseAgent.js.map +1 -1
  27. package/dist/agents/TestGeneratorAgent.d.ts +5 -0
  28. package/dist/agents/TestGeneratorAgent.d.ts.map +1 -1
  29. package/dist/agents/TestGeneratorAgent.js +38 -0
  30. package/dist/agents/TestGeneratorAgent.js.map +1 -1
  31. package/dist/agents/index.d.ts +1 -1
  32. package/dist/agents/index.d.ts.map +1 -1
  33. package/dist/agents/index.js.map +1 -1
  34. package/dist/agents/n8n/N8nAPIClient.d.ts +121 -0
  35. package/dist/agents/n8n/N8nAPIClient.d.ts.map +1 -0
  36. package/dist/agents/n8n/N8nAPIClient.js +367 -0
  37. package/dist/agents/n8n/N8nAPIClient.js.map +1 -0
  38. package/dist/agents/n8n/N8nAuditPersistence.d.ts +120 -0
  39. package/dist/agents/n8n/N8nAuditPersistence.d.ts.map +1 -0
  40. package/dist/agents/n8n/N8nAuditPersistence.js +473 -0
  41. package/dist/agents/n8n/N8nAuditPersistence.js.map +1 -0
  42. package/dist/agents/n8n/N8nBDDScenarioTesterAgent.d.ts +159 -0
  43. package/dist/agents/n8n/N8nBDDScenarioTesterAgent.d.ts.map +1 -0
  44. package/dist/agents/n8n/N8nBDDScenarioTesterAgent.js +697 -0
  45. package/dist/agents/n8n/N8nBDDScenarioTesterAgent.js.map +1 -0
  46. package/dist/agents/n8n/N8nBaseAgent.d.ts +126 -0
  47. package/dist/agents/n8n/N8nBaseAgent.d.ts.map +1 -0
  48. package/dist/agents/n8n/N8nBaseAgent.js +446 -0
  49. package/dist/agents/n8n/N8nBaseAgent.js.map +1 -0
  50. package/dist/agents/n8n/N8nCIOrchestratorAgent.d.ts +164 -0
  51. package/dist/agents/n8n/N8nCIOrchestratorAgent.d.ts.map +1 -0
  52. package/dist/agents/n8n/N8nCIOrchestratorAgent.js +610 -0
  53. package/dist/agents/n8n/N8nCIOrchestratorAgent.js.map +1 -0
  54. package/dist/agents/n8n/N8nChaosTesterAgent.d.ts +205 -0
  55. package/dist/agents/n8n/N8nChaosTesterAgent.d.ts.map +1 -0
  56. package/dist/agents/n8n/N8nChaosTesterAgent.js +729 -0
  57. package/dist/agents/n8n/N8nChaosTesterAgent.js.map +1 -0
  58. package/dist/agents/n8n/N8nComplianceValidatorAgent.d.ts +228 -0
  59. package/dist/agents/n8n/N8nComplianceValidatorAgent.d.ts.map +1 -0
  60. package/dist/agents/n8n/N8nComplianceValidatorAgent.js +986 -0
  61. package/dist/agents/n8n/N8nComplianceValidatorAgent.js.map +1 -0
  62. package/dist/agents/n8n/N8nContractTesterAgent.d.ts +213 -0
  63. package/dist/agents/n8n/N8nContractTesterAgent.d.ts.map +1 -0
  64. package/dist/agents/n8n/N8nContractTesterAgent.js +989 -0
  65. package/dist/agents/n8n/N8nContractTesterAgent.js.map +1 -0
  66. package/dist/agents/n8n/N8nExpressionValidatorAgent.d.ts +99 -0
  67. package/dist/agents/n8n/N8nExpressionValidatorAgent.d.ts.map +1 -0
  68. package/dist/agents/n8n/N8nExpressionValidatorAgent.js +632 -0
  69. package/dist/agents/n8n/N8nExpressionValidatorAgent.js.map +1 -0
  70. package/dist/agents/n8n/N8nFailureModeTesterAgent.d.ts +238 -0
  71. package/dist/agents/n8n/N8nFailureModeTesterAgent.d.ts.map +1 -0
  72. package/dist/agents/n8n/N8nFailureModeTesterAgent.js +956 -0
  73. package/dist/agents/n8n/N8nFailureModeTesterAgent.js.map +1 -0
  74. package/dist/agents/n8n/N8nIdempotencyTesterAgent.d.ts +242 -0
  75. package/dist/agents/n8n/N8nIdempotencyTesterAgent.d.ts.map +1 -0
  76. package/dist/agents/n8n/N8nIdempotencyTesterAgent.js +992 -0
  77. package/dist/agents/n8n/N8nIdempotencyTesterAgent.js.map +1 -0
  78. package/dist/agents/n8n/N8nIntegrationTestAgent.d.ts +104 -0
  79. package/dist/agents/n8n/N8nIntegrationTestAgent.d.ts.map +1 -0
  80. package/dist/agents/n8n/N8nIntegrationTestAgent.js +653 -0
  81. package/dist/agents/n8n/N8nIntegrationTestAgent.js.map +1 -0
  82. package/dist/agents/n8n/N8nMonitoringValidatorAgent.d.ts +210 -0
  83. package/dist/agents/n8n/N8nMonitoringValidatorAgent.d.ts.map +1 -0
  84. package/dist/agents/n8n/N8nMonitoringValidatorAgent.js +669 -0
  85. package/dist/agents/n8n/N8nMonitoringValidatorAgent.js.map +1 -0
  86. package/dist/agents/n8n/N8nNodeValidatorAgent.d.ts +142 -0
  87. package/dist/agents/n8n/N8nNodeValidatorAgent.d.ts.map +1 -0
  88. package/dist/agents/n8n/N8nNodeValidatorAgent.js +1090 -0
  89. package/dist/agents/n8n/N8nNodeValidatorAgent.js.map +1 -0
  90. package/dist/agents/n8n/N8nPerformanceTesterAgent.d.ts +198 -0
  91. package/dist/agents/n8n/N8nPerformanceTesterAgent.d.ts.map +1 -0
  92. package/dist/agents/n8n/N8nPerformanceTesterAgent.js +653 -0
  93. package/dist/agents/n8n/N8nPerformanceTesterAgent.js.map +1 -0
  94. package/dist/agents/n8n/N8nReplayabilityTesterAgent.d.ts +245 -0
  95. package/dist/agents/n8n/N8nReplayabilityTesterAgent.d.ts.map +1 -0
  96. package/dist/agents/n8n/N8nReplayabilityTesterAgent.js +952 -0
  97. package/dist/agents/n8n/N8nReplayabilityTesterAgent.js.map +1 -0
  98. package/dist/agents/n8n/N8nSecretsHygieneAuditorAgent.d.ts +325 -0
  99. package/dist/agents/n8n/N8nSecretsHygieneAuditorAgent.d.ts.map +1 -0
  100. package/dist/agents/n8n/N8nSecretsHygieneAuditorAgent.js +1187 -0
  101. package/dist/agents/n8n/N8nSecretsHygieneAuditorAgent.js.map +1 -0
  102. package/dist/agents/n8n/N8nSecurityAuditorAgent.d.ts +91 -0
  103. package/dist/agents/n8n/N8nSecurityAuditorAgent.d.ts.map +1 -0
  104. package/dist/agents/n8n/N8nSecurityAuditorAgent.js +825 -0
  105. package/dist/agents/n8n/N8nSecurityAuditorAgent.js.map +1 -0
  106. package/dist/agents/n8n/N8nTestHarness.d.ts +131 -0
  107. package/dist/agents/n8n/N8nTestHarness.d.ts.map +1 -0
  108. package/dist/agents/n8n/N8nTestHarness.js +456 -0
  109. package/dist/agents/n8n/N8nTestHarness.js.map +1 -0
  110. package/dist/agents/n8n/N8nTriggerTestAgent.d.ts +119 -0
  111. package/dist/agents/n8n/N8nTriggerTestAgent.d.ts.map +1 -0
  112. package/dist/agents/n8n/N8nTriggerTestAgent.js +652 -0
  113. package/dist/agents/n8n/N8nTriggerTestAgent.js.map +1 -0
  114. package/dist/agents/n8n/N8nUnitTesterAgent.d.ts +130 -0
  115. package/dist/agents/n8n/N8nUnitTesterAgent.d.ts.map +1 -0
  116. package/dist/agents/n8n/N8nUnitTesterAgent.js +522 -0
  117. package/dist/agents/n8n/N8nUnitTesterAgent.js.map +1 -0
  118. package/dist/agents/n8n/N8nVersionComparatorAgent.d.ts +201 -0
  119. package/dist/agents/n8n/N8nVersionComparatorAgent.d.ts.map +1 -0
  120. package/dist/agents/n8n/N8nVersionComparatorAgent.js +645 -0
  121. package/dist/agents/n8n/N8nVersionComparatorAgent.js.map +1 -0
  122. package/dist/agents/n8n/N8nWorkflowExecutorAgent.d.ts +120 -0
  123. package/dist/agents/n8n/N8nWorkflowExecutorAgent.d.ts.map +1 -0
  124. package/dist/agents/n8n/N8nWorkflowExecutorAgent.js +347 -0
  125. package/dist/agents/n8n/N8nWorkflowExecutorAgent.js.map +1 -0
  126. package/dist/agents/n8n/index.d.ts +119 -0
  127. package/dist/agents/n8n/index.d.ts.map +1 -0
  128. package/dist/agents/n8n/index.js +298 -0
  129. package/dist/agents/n8n/index.js.map +1 -0
  130. package/dist/agents/n8n/types.d.ts +486 -0
  131. package/dist/agents/n8n/types.d.ts.map +1 -0
  132. package/dist/agents/n8n/types.js +8 -0
  133. package/dist/agents/n8n/types.js.map +1 -0
  134. package/dist/cli/init/agents.d.ts.map +1 -1
  135. package/dist/cli/init/agents.js +29 -0
  136. package/dist/cli/init/agents.js.map +1 -1
  137. package/dist/cli/init/skills.d.ts.map +1 -1
  138. package/dist/cli/init/skills.js +7 -1
  139. package/dist/cli/init/skills.js.map +1 -1
  140. package/dist/core/memory/HNSWVectorMemory.js +1 -1
  141. package/dist/core/memory/RuVectorPatternStore.d.ts +90 -0
  142. package/dist/core/memory/RuVectorPatternStore.d.ts.map +1 -1
  143. package/dist/core/memory/RuVectorPatternStore.js +209 -0
  144. package/dist/core/memory/RuVectorPatternStore.js.map +1 -1
  145. package/dist/learning/FederatedManager.d.ts +232 -0
  146. package/dist/learning/FederatedManager.d.ts.map +1 -0
  147. package/dist/learning/FederatedManager.js +489 -0
  148. package/dist/learning/FederatedManager.js.map +1 -0
  149. package/dist/learning/HNSWPatternAdapter.d.ts +117 -0
  150. package/dist/learning/HNSWPatternAdapter.d.ts.map +1 -0
  151. package/dist/learning/HNSWPatternAdapter.js +262 -0
  152. package/dist/learning/HNSWPatternAdapter.js.map +1 -0
  153. package/dist/learning/LearningEngine.d.ts +27 -0
  154. package/dist/learning/LearningEngine.d.ts.map +1 -1
  155. package/dist/learning/LearningEngine.js +75 -1
  156. package/dist/learning/LearningEngine.js.map +1 -1
  157. package/dist/learning/PatternCurator.d.ts +217 -0
  158. package/dist/learning/PatternCurator.d.ts.map +1 -0
  159. package/dist/learning/PatternCurator.js +393 -0
  160. package/dist/learning/PatternCurator.js.map +1 -0
  161. package/dist/learning/index.d.ts +6 -0
  162. package/dist/learning/index.d.ts.map +1 -1
  163. package/dist/learning/index.js +16 -1
  164. package/dist/learning/index.js.map +1 -1
  165. package/dist/learning/types.d.ts +4 -0
  166. package/dist/learning/types.d.ts.map +1 -1
  167. package/dist/mcp/server-instructions.d.ts +1 -1
  168. package/dist/mcp/server-instructions.js +1 -1
  169. package/dist/memory/HNSWPatternStore.d.ts +176 -0
  170. package/dist/memory/HNSWPatternStore.d.ts.map +1 -0
  171. package/dist/memory/HNSWPatternStore.js +392 -0
  172. package/dist/memory/HNSWPatternStore.js.map +1 -0
  173. package/dist/memory/index.d.ts +8 -0
  174. package/dist/memory/index.d.ts.map +1 -0
  175. package/dist/memory/index.js +13 -0
  176. package/dist/memory/index.js.map +1 -0
  177. package/dist/providers/HybridRouter.d.ts +85 -4
  178. package/dist/providers/HybridRouter.d.ts.map +1 -1
  179. package/dist/providers/HybridRouter.js +332 -10
  180. package/dist/providers/HybridRouter.js.map +1 -1
  181. package/dist/providers/LLMBaselineTracker.d.ts +120 -0
  182. package/dist/providers/LLMBaselineTracker.d.ts.map +1 -0
  183. package/dist/providers/LLMBaselineTracker.js +305 -0
  184. package/dist/providers/LLMBaselineTracker.js.map +1 -0
  185. package/dist/providers/OpenRouterProvider.d.ts +26 -0
  186. package/dist/providers/OpenRouterProvider.d.ts.map +1 -1
  187. package/dist/providers/OpenRouterProvider.js +75 -6
  188. package/dist/providers/OpenRouterProvider.js.map +1 -1
  189. package/dist/providers/RuVectorClient.d.ts +259 -0
  190. package/dist/providers/RuVectorClient.d.ts.map +1 -0
  191. package/dist/providers/RuVectorClient.js +416 -0
  192. package/dist/providers/RuVectorClient.js.map +1 -0
  193. package/dist/providers/RuvllmPatternCurator.d.ts +116 -0
  194. package/dist/providers/RuvllmPatternCurator.d.ts.map +1 -0
  195. package/dist/providers/RuvllmPatternCurator.js +323 -0
  196. package/dist/providers/RuvllmPatternCurator.js.map +1 -0
  197. package/dist/providers/RuvllmProvider.d.ts +233 -1
  198. package/dist/providers/RuvllmProvider.d.ts.map +1 -1
  199. package/dist/providers/RuvllmProvider.js +781 -11
  200. package/dist/providers/RuvllmProvider.js.map +1 -1
  201. package/dist/providers/index.d.ts +5 -1
  202. package/dist/providers/index.d.ts.map +1 -1
  203. package/dist/providers/index.js +12 -2
  204. package/dist/providers/index.js.map +1 -1
  205. package/dist/utils/ruvllm-loader.d.ts +98 -1
  206. package/dist/utils/ruvllm-loader.d.ts.map +1 -1
  207. package/dist/utils/ruvllm-loader.js.map +1 -1
  208. package/docs/reference/agents.md +91 -2
  209. package/docs/reference/skills.md +97 -2
  210. package/package.json +2 -2
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * BaseAgent - Abstract base class for all QE agents
3
3
  * Phase 2 B1.2: Decomposed with strategy pattern (~500 LOC target)
4
+ * Phase 0: LLM Provider integration with RuvLLM support
4
5
  */
5
6
  import { EventEmitter } from 'events';
6
7
  import { AgentId, QEAgentType as AgentType, AgentStatus, AgentContext, AgentCapability, EventHandler, MemoryStore, QETask, TaskAssignment, PreTaskData, PostTaskData, TaskErrorData } from '../types';
@@ -10,12 +11,44 @@ import { SwarmMemoryManager } from '../core/memory/SwarmMemoryManager';
10
11
  import { LearningEngine } from '../learning/LearningEngine';
11
12
  import { LearningConfig, StrategyRecommendation } from '../learning/types';
12
13
  import { AgentDBConfig } from '../core/memory/AgentDBManager';
14
+ import { FederatedManager, FederatedConfig, LearnedPattern, EphemeralAgent } from '../learning/FederatedManager';
13
15
  import { AgentLifecycleManager } from './lifecycle/AgentLifecycleManager';
14
16
  import { AgentCoordinator } from './coordination/AgentCoordinator';
15
17
  import { AgentMemoryService } from './memory/AgentMemoryService';
18
+ import type { ILLMProvider, LLMCompletionOptions } from '../providers/ILLMProvider';
19
+ import { RuvllmProviderConfig } from '../providers/RuvllmProvider';
20
+ import { LLMProviderFactory, LLMProviderFactoryConfig, ProviderType } from '../providers/LLMProviderFactory';
16
21
  import type { AgentLifecycleStrategy, AgentMemoryStrategy, AgentLearningStrategy, AgentCoordinationStrategy } from '../core/strategies';
17
22
  import { isSwarmMemoryManager, validateLearningConfig } from './utils';
18
23
  export { isSwarmMemoryManager, validateLearningConfig };
24
+ /**
25
+ * LLM configuration for agents
26
+ */
27
+ export interface AgentLLMConfig {
28
+ /** Enable LLM capabilities for this agent */
29
+ enabled?: boolean;
30
+ /** Preferred provider type (auto, ruvllm, claude, openrouter) */
31
+ preferredProvider?: ProviderType;
32
+ /** RuvLLM specific configuration */
33
+ ruvllm?: Partial<RuvllmProviderConfig>;
34
+ /** Full factory configuration for advanced setups */
35
+ factoryConfig?: LLMProviderFactoryConfig;
36
+ /** Pre-configured LLM provider instance (for injection) */
37
+ provider?: ILLMProvider;
38
+ /** Enable session management for multi-turn conversations */
39
+ enableSessions?: boolean;
40
+ /** Enable batch processing for parallel requests */
41
+ enableBatch?: boolean;
42
+ /**
43
+ * Enable federated learning for team-wide pattern sharing
44
+ * Phase 0 M0.5 - Reduces Claude Code dependency through collective learning
45
+ */
46
+ enableFederated?: boolean;
47
+ /** Shared FederatedManager instance (for fleet-wide coordination) */
48
+ federatedManager?: FederatedManager;
49
+ /** Federated learning configuration */
50
+ federatedConfig?: Partial<FederatedConfig>;
51
+ }
19
52
  /**
20
53
  * Configuration for BaseAgent
21
54
  */
@@ -34,6 +67,8 @@ export interface BaseAgentConfig {
34
67
  memoryStrategy?: AgentMemoryStrategy;
35
68
  learningStrategy?: AgentLearningStrategy;
36
69
  coordinationStrategy?: AgentCoordinationStrategy;
70
+ /** LLM configuration - enables agents to make LLM calls via RuvLLM */
71
+ llm?: AgentLLMConfig;
37
72
  }
38
73
  export declare abstract class BaseAgent extends EventEmitter {
39
74
  protected readonly agentId: AgentId;
@@ -55,6 +90,13 @@ export declare abstract class BaseAgent extends EventEmitter {
55
90
  };
56
91
  private taskStartTime?;
57
92
  private initializationMutex?;
93
+ protected llmProvider?: ILLMProvider;
94
+ protected llmFactory?: LLMProviderFactory;
95
+ protected readonly llmConfig: AgentLLMConfig;
96
+ private llmSessionId?;
97
+ protected federatedManager?: FederatedManager;
98
+ protected ephemeralAgent?: EphemeralAgent;
99
+ private federatedInitialized;
58
100
  protected readonly lifecycleManager: AgentLifecycleManager;
59
101
  protected readonly coordinator: AgentCoordinator;
60
102
  protected readonly memoryService: AgentMemoryService;
@@ -138,6 +180,106 @@ export declare abstract class BaseAgent extends EventEmitter {
138
180
  private updatePerformanceMetrics;
139
181
  protected extractTaskMetrics(result: any): Record<string, number>;
140
182
  private saveState;
183
+ /**
184
+ * Initialize LLM provider for agent use
185
+ * Supports RuvLLM (local), Claude, and OpenRouter providers
186
+ */
187
+ private initializeLLMProvider;
188
+ /**
189
+ * Initialize Federated Learning for team-wide pattern sharing
190
+ * Phase 0 M0.5 - Reduces Claude Code dependency through collective learning
191
+ */
192
+ private initializeFederatedLearning;
193
+ /**
194
+ * Check if federated learning is available
195
+ */
196
+ hasFederatedLearning(): boolean;
197
+ /**
198
+ * Share a learned pattern with the team via federated learning
199
+ * Call this when the agent learns something useful (e.g., after successful task)
200
+ *
201
+ * @param pattern - The pattern to share (embedding, quality score, category)
202
+ */
203
+ protected shareLearnedPattern(pattern: Omit<LearnedPattern, 'id' | 'sourceAgent' | 'timestamp'>): Promise<void>;
204
+ /**
205
+ * Sync this agent with team-wide learned knowledge
206
+ * Call this periodically or before complex tasks
207
+ */
208
+ protected syncWithTeam(): Promise<void>;
209
+ /**
210
+ * Submit this agent's learning updates to the team
211
+ * Call after completing a batch of tasks
212
+ */
213
+ protected submitLearningUpdate(): Promise<void>;
214
+ /**
215
+ * Get federated learning metrics
216
+ */
217
+ getFederatedMetrics(): ReturnType<FederatedManager['getMetrics']> | null;
218
+ /**
219
+ * Check if LLM is available for this agent
220
+ */
221
+ hasLLM(): boolean;
222
+ /**
223
+ * Get LLM provider (for advanced usage)
224
+ */
225
+ getLLMProvider(): ILLMProvider | undefined;
226
+ /**
227
+ * Make an LLM completion call
228
+ * Uses RuvLLM's session management for 50% latency reduction on multi-turn
229
+ *
230
+ * @param prompt - The prompt to send to the LLM
231
+ * @param options - Additional completion options
232
+ * @returns The LLM response text
233
+ * @throws Error if LLM is not available
234
+ */
235
+ protected llmComplete(prompt: string, options?: Partial<LLMCompletionOptions>): Promise<string>;
236
+ /**
237
+ * Make a batch LLM completion call (4x throughput)
238
+ * Uses RuvLLM's native batch API for parallel processing
239
+ *
240
+ * @param prompts - Array of prompts to process in parallel
241
+ * @param options - Shared completion options
242
+ * @returns Array of response texts in same order as prompts
243
+ */
244
+ protected llmBatchComplete(prompts: string[], options?: Partial<LLMCompletionOptions>): Promise<string[]>;
245
+ /**
246
+ * Generate embeddings for text
247
+ * Uses RuvLLM's SIMD-optimized embedding generation
248
+ *
249
+ * @param text - Text to embed
250
+ * @returns Embedding vector
251
+ */
252
+ protected llmEmbed(text: string): Promise<number[]>;
253
+ /**
254
+ * Chat within agent's session (50% faster for multi-turn)
255
+ * Only works with RuvLLM provider with sessions enabled
256
+ *
257
+ * @param input - User input to chat
258
+ * @returns Assistant response
259
+ */
260
+ protected llmChat(input: string): Promise<string>;
261
+ /**
262
+ * Get routing decision for observability
263
+ * Shows which model was selected and why
264
+ */
265
+ protected getLLMRoutingDecision(input: string): any;
266
+ /**
267
+ * Get LLM usage statistics for this agent
268
+ */
269
+ getLLMStats(): {
270
+ available: boolean;
271
+ sessionId?: string;
272
+ provider?: string;
273
+ };
274
+ /**
275
+ * Cleanup LLM resources on agent termination
276
+ */
277
+ private cleanupLLM;
278
+ /**
279
+ * Cleanup federated learning resources on agent termination
280
+ * Submits final learning updates and unregisters from the coordinator
281
+ */
282
+ private cleanupFederated;
141
283
  }
142
284
  export interface AgentFactory {
143
285
  createAgent(type: AgentType, config: BaseAgentConfig): Promise<BaseAgent>;
@@ -1 +1 @@
1
- {"version":3,"file":"BaseAgent.d.ts","sourceRoot":"","sources":["../../src/agents/BaseAgent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BaseAgent.d.ts","sourceRoot":"","sources":["../../src/agents/BaseAgent.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@
2
2
  /**
3
3
  * BaseAgent - Abstract base class for all QE agents
4
4
  * Phase 2 B1.2: Decomposed with strategy pattern (~500 LOC target)
5
+ * Phase 0: LLM Provider integration with RuvLLM support
5
6
  */
6
7
  Object.defineProperty(exports, "__esModule", { value: true });
7
8
  exports.BaseAgentFactory = exports.BaseAgent = exports.validateLearningConfig = exports.isSwarmMemoryManager = void 0;
@@ -12,9 +13,13 @@ const MemoryStoreAdapter_1 = require("../adapters/MemoryStoreAdapter");
12
13
  const PerformanceTracker_1 = require("../learning/PerformanceTracker");
13
14
  const SwarmMemoryManager_1 = require("../core/memory/SwarmMemoryManager");
14
15
  const LearningEngine_1 = require("../learning/LearningEngine");
16
+ // Federated Learning (Phase 0 M0.5 - Team-wide pattern sharing)
17
+ const FederatedManager_1 = require("../learning/FederatedManager");
15
18
  const AgentLifecycleManager_1 = require("./lifecycle/AgentLifecycleManager");
16
19
  const AgentCoordinator_1 = require("./coordination/AgentCoordinator");
17
20
  const AgentMemoryService_1 = require("./memory/AgentMemoryService");
21
+ const RuvllmProvider_1 = require("../providers/RuvllmProvider");
22
+ const LLMProviderFactory_1 = require("../providers/LLMProviderFactory");
18
23
  const adapters_1 = require("./adapters");
19
24
  // Extracted utilities (B1.2)
20
25
  const utils_1 = require("./utils");
@@ -24,6 +29,7 @@ class BaseAgent extends events_1.EventEmitter {
24
29
  constructor(config) {
25
30
  super();
26
31
  this.performanceMetrics = { tasksCompleted: 0, averageExecutionTime: 0, errorCount: 0, lastActivity: new Date() };
32
+ this.federatedInitialized = false;
27
33
  this.agentId = { id: config.id || (0, utils_1.generateAgentId)(config.type), type: config.type, created: new Date() };
28
34
  this.capabilities = new Map(config.capabilities.map(cap => [cap.name, cap]));
29
35
  this.context = config.context;
@@ -31,6 +37,8 @@ class BaseAgent extends events_1.EventEmitter {
31
37
  this.eventBus = config.eventBus;
32
38
  this.enableLearning = config.enableLearning ?? true;
33
39
  this.learningConfig = config.learningConfig;
40
+ // LLM configuration (Phase 0 - default enabled with RuvLLM)
41
+ this.llmConfig = config.llm ?? { enabled: true, preferredProvider: 'ruvllm' };
34
42
  // Early validation (Issue #137)
35
43
  const validation = (0, utils_1.validateLearningConfig)(config);
36
44
  if (!validation.valid && validation.warning) {
@@ -91,6 +99,10 @@ class BaseAgent extends events_1.EventEmitter {
91
99
  else if (this.enableLearning) {
92
100
  console.warn(`[${this.agentId.id}] Learning disabled: memoryStore is ${this.memoryStore.constructor.name}`);
93
101
  }
102
+ // Initialize LLM Provider (Phase 0 - RuvLLM Integration)
103
+ await this.initializeLLMProvider();
104
+ // Initialize Federated Learning (Phase 0 M0.5)
105
+ await this.initializeFederatedLearning();
94
106
  await this.initializeComponents();
95
107
  await this.executeHook('post-initialization');
96
108
  this.coordinator.emitEvent('agent.initialized', { agentId: this.agentId });
@@ -144,6 +156,8 @@ class BaseAgent extends events_1.EventEmitter {
144
156
  await this.executeHook('pre-termination');
145
157
  await this.saveState();
146
158
  await this.cleanup();
159
+ await this.cleanupLLM(); // Phase 0: Cleanup LLM resources
160
+ await this.cleanupFederated(); // Phase 0 M0.5: Cleanup federated learning
147
161
  this.coordinator.clearAllHandlers();
148
162
  },
149
163
  onPostTermination: async () => {
@@ -356,18 +370,34 @@ class BaseAgent extends events_1.EventEmitter {
356
370
  duration: executionTime, metadata: { taskId: data.assignment.id, accuracy: result.accuracy, metrics: this.extractTaskMetrics(data.result) }
357
371
  });
358
372
  }
373
+ // Share successful patterns with team via federated learning (Phase 0 M0.5)
374
+ if (result.valid && this.federatedInitialized && this.llmProvider) {
375
+ try {
376
+ // Generate embedding for the task pattern
377
+ const taskDescription = `${data.assignment.task.type}: ${JSON.stringify(data.assignment.task.payload || {}).slice(0, 200)}`;
378
+ const embedding = await this.llmEmbed(taskDescription);
379
+ await this.shareLearnedPattern({
380
+ embedding,
381
+ quality: result.accuracy ?? 0.8,
382
+ category: data.assignment.task.type,
383
+ });
384
+ }
385
+ catch {
386
+ // Pattern sharing failed - non-critical, continue
387
+ }
388
+ }
359
389
  this.emitEvent('hook.post-task.completed', { agentId: this.agentId, result });
360
390
  }
361
391
  async onTaskError(data) {
362
392
  const executionTime = this.taskStartTime ? Date.now() - this.taskStartTime : 0;
363
393
  await this.storeMemory(`error:${data.assignment.id}`, {
364
394
  error: { message: data.error.message, name: data.error.name },
365
- assignment: { id: data.assignment.id, taskType: data.assignment.task.type },
395
+ assignment: { id: data.assignment.id, taskType: data.assignment.task?.type ?? 'unknown' },
366
396
  timestamp: new Date(), agentId: this.agentId.id
367
397
  });
368
398
  if (this.strategies.lifecycle.onTaskError)
369
399
  await this.strategies.lifecycle.onTaskError(data);
370
- if (this.strategies.learning?.recordExecution) {
400
+ if (this.strategies.learning?.recordExecution && data.assignment.task) {
371
401
  await this.strategies.learning.recordExecution({
372
402
  task: data.assignment.task, error: data.error, success: false,
373
403
  duration: executionTime, metadata: { taskId: data.assignment.id }
@@ -437,6 +467,346 @@ class BaseAgent extends events_1.EventEmitter {
437
467
  async saveState() {
438
468
  await this.memoryService.saveState({ performanceMetrics: this.performanceMetrics, timestamp: new Date() });
439
469
  }
470
+ // ============================================
471
+ // LLM Provider Methods (Phase 0 - RuvLLM Integration)
472
+ // ============================================
473
+ /**
474
+ * Initialize LLM provider for agent use
475
+ * Supports RuvLLM (local), Claude, and OpenRouter providers
476
+ */
477
+ async initializeLLMProvider() {
478
+ if (!this.llmConfig.enabled) {
479
+ console.log(`[${this.agentId.id}] LLM disabled by configuration`);
480
+ return;
481
+ }
482
+ try {
483
+ // If a provider was injected, use it directly
484
+ if (this.llmConfig.provider) {
485
+ this.llmProvider = this.llmConfig.provider;
486
+ console.log(`[${this.agentId.id}] Using injected LLM provider`);
487
+ return;
488
+ }
489
+ // Create RuvLLM provider directly (preferred for local inference)
490
+ if (this.llmConfig.preferredProvider === 'ruvllm' || !this.llmConfig.preferredProvider) {
491
+ const ruvllmConfig = {
492
+ name: `${this.agentId.id}-ruvllm`,
493
+ enableSessions: this.llmConfig.enableSessions ?? true,
494
+ enableTRM: true,
495
+ enableSONA: true,
496
+ debug: false,
497
+ ...this.llmConfig.ruvllm
498
+ };
499
+ this.llmProvider = new RuvllmProvider_1.RuvllmProvider(ruvllmConfig);
500
+ await this.llmProvider.initialize();
501
+ // Create session for this agent if sessions enabled
502
+ if (this.llmConfig.enableSessions) {
503
+ const ruvllm = this.llmProvider;
504
+ const session = ruvllm.createSession();
505
+ this.llmSessionId = session.id;
506
+ console.log(`[${this.agentId.id}] LLM session created: ${this.llmSessionId}`);
507
+ }
508
+ console.log(`[${this.agentId.id}] RuvLLM provider initialized`);
509
+ return;
510
+ }
511
+ // Use factory for other providers (Claude, OpenRouter)
512
+ this.llmFactory = new LLMProviderFactory_1.LLMProviderFactory(this.llmConfig.factoryConfig || {});
513
+ await this.llmFactory.initialize();
514
+ this.llmProvider = this.llmFactory.getProvider(this.llmConfig.preferredProvider);
515
+ if (!this.llmProvider) {
516
+ console.warn(`[${this.agentId.id}] Preferred provider ${this.llmConfig.preferredProvider} not available, trying auto-select`);
517
+ this.llmProvider = this.llmFactory.selectBestProvider();
518
+ }
519
+ if (this.llmProvider) {
520
+ console.log(`[${this.agentId.id}] LLM provider initialized: ${this.llmConfig.preferredProvider}`);
521
+ }
522
+ else {
523
+ console.warn(`[${this.agentId.id}] No LLM provider available`);
524
+ }
525
+ }
526
+ catch (error) {
527
+ console.error(`[${this.agentId.id}] LLM initialization failed:`, error.message);
528
+ // Don't throw - agent can still work without LLM (algorithmic fallback)
529
+ }
530
+ }
531
+ /**
532
+ * Initialize Federated Learning for team-wide pattern sharing
533
+ * Phase 0 M0.5 - Reduces Claude Code dependency through collective learning
534
+ */
535
+ async initializeFederatedLearning() {
536
+ if (!this.llmConfig.enableFederated) {
537
+ return;
538
+ }
539
+ try {
540
+ // Use shared FederatedManager or create new one
541
+ if (this.llmConfig.federatedManager) {
542
+ this.federatedManager = this.llmConfig.federatedManager;
543
+ }
544
+ else {
545
+ this.federatedManager = new FederatedManager_1.FederatedManager(this.llmConfig.federatedConfig);
546
+ await this.federatedManager.initialize();
547
+ }
548
+ // Register this agent for federated learning
549
+ this.ephemeralAgent = this.federatedManager.registerAgent(this.agentId.id);
550
+ this.federatedInitialized = true;
551
+ console.log(`[${this.agentId.id}] Federated learning initialized`);
552
+ // Sync with existing team knowledge on startup
553
+ try {
554
+ await this.federatedManager.syncFromTeam(this.agentId.id);
555
+ console.log(`[${this.agentId.id}] Synced with team knowledge`);
556
+ }
557
+ catch {
558
+ // First agent or no prior knowledge - expected
559
+ }
560
+ }
561
+ catch (error) {
562
+ console.error(`[${this.agentId.id}] Federated learning initialization failed:`, error.message);
563
+ // Don't throw - agent can work without federated learning
564
+ }
565
+ }
566
+ /**
567
+ * Check if federated learning is available
568
+ */
569
+ hasFederatedLearning() {
570
+ return this.federatedInitialized && this.federatedManager !== undefined;
571
+ }
572
+ /**
573
+ * Share a learned pattern with the team via federated learning
574
+ * Call this when the agent learns something useful (e.g., after successful task)
575
+ *
576
+ * @param pattern - The pattern to share (embedding, quality score, category)
577
+ */
578
+ async shareLearnedPattern(pattern) {
579
+ if (!this.federatedManager || !this.federatedInitialized) {
580
+ return;
581
+ }
582
+ const fullPattern = {
583
+ ...pattern,
584
+ id: `pattern-${this.agentId.id}-${Date.now()}`,
585
+ sourceAgent: this.agentId.id,
586
+ timestamp: Date.now(),
587
+ };
588
+ await this.federatedManager.sharePattern(this.agentId.id, fullPattern);
589
+ }
590
+ /**
591
+ * Sync this agent with team-wide learned knowledge
592
+ * Call this periodically or before complex tasks
593
+ */
594
+ async syncWithTeam() {
595
+ if (!this.federatedManager || !this.federatedInitialized) {
596
+ return;
597
+ }
598
+ await this.federatedManager.syncFromTeam(this.agentId.id);
599
+ }
600
+ /**
601
+ * Submit this agent's learning updates to the team
602
+ * Call after completing a batch of tasks
603
+ */
604
+ async submitLearningUpdate() {
605
+ if (!this.federatedManager || !this.federatedInitialized) {
606
+ return;
607
+ }
608
+ await this.federatedManager.submitAgentUpdate(this.agentId.id);
609
+ }
610
+ /**
611
+ * Get federated learning metrics
612
+ */
613
+ getFederatedMetrics() {
614
+ if (!this.federatedManager) {
615
+ return null;
616
+ }
617
+ return this.federatedManager.getMetrics();
618
+ }
619
+ /**
620
+ * Check if LLM is available for this agent
621
+ */
622
+ hasLLM() {
623
+ return this.llmProvider !== undefined;
624
+ }
625
+ /**
626
+ * Get LLM provider (for advanced usage)
627
+ */
628
+ getLLMProvider() {
629
+ return this.llmProvider;
630
+ }
631
+ /**
632
+ * Make an LLM completion call
633
+ * Uses RuvLLM's session management for 50% latency reduction on multi-turn
634
+ *
635
+ * @param prompt - The prompt to send to the LLM
636
+ * @param options - Additional completion options
637
+ * @returns The LLM response text
638
+ * @throws Error if LLM is not available
639
+ */
640
+ async llmComplete(prompt, options) {
641
+ if (!this.llmProvider) {
642
+ throw new Error(`[${this.agentId.id}] LLM not available - initialize agent first`);
643
+ }
644
+ const completionOptions = {
645
+ model: options?.model || this.llmConfig.ruvllm?.defaultModel || 'llama-3.2-3b-instruct',
646
+ messages: [{ role: 'user', content: prompt }],
647
+ maxTokens: options?.maxTokens,
648
+ temperature: options?.temperature,
649
+ stream: options?.stream,
650
+ metadata: {
651
+ ...options?.metadata,
652
+ sessionId: this.llmSessionId, // Use session for faster multi-turn
653
+ agentId: this.agentId.id,
654
+ agentType: this.agentId.type
655
+ }
656
+ };
657
+ const response = await this.llmProvider.complete(completionOptions);
658
+ // Extract text from response
659
+ const text = response.content
660
+ .filter(block => block.type === 'text')
661
+ .map(block => block.text)
662
+ .join('\n');
663
+ return text;
664
+ }
665
+ /**
666
+ * Make a batch LLM completion call (4x throughput)
667
+ * Uses RuvLLM's native batch API for parallel processing
668
+ *
669
+ * @param prompts - Array of prompts to process in parallel
670
+ * @param options - Shared completion options
671
+ * @returns Array of response texts in same order as prompts
672
+ */
673
+ async llmBatchComplete(prompts, options) {
674
+ if (!this.llmProvider) {
675
+ throw new Error(`[${this.agentId.id}] LLM not available - initialize agent first`);
676
+ }
677
+ // Check if provider supports batch (RuvLLM does)
678
+ const ruvllm = this.llmProvider;
679
+ if (typeof ruvllm.batchComplete === 'function') {
680
+ const defaultModel = options?.model || this.llmConfig.ruvllm?.defaultModel || 'llama-3.2-3b-instruct';
681
+ const requests = prompts.map(prompt => ({
682
+ model: defaultModel,
683
+ messages: [{ role: 'user', content: prompt }],
684
+ maxTokens: options?.maxTokens,
685
+ temperature: options?.temperature,
686
+ metadata: {
687
+ ...options?.metadata,
688
+ agentId: this.agentId.id,
689
+ agentType: this.agentId.type
690
+ }
691
+ }));
692
+ const responses = await ruvllm.batchComplete(requests);
693
+ return responses.map(response => response.content
694
+ .filter(block => block.type === 'text')
695
+ .map(block => block.text)
696
+ .join('\n'));
697
+ }
698
+ // Fallback: sequential processing for non-batch providers
699
+ console.warn(`[${this.agentId.id}] Provider doesn't support batch, using sequential`);
700
+ const results = [];
701
+ for (const prompt of prompts) {
702
+ results.push(await this.llmComplete(prompt, options));
703
+ }
704
+ return results;
705
+ }
706
+ /**
707
+ * Generate embeddings for text
708
+ * Uses RuvLLM's SIMD-optimized embedding generation
709
+ *
710
+ * @param text - Text to embed
711
+ * @returns Embedding vector
712
+ */
713
+ async llmEmbed(text) {
714
+ if (!this.llmProvider) {
715
+ throw new Error(`[${this.agentId.id}] LLM not available - initialize agent first`);
716
+ }
717
+ const response = await this.llmProvider.embed({ text });
718
+ return response.embedding || [];
719
+ }
720
+ /**
721
+ * Chat within agent's session (50% faster for multi-turn)
722
+ * Only works with RuvLLM provider with sessions enabled
723
+ *
724
+ * @param input - User input to chat
725
+ * @returns Assistant response
726
+ */
727
+ async llmChat(input) {
728
+ if (!this.llmProvider) {
729
+ throw new Error(`[${this.agentId.id}] LLM not available`);
730
+ }
731
+ if (!this.llmSessionId) {
732
+ // Fallback to regular complete if no session
733
+ return this.llmComplete(input);
734
+ }
735
+ const ruvllm = this.llmProvider;
736
+ if (typeof ruvllm.sessionChat === 'function') {
737
+ return ruvllm.sessionChat(this.llmSessionId, input);
738
+ }
739
+ // Fallback
740
+ return this.llmComplete(input);
741
+ }
742
+ /**
743
+ * Get routing decision for observability
744
+ * Shows which model was selected and why
745
+ */
746
+ getLLMRoutingDecision(input) {
747
+ if (!this.llmProvider) {
748
+ return null;
749
+ }
750
+ const ruvllm = this.llmProvider;
751
+ if (typeof ruvllm.getRoutingDecision === 'function') {
752
+ return ruvllm.getRoutingDecision(input);
753
+ }
754
+ return null;
755
+ }
756
+ /**
757
+ * Get LLM usage statistics for this agent
758
+ */
759
+ getLLMStats() {
760
+ return {
761
+ available: this.hasLLM(),
762
+ sessionId: this.llmSessionId,
763
+ provider: this.llmProvider ? 'ruvllm' : undefined
764
+ };
765
+ }
766
+ /**
767
+ * Cleanup LLM resources on agent termination
768
+ */
769
+ async cleanupLLM() {
770
+ if (this.llmSessionId && this.llmProvider) {
771
+ const ruvllm = this.llmProvider;
772
+ if (typeof ruvllm.endSession === 'function') {
773
+ ruvllm.endSession(this.llmSessionId);
774
+ console.log(`[${this.agentId.id}] LLM session ended: ${this.llmSessionId}`);
775
+ }
776
+ }
777
+ if (this.llmProvider) {
778
+ await this.llmProvider.shutdown();
779
+ }
780
+ if (this.llmFactory) {
781
+ await this.llmFactory.shutdown();
782
+ }
783
+ }
784
+ /**
785
+ * Cleanup federated learning resources on agent termination
786
+ * Submits final learning updates and unregisters from the coordinator
787
+ */
788
+ async cleanupFederated() {
789
+ if (!this.federatedManager || !this.federatedInitialized) {
790
+ return;
791
+ }
792
+ try {
793
+ // Submit final learning updates before terminating
794
+ await this.submitLearningUpdate();
795
+ // Unregister this agent from federated learning
796
+ this.federatedManager.unregisterAgent(this.agentId.id);
797
+ console.log(`[${this.agentId.id}] Federated learning cleanup complete`);
798
+ }
799
+ catch (error) {
800
+ console.warn(`[${this.agentId.id}] Federated cleanup error:`, error.message);
801
+ }
802
+ this.federatedInitialized = false;
803
+ this.ephemeralAgent = undefined;
804
+ // Only shutdown the manager if we created it (not if it was shared)
805
+ if (!this.llmConfig.federatedManager && this.federatedManager) {
806
+ await this.federatedManager.shutdown();
807
+ this.federatedManager = undefined;
808
+ }
809
+ }
440
810
  }
441
811
  exports.BaseAgent = BaseAgent;
442
812
  class BaseAgentFactory {