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.
- package/.claude/agents/n8n/n8n-base-agent.md +376 -0
- package/.claude/agents/n8n/n8n-bdd-scenario-tester.md +613 -0
- package/.claude/agents/n8n/n8n-chaos-tester.md +654 -0
- package/.claude/agents/n8n/n8n-ci-orchestrator.md +850 -0
- package/.claude/agents/n8n/n8n-compliance-validator.md +685 -0
- package/.claude/agents/n8n/n8n-expression-validator.md +560 -0
- package/.claude/agents/n8n/n8n-integration-test.md +602 -0
- package/.claude/agents/n8n/n8n-monitoring-validator.md +589 -0
- package/.claude/agents/n8n/n8n-node-validator.md +455 -0
- package/.claude/agents/n8n/n8n-performance-tester.md +630 -0
- package/.claude/agents/n8n/n8n-security-auditor.md +786 -0
- package/.claude/agents/n8n/n8n-trigger-test.md +500 -0
- package/.claude/agents/n8n/n8n-unit-tester.md +633 -0
- package/.claude/agents/n8n/n8n-version-comparator.md +567 -0
- package/.claude/agents/n8n/n8n-workflow-executor.md +392 -0
- package/.claude/skills/n8n-expression-testing/SKILL.md +434 -0
- package/.claude/skills/n8n-integration-testing-patterns/SKILL.md +540 -0
- package/.claude/skills/n8n-security-testing/SKILL.md +599 -0
- package/.claude/skills/n8n-trigger-testing-strategies/SKILL.md +541 -0
- package/.claude/skills/n8n-workflow-testing-fundamentals/SKILL.md +447 -0
- package/CHANGELOG.md +127 -0
- package/README.md +7 -4
- package/dist/agents/BaseAgent.d.ts +142 -0
- package/dist/agents/BaseAgent.d.ts.map +1 -1
- package/dist/agents/BaseAgent.js +372 -2
- package/dist/agents/BaseAgent.js.map +1 -1
- package/dist/agents/TestGeneratorAgent.d.ts +5 -0
- package/dist/agents/TestGeneratorAgent.d.ts.map +1 -1
- package/dist/agents/TestGeneratorAgent.js +38 -0
- package/dist/agents/TestGeneratorAgent.js.map +1 -1
- package/dist/agents/index.d.ts +1 -1
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/n8n/N8nAPIClient.d.ts +121 -0
- package/dist/agents/n8n/N8nAPIClient.d.ts.map +1 -0
- package/dist/agents/n8n/N8nAPIClient.js +367 -0
- package/dist/agents/n8n/N8nAPIClient.js.map +1 -0
- package/dist/agents/n8n/N8nAuditPersistence.d.ts +120 -0
- package/dist/agents/n8n/N8nAuditPersistence.d.ts.map +1 -0
- package/dist/agents/n8n/N8nAuditPersistence.js +473 -0
- package/dist/agents/n8n/N8nAuditPersistence.js.map +1 -0
- package/dist/agents/n8n/N8nBDDScenarioTesterAgent.d.ts +159 -0
- package/dist/agents/n8n/N8nBDDScenarioTesterAgent.d.ts.map +1 -0
- package/dist/agents/n8n/N8nBDDScenarioTesterAgent.js +697 -0
- package/dist/agents/n8n/N8nBDDScenarioTesterAgent.js.map +1 -0
- package/dist/agents/n8n/N8nBaseAgent.d.ts +126 -0
- package/dist/agents/n8n/N8nBaseAgent.d.ts.map +1 -0
- package/dist/agents/n8n/N8nBaseAgent.js +446 -0
- package/dist/agents/n8n/N8nBaseAgent.js.map +1 -0
- package/dist/agents/n8n/N8nCIOrchestratorAgent.d.ts +164 -0
- package/dist/agents/n8n/N8nCIOrchestratorAgent.d.ts.map +1 -0
- package/dist/agents/n8n/N8nCIOrchestratorAgent.js +610 -0
- package/dist/agents/n8n/N8nCIOrchestratorAgent.js.map +1 -0
- package/dist/agents/n8n/N8nChaosTesterAgent.d.ts +205 -0
- package/dist/agents/n8n/N8nChaosTesterAgent.d.ts.map +1 -0
- package/dist/agents/n8n/N8nChaosTesterAgent.js +729 -0
- package/dist/agents/n8n/N8nChaosTesterAgent.js.map +1 -0
- package/dist/agents/n8n/N8nComplianceValidatorAgent.d.ts +228 -0
- package/dist/agents/n8n/N8nComplianceValidatorAgent.d.ts.map +1 -0
- package/dist/agents/n8n/N8nComplianceValidatorAgent.js +986 -0
- package/dist/agents/n8n/N8nComplianceValidatorAgent.js.map +1 -0
- package/dist/agents/n8n/N8nContractTesterAgent.d.ts +213 -0
- package/dist/agents/n8n/N8nContractTesterAgent.d.ts.map +1 -0
- package/dist/agents/n8n/N8nContractTesterAgent.js +989 -0
- package/dist/agents/n8n/N8nContractTesterAgent.js.map +1 -0
- package/dist/agents/n8n/N8nExpressionValidatorAgent.d.ts +99 -0
- package/dist/agents/n8n/N8nExpressionValidatorAgent.d.ts.map +1 -0
- package/dist/agents/n8n/N8nExpressionValidatorAgent.js +632 -0
- package/dist/agents/n8n/N8nExpressionValidatorAgent.js.map +1 -0
- package/dist/agents/n8n/N8nFailureModeTesterAgent.d.ts +238 -0
- package/dist/agents/n8n/N8nFailureModeTesterAgent.d.ts.map +1 -0
- package/dist/agents/n8n/N8nFailureModeTesterAgent.js +956 -0
- package/dist/agents/n8n/N8nFailureModeTesterAgent.js.map +1 -0
- package/dist/agents/n8n/N8nIdempotencyTesterAgent.d.ts +242 -0
- package/dist/agents/n8n/N8nIdempotencyTesterAgent.d.ts.map +1 -0
- package/dist/agents/n8n/N8nIdempotencyTesterAgent.js +992 -0
- package/dist/agents/n8n/N8nIdempotencyTesterAgent.js.map +1 -0
- package/dist/agents/n8n/N8nIntegrationTestAgent.d.ts +104 -0
- package/dist/agents/n8n/N8nIntegrationTestAgent.d.ts.map +1 -0
- package/dist/agents/n8n/N8nIntegrationTestAgent.js +653 -0
- package/dist/agents/n8n/N8nIntegrationTestAgent.js.map +1 -0
- package/dist/agents/n8n/N8nMonitoringValidatorAgent.d.ts +210 -0
- package/dist/agents/n8n/N8nMonitoringValidatorAgent.d.ts.map +1 -0
- package/dist/agents/n8n/N8nMonitoringValidatorAgent.js +669 -0
- package/dist/agents/n8n/N8nMonitoringValidatorAgent.js.map +1 -0
- package/dist/agents/n8n/N8nNodeValidatorAgent.d.ts +142 -0
- package/dist/agents/n8n/N8nNodeValidatorAgent.d.ts.map +1 -0
- package/dist/agents/n8n/N8nNodeValidatorAgent.js +1090 -0
- package/dist/agents/n8n/N8nNodeValidatorAgent.js.map +1 -0
- package/dist/agents/n8n/N8nPerformanceTesterAgent.d.ts +198 -0
- package/dist/agents/n8n/N8nPerformanceTesterAgent.d.ts.map +1 -0
- package/dist/agents/n8n/N8nPerformanceTesterAgent.js +653 -0
- package/dist/agents/n8n/N8nPerformanceTesterAgent.js.map +1 -0
- package/dist/agents/n8n/N8nReplayabilityTesterAgent.d.ts +245 -0
- package/dist/agents/n8n/N8nReplayabilityTesterAgent.d.ts.map +1 -0
- package/dist/agents/n8n/N8nReplayabilityTesterAgent.js +952 -0
- package/dist/agents/n8n/N8nReplayabilityTesterAgent.js.map +1 -0
- package/dist/agents/n8n/N8nSecretsHygieneAuditorAgent.d.ts +325 -0
- package/dist/agents/n8n/N8nSecretsHygieneAuditorAgent.d.ts.map +1 -0
- package/dist/agents/n8n/N8nSecretsHygieneAuditorAgent.js +1187 -0
- package/dist/agents/n8n/N8nSecretsHygieneAuditorAgent.js.map +1 -0
- package/dist/agents/n8n/N8nSecurityAuditorAgent.d.ts +91 -0
- package/dist/agents/n8n/N8nSecurityAuditorAgent.d.ts.map +1 -0
- package/dist/agents/n8n/N8nSecurityAuditorAgent.js +825 -0
- package/dist/agents/n8n/N8nSecurityAuditorAgent.js.map +1 -0
- package/dist/agents/n8n/N8nTestHarness.d.ts +131 -0
- package/dist/agents/n8n/N8nTestHarness.d.ts.map +1 -0
- package/dist/agents/n8n/N8nTestHarness.js +456 -0
- package/dist/agents/n8n/N8nTestHarness.js.map +1 -0
- package/dist/agents/n8n/N8nTriggerTestAgent.d.ts +119 -0
- package/dist/agents/n8n/N8nTriggerTestAgent.d.ts.map +1 -0
- package/dist/agents/n8n/N8nTriggerTestAgent.js +652 -0
- package/dist/agents/n8n/N8nTriggerTestAgent.js.map +1 -0
- package/dist/agents/n8n/N8nUnitTesterAgent.d.ts +130 -0
- package/dist/agents/n8n/N8nUnitTesterAgent.d.ts.map +1 -0
- package/dist/agents/n8n/N8nUnitTesterAgent.js +522 -0
- package/dist/agents/n8n/N8nUnitTesterAgent.js.map +1 -0
- package/dist/agents/n8n/N8nVersionComparatorAgent.d.ts +201 -0
- package/dist/agents/n8n/N8nVersionComparatorAgent.d.ts.map +1 -0
- package/dist/agents/n8n/N8nVersionComparatorAgent.js +645 -0
- package/dist/agents/n8n/N8nVersionComparatorAgent.js.map +1 -0
- package/dist/agents/n8n/N8nWorkflowExecutorAgent.d.ts +120 -0
- package/dist/agents/n8n/N8nWorkflowExecutorAgent.d.ts.map +1 -0
- package/dist/agents/n8n/N8nWorkflowExecutorAgent.js +347 -0
- package/dist/agents/n8n/N8nWorkflowExecutorAgent.js.map +1 -0
- package/dist/agents/n8n/index.d.ts +119 -0
- package/dist/agents/n8n/index.d.ts.map +1 -0
- package/dist/agents/n8n/index.js +298 -0
- package/dist/agents/n8n/index.js.map +1 -0
- package/dist/agents/n8n/types.d.ts +486 -0
- package/dist/agents/n8n/types.d.ts.map +1 -0
- package/dist/agents/n8n/types.js +8 -0
- package/dist/agents/n8n/types.js.map +1 -0
- package/dist/cli/init/agents.d.ts.map +1 -1
- package/dist/cli/init/agents.js +29 -0
- package/dist/cli/init/agents.js.map +1 -1
- package/dist/cli/init/skills.d.ts.map +1 -1
- package/dist/cli/init/skills.js +7 -1
- package/dist/cli/init/skills.js.map +1 -1
- package/dist/core/memory/HNSWVectorMemory.js +1 -1
- package/dist/core/memory/RuVectorPatternStore.d.ts +90 -0
- package/dist/core/memory/RuVectorPatternStore.d.ts.map +1 -1
- package/dist/core/memory/RuVectorPatternStore.js +209 -0
- package/dist/core/memory/RuVectorPatternStore.js.map +1 -1
- package/dist/learning/FederatedManager.d.ts +232 -0
- package/dist/learning/FederatedManager.d.ts.map +1 -0
- package/dist/learning/FederatedManager.js +489 -0
- package/dist/learning/FederatedManager.js.map +1 -0
- package/dist/learning/HNSWPatternAdapter.d.ts +117 -0
- package/dist/learning/HNSWPatternAdapter.d.ts.map +1 -0
- package/dist/learning/HNSWPatternAdapter.js +262 -0
- package/dist/learning/HNSWPatternAdapter.js.map +1 -0
- package/dist/learning/LearningEngine.d.ts +27 -0
- package/dist/learning/LearningEngine.d.ts.map +1 -1
- package/dist/learning/LearningEngine.js +75 -1
- package/dist/learning/LearningEngine.js.map +1 -1
- package/dist/learning/PatternCurator.d.ts +217 -0
- package/dist/learning/PatternCurator.d.ts.map +1 -0
- package/dist/learning/PatternCurator.js +393 -0
- package/dist/learning/PatternCurator.js.map +1 -0
- package/dist/learning/index.d.ts +6 -0
- package/dist/learning/index.d.ts.map +1 -1
- package/dist/learning/index.js +16 -1
- package/dist/learning/index.js.map +1 -1
- package/dist/learning/types.d.ts +4 -0
- package/dist/learning/types.d.ts.map +1 -1
- package/dist/mcp/server-instructions.d.ts +1 -1
- package/dist/mcp/server-instructions.js +1 -1
- package/dist/memory/HNSWPatternStore.d.ts +176 -0
- package/dist/memory/HNSWPatternStore.d.ts.map +1 -0
- package/dist/memory/HNSWPatternStore.js +392 -0
- package/dist/memory/HNSWPatternStore.js.map +1 -0
- package/dist/memory/index.d.ts +8 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +13 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/providers/HybridRouter.d.ts +85 -4
- package/dist/providers/HybridRouter.d.ts.map +1 -1
- package/dist/providers/HybridRouter.js +332 -10
- package/dist/providers/HybridRouter.js.map +1 -1
- package/dist/providers/LLMBaselineTracker.d.ts +120 -0
- package/dist/providers/LLMBaselineTracker.d.ts.map +1 -0
- package/dist/providers/LLMBaselineTracker.js +305 -0
- package/dist/providers/LLMBaselineTracker.js.map +1 -0
- package/dist/providers/OpenRouterProvider.d.ts +26 -0
- package/dist/providers/OpenRouterProvider.d.ts.map +1 -1
- package/dist/providers/OpenRouterProvider.js +75 -6
- package/dist/providers/OpenRouterProvider.js.map +1 -1
- package/dist/providers/RuVectorClient.d.ts +259 -0
- package/dist/providers/RuVectorClient.d.ts.map +1 -0
- package/dist/providers/RuVectorClient.js +416 -0
- package/dist/providers/RuVectorClient.js.map +1 -0
- package/dist/providers/RuvllmPatternCurator.d.ts +116 -0
- package/dist/providers/RuvllmPatternCurator.d.ts.map +1 -0
- package/dist/providers/RuvllmPatternCurator.js +323 -0
- package/dist/providers/RuvllmPatternCurator.js.map +1 -0
- package/dist/providers/RuvllmProvider.d.ts +233 -1
- package/dist/providers/RuvllmProvider.d.ts.map +1 -1
- package/dist/providers/RuvllmProvider.js +781 -11
- package/dist/providers/RuvllmProvider.js.map +1 -1
- package/dist/providers/index.d.ts +5 -1
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +12 -2
- package/dist/providers/index.js.map +1 -1
- package/dist/utils/ruvllm-loader.d.ts +98 -1
- package/dist/utils/ruvllm-loader.d.ts.map +1 -1
- package/dist/utils/ruvllm-loader.js.map +1 -1
- package/docs/reference/agents.md +91 -2
- package/docs/reference/skills.md +97 -2
- 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":"AAAA
|
|
1
|
+
{"version":3,"file":"BaseAgent.d.ts","sourceRoot":"","sources":["../../src/agents/BaseAgent.ts"],"names":[],"mappings":"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"}
|
package/dist/agents/BaseAgent.js
CHANGED
|
@@ -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
|
|
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 {
|