agentic-qe 2.3.4 → 2.4.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.
- package/CHANGELOG.md +72 -0
- package/README.md +1 -1
- package/dist/agents/ApiContractValidatorAgent.d.ts +5 -0
- package/dist/agents/ApiContractValidatorAgent.d.ts.map +1 -1
- package/dist/agents/ApiContractValidatorAgent.js +41 -0
- package/dist/agents/ApiContractValidatorAgent.js.map +1 -1
- package/dist/agents/BaseAgent.d.ts +56 -49
- package/dist/agents/BaseAgent.d.ts.map +1 -1
- package/dist/agents/BaseAgent.js +208 -604
- package/dist/agents/BaseAgent.js.map +1 -1
- package/dist/agents/CodeComplexityAnalyzerAgent.d.ts +5 -0
- package/dist/agents/CodeComplexityAnalyzerAgent.d.ts.map +1 -1
- package/dist/agents/CodeComplexityAnalyzerAgent.js +47 -0
- package/dist/agents/CodeComplexityAnalyzerAgent.js.map +1 -1
- package/dist/agents/CoverageAnalyzerAgent.d.ts +26 -0
- package/dist/agents/CoverageAnalyzerAgent.d.ts.map +1 -1
- package/dist/agents/CoverageAnalyzerAgent.js +149 -1
- package/dist/agents/CoverageAnalyzerAgent.js.map +1 -1
- package/dist/agents/DeploymentReadinessAgent.d.ts +5 -0
- package/dist/agents/DeploymentReadinessAgent.d.ts.map +1 -1
- package/dist/agents/DeploymentReadinessAgent.js +41 -0
- package/dist/agents/DeploymentReadinessAgent.js.map +1 -1
- package/dist/agents/FlakyTestHunterAgent.d.ts +7 -2
- package/dist/agents/FlakyTestHunterAgent.d.ts.map +1 -1
- package/dist/agents/FlakyTestHunterAgent.js +48 -104
- package/dist/agents/FlakyTestHunterAgent.js.map +1 -1
- package/dist/agents/FleetCommanderAgent.d.ts +5 -0
- package/dist/agents/FleetCommanderAgent.d.ts.map +1 -1
- package/dist/agents/FleetCommanderAgent.js +51 -0
- package/dist/agents/FleetCommanderAgent.js.map +1 -1
- package/dist/agents/PerformanceTesterAgent.d.ts +5 -0
- package/dist/agents/PerformanceTesterAgent.d.ts.map +1 -1
- package/dist/agents/PerformanceTesterAgent.js +44 -0
- package/dist/agents/PerformanceTesterAgent.js.map +1 -1
- package/dist/agents/ProductionIntelligenceAgent.d.ts +5 -0
- package/dist/agents/ProductionIntelligenceAgent.d.ts.map +1 -1
- package/dist/agents/ProductionIntelligenceAgent.js +46 -0
- package/dist/agents/ProductionIntelligenceAgent.js.map +1 -1
- package/dist/agents/QXPartnerAgent.js +52 -0
- package/dist/agents/QXPartnerAgent.js.map +1 -1
- package/dist/agents/QualityAnalyzerAgent.d.ts +5 -0
- package/dist/agents/QualityAnalyzerAgent.d.ts.map +1 -1
- package/dist/agents/QualityAnalyzerAgent.js +45 -0
- package/dist/agents/QualityAnalyzerAgent.js.map +1 -1
- package/dist/agents/QualityGateAgent.d.ts +40 -0
- package/dist/agents/QualityGateAgent.d.ts.map +1 -1
- package/dist/agents/QualityGateAgent.js +227 -1
- package/dist/agents/QualityGateAgent.js.map +1 -1
- package/dist/agents/RegressionRiskAnalyzerAgent.d.ts +5 -0
- package/dist/agents/RegressionRiskAnalyzerAgent.d.ts.map +1 -1
- package/dist/agents/RegressionRiskAnalyzerAgent.js +46 -0
- package/dist/agents/RegressionRiskAnalyzerAgent.js.map +1 -1
- package/dist/agents/RequirementsValidatorAgent.d.ts +5 -0
- package/dist/agents/RequirementsValidatorAgent.d.ts.map +1 -1
- package/dist/agents/RequirementsValidatorAgent.js +42 -0
- package/dist/agents/RequirementsValidatorAgent.js.map +1 -1
- package/dist/agents/SecurityScannerAgent.d.ts +5 -0
- package/dist/agents/SecurityScannerAgent.d.ts.map +1 -1
- package/dist/agents/SecurityScannerAgent.js +39 -0
- package/dist/agents/SecurityScannerAgent.js.map +1 -1
- package/dist/agents/TestDataArchitectAgent.d.ts +5 -0
- package/dist/agents/TestDataArchitectAgent.d.ts.map +1 -1
- package/dist/agents/TestDataArchitectAgent.js +46 -0
- package/dist/agents/TestDataArchitectAgent.js.map +1 -1
- package/dist/agents/TestExecutorAgent.d.ts +6 -1
- package/dist/agents/TestExecutorAgent.d.ts.map +1 -1
- package/dist/agents/TestExecutorAgent.js +52 -46
- package/dist/agents/TestExecutorAgent.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 +51 -35
- package/dist/agents/TestGeneratorAgent.js.map +1 -1
- package/dist/agents/adapters/CoordinatorAdapter.d.ts +47 -0
- package/dist/agents/adapters/CoordinatorAdapter.d.ts.map +1 -0
- package/dist/agents/adapters/CoordinatorAdapter.js +266 -0
- package/dist/agents/adapters/CoordinatorAdapter.js.map +1 -0
- package/dist/agents/adapters/LearningEngineAdapter.d.ts +45 -0
- package/dist/agents/adapters/LearningEngineAdapter.d.ts.map +1 -0
- package/dist/agents/adapters/LearningEngineAdapter.js +279 -0
- package/dist/agents/adapters/LearningEngineAdapter.js.map +1 -0
- package/dist/agents/adapters/LifecycleManagerAdapter.d.ts +45 -0
- package/dist/agents/adapters/LifecycleManagerAdapter.d.ts.map +1 -0
- package/dist/agents/adapters/LifecycleManagerAdapter.js +128 -0
- package/dist/agents/adapters/LifecycleManagerAdapter.js.map +1 -0
- package/dist/agents/adapters/MemoryServiceAdapter.d.ts +96 -0
- package/dist/agents/adapters/MemoryServiceAdapter.d.ts.map +1 -0
- package/dist/agents/adapters/MemoryServiceAdapter.js +266 -0
- package/dist/agents/adapters/MemoryServiceAdapter.js.map +1 -0
- package/dist/agents/adapters/index.d.ts +14 -0
- package/dist/agents/adapters/index.d.ts.map +1 -0
- package/dist/agents/adapters/index.js +25 -0
- package/dist/agents/adapters/index.js.map +1 -0
- package/dist/agents/lifecycle/AgentLifecycleManager.d.ts.map +1 -1
- package/dist/agents/lifecycle/AgentLifecycleManager.js +17 -8
- package/dist/agents/lifecycle/AgentLifecycleManager.js.map +1 -1
- package/dist/cli/index.js +68 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/core/cache/BinaryCacheBuilder.d.ts +84 -0
- package/dist/core/cache/BinaryCacheBuilder.d.ts.map +1 -0
- package/dist/core/cache/BinaryCacheBuilder.js +225 -0
- package/dist/core/cache/BinaryCacheBuilder.js.map +1 -0
- package/dist/core/cache/BinaryCacheManager.d.ts +142 -0
- package/dist/core/cache/BinaryCacheManager.d.ts.map +1 -0
- package/dist/core/cache/BinaryCacheManager.js +354 -0
- package/dist/core/cache/BinaryCacheManager.js.map +1 -0
- package/dist/core/cache/BinaryCacheReader.d.ts +129 -0
- package/dist/core/cache/BinaryCacheReader.d.ts.map +1 -0
- package/dist/core/cache/BinaryCacheReader.js +243 -0
- package/dist/core/cache/BinaryCacheReader.js.map +1 -0
- package/dist/core/cache/BinaryMetadataCache.d.ts +533 -0
- package/dist/core/cache/BinaryMetadataCache.d.ts.map +1 -0
- package/dist/core/cache/BinaryMetadataCache.js +142 -0
- package/dist/core/cache/BinaryMetadataCache.js.map +1 -0
- package/dist/core/cache/CacheInvalidator.d.ts +103 -0
- package/dist/core/cache/CacheInvalidator.d.ts.map +1 -0
- package/dist/core/cache/CacheInvalidator.js +152 -0
- package/dist/core/cache/CacheInvalidator.js.map +1 -0
- package/dist/core/cache/CacheValidator.d.ts +69 -0
- package/dist/core/cache/CacheValidator.d.ts.map +1 -0
- package/dist/core/cache/CacheValidator.js +189 -0
- package/dist/core/cache/CacheValidator.js.map +1 -0
- package/dist/core/cache/MessagePackSerializer.d.ts +163 -0
- package/dist/core/cache/MessagePackSerializer.d.ts.map +1 -0
- package/dist/core/cache/MessagePackSerializer.js +274 -0
- package/dist/core/cache/MessagePackSerializer.js.map +1 -0
- package/dist/core/cache/index.d.ts +58 -0
- package/dist/core/cache/index.d.ts.map +1 -0
- package/dist/core/cache/index.js +102 -0
- package/dist/core/cache/index.js.map +1 -0
- package/dist/core/index.d.ts +2 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +18 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/memory/HNSWVectorMemory.js +1 -1
- package/dist/core/memory/PatternStoreFactory.d.ts +28 -0
- package/dist/core/memory/PatternStoreFactory.d.ts.map +1 -1
- package/dist/core/memory/PatternStoreFactory.js +68 -3
- package/dist/core/memory/PatternStoreFactory.js.map +1 -1
- package/dist/core/platform/FileOperations.d.ts +124 -0
- package/dist/core/platform/FileOperations.d.ts.map +1 -0
- package/dist/core/platform/FileOperations.js +371 -0
- package/dist/core/platform/FileOperations.js.map +1 -0
- package/dist/core/platform/PlatformDetector.d.ts +53 -0
- package/dist/core/platform/PlatformDetector.d.ts.map +1 -0
- package/dist/core/platform/PlatformDetector.js +251 -0
- package/dist/core/platform/PlatformDetector.js.map +1 -0
- package/dist/core/platform/index.d.ts +12 -0
- package/dist/core/platform/index.d.ts.map +1 -0
- package/dist/core/platform/index.js +28 -0
- package/dist/core/platform/index.js.map +1 -0
- package/dist/core/strategies/AcceleratedLearningStrategy.d.ts +74 -0
- package/dist/core/strategies/AcceleratedLearningStrategy.d.ts.map +1 -0
- package/dist/core/strategies/AcceleratedLearningStrategy.js +200 -0
- package/dist/core/strategies/AcceleratedLearningStrategy.js.map +1 -0
- package/dist/core/strategies/AgentCoordinationStrategy.d.ts +157 -0
- package/dist/core/strategies/AgentCoordinationStrategy.d.ts.map +1 -0
- package/dist/core/strategies/AgentCoordinationStrategy.js +12 -0
- package/dist/core/strategies/AgentCoordinationStrategy.js.map +1 -0
- package/dist/core/strategies/AgentLearningStrategy.d.ts +200 -0
- package/dist/core/strategies/AgentLearningStrategy.d.ts.map +1 -0
- package/dist/core/strategies/AgentLearningStrategy.js +13 -0
- package/dist/core/strategies/AgentLearningStrategy.js.map +1 -0
- package/dist/core/strategies/AgentLifecycleStrategy.d.ts +116 -0
- package/dist/core/strategies/AgentLifecycleStrategy.d.ts.map +1 -0
- package/dist/core/strategies/AgentLifecycleStrategy.js +12 -0
- package/dist/core/strategies/AgentLifecycleStrategy.js.map +1 -0
- package/dist/core/strategies/AgentMemoryStrategy.d.ts +154 -0
- package/dist/core/strategies/AgentMemoryStrategy.d.ts.map +1 -0
- package/dist/core/strategies/AgentMemoryStrategy.js +13 -0
- package/dist/core/strategies/AgentMemoryStrategy.js.map +1 -0
- package/dist/core/strategies/DefaultCoordinationStrategy.d.ts +105 -0
- package/dist/core/strategies/DefaultCoordinationStrategy.d.ts.map +1 -0
- package/dist/core/strategies/DefaultCoordinationStrategy.js +332 -0
- package/dist/core/strategies/DefaultCoordinationStrategy.js.map +1 -0
- package/dist/core/strategies/DefaultLearningStrategy.d.ts +120 -0
- package/dist/core/strategies/DefaultLearningStrategy.d.ts.map +1 -0
- package/dist/core/strategies/DefaultLearningStrategy.js +365 -0
- package/dist/core/strategies/DefaultLearningStrategy.js.map +1 -0
- package/dist/core/strategies/DefaultLifecycleStrategy.d.ts +129 -0
- package/dist/core/strategies/DefaultLifecycleStrategy.d.ts.map +1 -0
- package/dist/core/strategies/DefaultLifecycleStrategy.js +297 -0
- package/dist/core/strategies/DefaultLifecycleStrategy.js.map +1 -0
- package/dist/core/strategies/DefaultMemoryStrategy.d.ts +91 -0
- package/dist/core/strategies/DefaultMemoryStrategy.d.ts.map +1 -0
- package/dist/core/strategies/DefaultMemoryStrategy.js +257 -0
- package/dist/core/strategies/DefaultMemoryStrategy.js.map +1 -0
- package/dist/core/strategies/DistributedMemoryStrategy.d.ts +85 -0
- package/dist/core/strategies/DistributedMemoryStrategy.d.ts.map +1 -0
- package/dist/core/strategies/DistributedMemoryStrategy.js +126 -0
- package/dist/core/strategies/DistributedMemoryStrategy.js.map +1 -0
- package/dist/core/strategies/index.d.ts +95 -0
- package/dist/core/strategies/index.d.ts.map +1 -0
- package/dist/core/strategies/index.js +65 -0
- package/dist/core/strategies/index.js.map +1 -0
- package/dist/learning/PerformanceOptimizer.js +2 -2
- package/dist/learning/PerformanceOptimizer.js.map +1 -1
- package/dist/learning/capture/ExperienceExtractor.d.ts +219 -0
- package/dist/learning/capture/ExperienceExtractor.d.ts.map +1 -0
- package/dist/learning/capture/ExperienceExtractor.js +536 -0
- package/dist/learning/capture/ExperienceExtractor.js.map +1 -0
- package/dist/learning/capture/ExperienceStore.d.ts +196 -0
- package/dist/learning/capture/ExperienceStore.d.ts.map +1 -0
- package/dist/learning/capture/ExperienceStore.js +453 -0
- package/dist/learning/capture/ExperienceStore.js.map +1 -0
- package/dist/learning/scheduler/SleepScheduler.d.ts +2 -0
- package/dist/learning/scheduler/SleepScheduler.d.ts.map +1 -1
- package/dist/learning/scheduler/SleepScheduler.js +2 -0
- package/dist/learning/scheduler/SleepScheduler.js.map +1 -1
- package/dist/learning/synthesis/ClusteringEngine.d.ts +122 -0
- package/dist/learning/synthesis/ClusteringEngine.d.ts.map +1 -0
- package/dist/learning/synthesis/ClusteringEngine.js +356 -0
- package/dist/learning/synthesis/ClusteringEngine.js.map +1 -0
- package/dist/learning/transfer/TransferRegistry.d.ts +245 -0
- package/dist/learning/transfer/TransferRegistry.d.ts.map +1 -0
- package/dist/learning/transfer/TransferRegistry.js +410 -0
- package/dist/learning/transfer/TransferRegistry.js.map +1 -0
- package/dist/mcp/handlers/base-handler.d.ts +28 -1
- package/dist/mcp/handlers/base-handler.d.ts.map +1 -1
- package/dist/mcp/handlers/base-handler.js +41 -0
- package/dist/mcp/handlers/base-handler.js.map +1 -1
- package/dist/mcp/handlers/task-orchestrate.d.ts +11 -0
- package/dist/mcp/handlers/task-orchestrate.d.ts.map +1 -1
- package/dist/mcp/handlers/task-orchestrate.js +297 -4
- package/dist/mcp/handlers/task-orchestrate.js.map +1 -1
- package/dist/mcp/server-instructions.d.ts +1 -1
- package/dist/mcp/server-instructions.js +1 -1
- package/dist/mcp/services/AgentRegistry.d.ts +6 -1
- package/dist/mcp/services/AgentRegistry.d.ts.map +1 -1
- package/dist/mcp/services/AgentRegistry.js +34 -3
- package/dist/mcp/services/AgentRegistry.js.map +1 -1
- package/dist/output/AIActionSuggester.d.ts +98 -0
- package/dist/output/AIActionSuggester.d.ts.map +1 -0
- package/dist/output/AIActionSuggester.js +499 -0
- package/dist/output/AIActionSuggester.js.map +1 -0
- package/dist/output/CLIOutputHelper.d.ts +169 -0
- package/dist/output/CLIOutputHelper.d.ts.map +1 -0
- package/dist/output/CLIOutputHelper.js +320 -0
- package/dist/output/CLIOutputHelper.js.map +1 -0
- package/dist/output/OutputFormatter.d.ts +764 -0
- package/dist/output/OutputFormatter.d.ts.map +1 -0
- package/dist/output/OutputFormatter.js +125 -0
- package/dist/output/OutputFormatter.js.map +1 -0
- package/dist/output/OutputFormatterImpl.d.ts +131 -0
- package/dist/output/OutputFormatterImpl.d.ts.map +1 -0
- package/dist/output/OutputFormatterImpl.js +556 -0
- package/dist/output/OutputFormatterImpl.js.map +1 -0
- package/dist/output/examples.d.ts +38 -0
- package/dist/output/examples.d.ts.map +1 -0
- package/dist/output/examples.js +503 -0
- package/dist/output/examples.js.map +1 -0
- package/dist/output/index.d.ts +16 -0
- package/dist/output/index.d.ts.map +1 -0
- package/dist/output/index.js +58 -0
- package/dist/output/index.js.map +1 -0
- package/package.json +4 -1
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TransferRegistry - Track pattern transfers between agents
|
|
3
|
+
*
|
|
4
|
+
* Records all transfer attempts (success and failure), queries transfer history,
|
|
5
|
+
* and calculates success rates per agent pair.
|
|
6
|
+
*
|
|
7
|
+
* Part of the Nightly-Learner Phase 2 implementation.
|
|
8
|
+
*
|
|
9
|
+
* @version 1.0.0
|
|
10
|
+
* @module src/learning/transfer/TransferRegistry
|
|
11
|
+
*/
|
|
12
|
+
import type { TransferResult } from './TransferProtocol';
|
|
13
|
+
/**
|
|
14
|
+
* Transfer record stored in the registry
|
|
15
|
+
*/
|
|
16
|
+
export interface TransferRecord {
|
|
17
|
+
/** Unique transfer record ID */
|
|
18
|
+
id: string;
|
|
19
|
+
/** Source agent identifier */
|
|
20
|
+
sourceAgent: string;
|
|
21
|
+
/** Target agent identifier */
|
|
22
|
+
targetAgent: string;
|
|
23
|
+
/** Pattern ID that was transferred */
|
|
24
|
+
patternId: string;
|
|
25
|
+
/** Transfer status */
|
|
26
|
+
status: 'success' | 'failed' | 'skipped';
|
|
27
|
+
/** Reason for failure or skip */
|
|
28
|
+
reason?: string;
|
|
29
|
+
/** Compatibility score calculated during transfer */
|
|
30
|
+
compatibilityScore?: number;
|
|
31
|
+
/** Timestamp when transfer was recorded */
|
|
32
|
+
timestamp: Date;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Registry configuration options
|
|
36
|
+
*/
|
|
37
|
+
export interface TransferRegistryConfig {
|
|
38
|
+
/** Database path. Default: .agentic-qe/memory.db */
|
|
39
|
+
dbPath?: string;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Overall transfer statistics
|
|
43
|
+
*/
|
|
44
|
+
export interface TransferOverallStats {
|
|
45
|
+
/** Total number of transfer attempts */
|
|
46
|
+
totalTransfers: number;
|
|
47
|
+
/** Overall success rate (0-1) */
|
|
48
|
+
successRate: number;
|
|
49
|
+
/** Statistics by agent pair */
|
|
50
|
+
byAgentPair: Map<string, {
|
|
51
|
+
success: number;
|
|
52
|
+
fail: number;
|
|
53
|
+
}>;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* TransferRegistry tracks all pattern transfer attempts
|
|
57
|
+
*
|
|
58
|
+
* Records success/failure of transfers, provides historical queries,
|
|
59
|
+
* and calculates success metrics per agent pair.
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* ```typescript
|
|
63
|
+
* const registry = new TransferRegistry({ dbPath: './memory.db' });
|
|
64
|
+
*
|
|
65
|
+
* // Record a transfer result
|
|
66
|
+
* await registry.record(transferResult);
|
|
67
|
+
*
|
|
68
|
+
* // Query transfer history
|
|
69
|
+
* const history = registry.getTransferHistory('test-generator', 10);
|
|
70
|
+
*
|
|
71
|
+
* // Get success rate between two agents
|
|
72
|
+
* const rate = registry.getSuccessRate('test-generator', 'coverage-analyzer');
|
|
73
|
+
*
|
|
74
|
+
* // Get overall statistics
|
|
75
|
+
* const stats = registry.getOverallStats();
|
|
76
|
+
* console.log(`Success rate: ${(stats.successRate * 100).toFixed(1)}%`);
|
|
77
|
+
*
|
|
78
|
+
* registry.close();
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
export declare class TransferRegistry {
|
|
82
|
+
private db;
|
|
83
|
+
private logger;
|
|
84
|
+
private config;
|
|
85
|
+
constructor(config?: TransferRegistryConfig);
|
|
86
|
+
/**
|
|
87
|
+
* Initialize database schema for transfer registry
|
|
88
|
+
*/
|
|
89
|
+
private initializeSchema;
|
|
90
|
+
/**
|
|
91
|
+
* Record a transfer result
|
|
92
|
+
*
|
|
93
|
+
* Extracts individual transfer details from TransferResult and stores each
|
|
94
|
+
* pattern transfer as a separate record.
|
|
95
|
+
*
|
|
96
|
+
* @param result - Transfer result from TransferProtocol
|
|
97
|
+
* @returns Promise that resolves when all records are stored
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* ```typescript
|
|
101
|
+
* const result = await protocol.executeTransfer(request);
|
|
102
|
+
* await registry.record(result);
|
|
103
|
+
* ```
|
|
104
|
+
*/
|
|
105
|
+
record(result: TransferResult): Promise<void>;
|
|
106
|
+
/**
|
|
107
|
+
* Get transfer history for a specific agent
|
|
108
|
+
*
|
|
109
|
+
* Returns records where the agent was either source or target.
|
|
110
|
+
*
|
|
111
|
+
* @param agentId - Agent identifier
|
|
112
|
+
* @param limit - Maximum number of records to return (default: 50)
|
|
113
|
+
* @returns Array of transfer records, sorted by timestamp (newest first)
|
|
114
|
+
*
|
|
115
|
+
* @example
|
|
116
|
+
* ```typescript
|
|
117
|
+
* const recent = registry.getTransferHistory('test-generator', 20);
|
|
118
|
+
* console.log(`Found ${recent.length} recent transfers`);
|
|
119
|
+
* ```
|
|
120
|
+
*/
|
|
121
|
+
getTransferHistory(agentId: string, limit?: number): TransferRecord[];
|
|
122
|
+
/**
|
|
123
|
+
* Get success rate between two specific agents
|
|
124
|
+
*
|
|
125
|
+
* Calculates the ratio of successful transfers to total attempts.
|
|
126
|
+
*
|
|
127
|
+
* @param sourceAgent - Source agent identifier
|
|
128
|
+
* @param targetAgent - Target agent identifier
|
|
129
|
+
* @returns Success rate as a decimal (0-1), or 0 if no transfers exist
|
|
130
|
+
*
|
|
131
|
+
* @example
|
|
132
|
+
* ```typescript
|
|
133
|
+
* const rate = registry.getSuccessRate('test-generator', 'coverage-analyzer');
|
|
134
|
+
* console.log(`Success rate: ${(rate * 100).toFixed(1)}%`);
|
|
135
|
+
* ```
|
|
136
|
+
*/
|
|
137
|
+
getSuccessRate(sourceAgent: string, targetAgent: string): number;
|
|
138
|
+
/**
|
|
139
|
+
* Get overall transfer statistics
|
|
140
|
+
*
|
|
141
|
+
* Aggregates all transfer records to provide:
|
|
142
|
+
* - Total transfer count
|
|
143
|
+
* - Overall success rate
|
|
144
|
+
* - Per-agent-pair success/failure counts
|
|
145
|
+
*
|
|
146
|
+
* @returns Overall statistics object
|
|
147
|
+
*
|
|
148
|
+
* @example
|
|
149
|
+
* ```typescript
|
|
150
|
+
* const stats = registry.getOverallStats();
|
|
151
|
+
* console.log(`Total transfers: ${stats.totalTransfers}`);
|
|
152
|
+
* console.log(`Success rate: ${(stats.successRate * 100).toFixed(1)}%`);
|
|
153
|
+
*
|
|
154
|
+
* for (const [pair, counts] of stats.byAgentPair) {
|
|
155
|
+
* console.log(`${pair}: ${counts.success} success, ${counts.fail} fail`);
|
|
156
|
+
* }
|
|
157
|
+
* ```
|
|
158
|
+
*/
|
|
159
|
+
getOverallStats(): TransferOverallStats;
|
|
160
|
+
/**
|
|
161
|
+
* Get recent transfers within a time window
|
|
162
|
+
*
|
|
163
|
+
* @param hours - Number of hours to look back (default: 24)
|
|
164
|
+
* @returns Array of transfer records within the time window
|
|
165
|
+
*
|
|
166
|
+
* @example
|
|
167
|
+
* ```typescript
|
|
168
|
+
* // Get transfers from last 12 hours
|
|
169
|
+
* const recent = registry.getRecentTransfers(12);
|
|
170
|
+
* console.log(`${recent.length} transfers in last 12 hours`);
|
|
171
|
+
* ```
|
|
172
|
+
*/
|
|
173
|
+
getRecentTransfers(hours?: number): TransferRecord[];
|
|
174
|
+
/**
|
|
175
|
+
* Get transfer statistics for a specific pattern
|
|
176
|
+
*
|
|
177
|
+
* Useful for tracking how well a specific pattern transfers across agents.
|
|
178
|
+
*
|
|
179
|
+
* @param patternId - Pattern identifier
|
|
180
|
+
* @returns Statistics for the pattern's transfer history
|
|
181
|
+
*
|
|
182
|
+
* @example
|
|
183
|
+
* ```typescript
|
|
184
|
+
* const stats = registry.getPatternStats('pattern-123');
|
|
185
|
+
* console.log(`Pattern transferred ${stats.total} times with ${stats.successRate * 100}% success`);
|
|
186
|
+
* ```
|
|
187
|
+
*/
|
|
188
|
+
getPatternStats(patternId: string): {
|
|
189
|
+
total: number;
|
|
190
|
+
successRate: number;
|
|
191
|
+
agents: string[];
|
|
192
|
+
};
|
|
193
|
+
/**
|
|
194
|
+
* Get most successful transfer pairs
|
|
195
|
+
*
|
|
196
|
+
* Identifies agent pairs with the highest transfer success rates.
|
|
197
|
+
*
|
|
198
|
+
* @param limit - Maximum number of pairs to return (default: 10)
|
|
199
|
+
* @param minTransfers - Minimum number of transfers required (default: 5)
|
|
200
|
+
* @returns Array of agent pairs sorted by success rate
|
|
201
|
+
*
|
|
202
|
+
* @example
|
|
203
|
+
* ```typescript
|
|
204
|
+
* const topPairs = registry.getTopTransferPairs(5, 10);
|
|
205
|
+
* topPairs.forEach(pair => {
|
|
206
|
+
* console.log(`${pair.sourceAgent} -> ${pair.targetAgent}: ${(pair.successRate * 100).toFixed(1)}%`);
|
|
207
|
+
* });
|
|
208
|
+
* ```
|
|
209
|
+
*/
|
|
210
|
+
getTopTransferPairs(limit?: number, minTransfers?: number): Array<{
|
|
211
|
+
sourceAgent: string;
|
|
212
|
+
targetAgent: string;
|
|
213
|
+
successRate: number;
|
|
214
|
+
totalTransfers: number;
|
|
215
|
+
}>;
|
|
216
|
+
/**
|
|
217
|
+
* Clear old transfer records
|
|
218
|
+
*
|
|
219
|
+
* Removes records older than the specified number of days.
|
|
220
|
+
* Useful for maintaining database size.
|
|
221
|
+
*
|
|
222
|
+
* @param daysToKeep - Number of days of history to retain (default: 90)
|
|
223
|
+
* @returns Number of records deleted
|
|
224
|
+
*
|
|
225
|
+
* @example
|
|
226
|
+
* ```typescript
|
|
227
|
+
* const deleted = registry.clearOldRecords(30);
|
|
228
|
+
* console.log(`Deleted ${deleted} records older than 30 days`);
|
|
229
|
+
* ```
|
|
230
|
+
*/
|
|
231
|
+
clearOldRecords(daysToKeep?: number): number;
|
|
232
|
+
/**
|
|
233
|
+
* Close database connection
|
|
234
|
+
*
|
|
235
|
+
* Should be called when registry is no longer needed to release resources.
|
|
236
|
+
*
|
|
237
|
+
* @example
|
|
238
|
+
* ```typescript
|
|
239
|
+
* registry.close();
|
|
240
|
+
* ```
|
|
241
|
+
*/
|
|
242
|
+
close(): void;
|
|
243
|
+
}
|
|
244
|
+
export default TransferRegistry;
|
|
245
|
+
//# sourceMappingURL=TransferRegistry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TransferRegistry.d.ts","sourceRoot":"","sources":["../../../src/learning/transfer/TransferRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,gCAAgC;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,8BAA8B;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,8BAA8B;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,sBAAsB;IACtB,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IACzC,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qDAAqD;IACrD,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,2CAA2C;IAC3C,SAAS,EAAE,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,wCAAwC;IACxC,cAAc,EAAE,MAAM,CAAC;IACvB,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,+BAA+B;IAC/B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC7D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,EAAE,CAAyB;IACnC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAmC;gBAErC,MAAM,CAAC,EAAE,sBAAsB;IAW3C;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAwBxB;;;;;;;;;;;;;;OAcG;IACG,MAAM,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAsCnD;;;;;;;;;;;;;;OAcG;IACH,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,cAAc,EAAE;IA6BzE;;;;;;;;;;;;;;OAcG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM;IAgBhE;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,eAAe,IAAI,oBAAoB;IA0CvC;;;;;;;;;;;;OAYG;IACH,kBAAkB,CAAC,KAAK,GAAE,MAAW,GAAG,cAAc,EAAE;IA8BxD;;;;;;;;;;;;;OAaG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE;IAqB5F;;;;;;;;;;;;;;;;OAgBG;IACH,mBAAmB,CAAC,KAAK,GAAE,MAAW,EAAE,YAAY,GAAE,MAAU,GAAG,KAAK,CAAC;QACvE,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IA2BF;;;;;;;;;;;;;;OAcG;IACH,eAAe,CAAC,UAAU,GAAE,MAAW,GAAG,MAAM;IAgBhD;;;;;;;;;OASG;IACH,KAAK,IAAI,IAAI;CAId;AAED,eAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,410 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* TransferRegistry - Track pattern transfers between agents
|
|
4
|
+
*
|
|
5
|
+
* Records all transfer attempts (success and failure), queries transfer history,
|
|
6
|
+
* and calculates success rates per agent pair.
|
|
7
|
+
*
|
|
8
|
+
* Part of the Nightly-Learner Phase 2 implementation.
|
|
9
|
+
*
|
|
10
|
+
* @version 1.0.0
|
|
11
|
+
* @module src/learning/transfer/TransferRegistry
|
|
12
|
+
*/
|
|
13
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
16
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
17
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
18
|
+
}
|
|
19
|
+
Object.defineProperty(o, k2, desc);
|
|
20
|
+
}) : (function(o, m, k, k2) {
|
|
21
|
+
if (k2 === undefined) k2 = k;
|
|
22
|
+
o[k2] = m[k];
|
|
23
|
+
}));
|
|
24
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
25
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
26
|
+
}) : function(o, v) {
|
|
27
|
+
o["default"] = v;
|
|
28
|
+
});
|
|
29
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
30
|
+
var ownKeys = function(o) {
|
|
31
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
32
|
+
var ar = [];
|
|
33
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
34
|
+
return ar;
|
|
35
|
+
};
|
|
36
|
+
return ownKeys(o);
|
|
37
|
+
};
|
|
38
|
+
return function (mod) {
|
|
39
|
+
if (mod && mod.__esModule) return mod;
|
|
40
|
+
var result = {};
|
|
41
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
42
|
+
__setModuleDefault(result, mod);
|
|
43
|
+
return result;
|
|
44
|
+
};
|
|
45
|
+
})();
|
|
46
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
47
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
48
|
+
};
|
|
49
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
50
|
+
exports.TransferRegistry = void 0;
|
|
51
|
+
const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
|
|
52
|
+
const path = __importStar(require("path"));
|
|
53
|
+
const Logger_1 = require("../../utils/Logger");
|
|
54
|
+
const SecureRandom_1 = require("../../utils/SecureRandom");
|
|
55
|
+
/**
|
|
56
|
+
* TransferRegistry tracks all pattern transfer attempts
|
|
57
|
+
*
|
|
58
|
+
* Records success/failure of transfers, provides historical queries,
|
|
59
|
+
* and calculates success metrics per agent pair.
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* ```typescript
|
|
63
|
+
* const registry = new TransferRegistry({ dbPath: './memory.db' });
|
|
64
|
+
*
|
|
65
|
+
* // Record a transfer result
|
|
66
|
+
* await registry.record(transferResult);
|
|
67
|
+
*
|
|
68
|
+
* // Query transfer history
|
|
69
|
+
* const history = registry.getTransferHistory('test-generator', 10);
|
|
70
|
+
*
|
|
71
|
+
* // Get success rate between two agents
|
|
72
|
+
* const rate = registry.getSuccessRate('test-generator', 'coverage-analyzer');
|
|
73
|
+
*
|
|
74
|
+
* // Get overall statistics
|
|
75
|
+
* const stats = registry.getOverallStats();
|
|
76
|
+
* console.log(`Success rate: ${(stats.successRate * 100).toFixed(1)}%`);
|
|
77
|
+
*
|
|
78
|
+
* registry.close();
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
class TransferRegistry {
|
|
82
|
+
constructor(config) {
|
|
83
|
+
this.logger = Logger_1.Logger.getInstance();
|
|
84
|
+
this.config = {
|
|
85
|
+
dbPath: config?.dbPath || path.join(process.cwd(), '.agentic-qe', 'memory.db'),
|
|
86
|
+
};
|
|
87
|
+
this.db = new better_sqlite3_1.default(this.config.dbPath);
|
|
88
|
+
this.initializeSchema();
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Initialize database schema for transfer registry
|
|
92
|
+
*/
|
|
93
|
+
initializeSchema() {
|
|
94
|
+
this.db.exec(`
|
|
95
|
+
CREATE TABLE IF NOT EXISTS transfer_registry (
|
|
96
|
+
id TEXT PRIMARY KEY,
|
|
97
|
+
source_agent TEXT NOT NULL,
|
|
98
|
+
target_agent TEXT NOT NULL,
|
|
99
|
+
pattern_id TEXT NOT NULL,
|
|
100
|
+
status TEXT NOT NULL CHECK(status IN ('success', 'failed', 'skipped')),
|
|
101
|
+
reason TEXT,
|
|
102
|
+
compatibility_score REAL,
|
|
103
|
+
timestamp INTEGER NOT NULL
|
|
104
|
+
);
|
|
105
|
+
|
|
106
|
+
CREATE INDEX IF NOT EXISTS idx_transfer_reg_source ON transfer_registry(source_agent);
|
|
107
|
+
CREATE INDEX IF NOT EXISTS idx_transfer_reg_target ON transfer_registry(target_agent);
|
|
108
|
+
CREATE INDEX IF NOT EXISTS idx_transfer_reg_pattern ON transfer_registry(pattern_id);
|
|
109
|
+
CREATE INDEX IF NOT EXISTS idx_transfer_reg_timestamp ON transfer_registry(timestamp);
|
|
110
|
+
CREATE INDEX IF NOT EXISTS idx_transfer_reg_status ON transfer_registry(status);
|
|
111
|
+
CREATE INDEX IF NOT EXISTS idx_transfer_reg_pair ON transfer_registry(source_agent, target_agent);
|
|
112
|
+
`);
|
|
113
|
+
this.logger.debug('[TransferRegistry] Schema initialized');
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Record a transfer result
|
|
117
|
+
*
|
|
118
|
+
* Extracts individual transfer details from TransferResult and stores each
|
|
119
|
+
* pattern transfer as a separate record.
|
|
120
|
+
*
|
|
121
|
+
* @param result - Transfer result from TransferProtocol
|
|
122
|
+
* @returns Promise that resolves when all records are stored
|
|
123
|
+
*
|
|
124
|
+
* @example
|
|
125
|
+
* ```typescript
|
|
126
|
+
* const result = await protocol.executeTransfer(request);
|
|
127
|
+
* await registry.record(result);
|
|
128
|
+
* ```
|
|
129
|
+
*/
|
|
130
|
+
async record(result) {
|
|
131
|
+
const stmt = this.db.prepare(`
|
|
132
|
+
INSERT INTO transfer_registry
|
|
133
|
+
(id, source_agent, target_agent, pattern_id, status, reason, compatibility_score, timestamp)
|
|
134
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
135
|
+
`);
|
|
136
|
+
const now = Date.now();
|
|
137
|
+
// Record each pattern transfer from the result
|
|
138
|
+
for (const detail of result.details) {
|
|
139
|
+
const id = `reg-${now}-${SecureRandom_1.SecureRandom.randomString(8, 'alphanumeric')}`;
|
|
140
|
+
// Map TransferDetail status to TransferRecord status
|
|
141
|
+
const status = detail.status === 'transferred' ? 'success' :
|
|
142
|
+
detail.status === 'skipped' ? 'skipped' : 'failed';
|
|
143
|
+
stmt.run(id, result.sourceAgent, result.targetAgent, detail.patternId, status, detail.reason || null, detail.compatibilityScore || null, now);
|
|
144
|
+
}
|
|
145
|
+
this.logger.debug('[TransferRegistry] Recorded transfer', {
|
|
146
|
+
requestId: result.requestId,
|
|
147
|
+
source: result.sourceAgent,
|
|
148
|
+
target: result.targetAgent,
|
|
149
|
+
records: result.details.length,
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Get transfer history for a specific agent
|
|
154
|
+
*
|
|
155
|
+
* Returns records where the agent was either source or target.
|
|
156
|
+
*
|
|
157
|
+
* @param agentId - Agent identifier
|
|
158
|
+
* @param limit - Maximum number of records to return (default: 50)
|
|
159
|
+
* @returns Array of transfer records, sorted by timestamp (newest first)
|
|
160
|
+
*
|
|
161
|
+
* @example
|
|
162
|
+
* ```typescript
|
|
163
|
+
* const recent = registry.getTransferHistory('test-generator', 20);
|
|
164
|
+
* console.log(`Found ${recent.length} recent transfers`);
|
|
165
|
+
* ```
|
|
166
|
+
*/
|
|
167
|
+
getTransferHistory(agentId, limit = 50) {
|
|
168
|
+
const rows = this.db.prepare(`
|
|
169
|
+
SELECT * FROM transfer_registry
|
|
170
|
+
WHERE source_agent = ? OR target_agent = ?
|
|
171
|
+
ORDER BY timestamp DESC
|
|
172
|
+
LIMIT ?
|
|
173
|
+
`).all(agentId, agentId, limit);
|
|
174
|
+
return rows.map(row => ({
|
|
175
|
+
id: row.id,
|
|
176
|
+
sourceAgent: row.source_agent,
|
|
177
|
+
targetAgent: row.target_agent,
|
|
178
|
+
patternId: row.pattern_id,
|
|
179
|
+
status: row.status,
|
|
180
|
+
reason: row.reason || undefined,
|
|
181
|
+
compatibilityScore: row.compatibility_score || undefined,
|
|
182
|
+
timestamp: new Date(row.timestamp),
|
|
183
|
+
}));
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Get success rate between two specific agents
|
|
187
|
+
*
|
|
188
|
+
* Calculates the ratio of successful transfers to total attempts.
|
|
189
|
+
*
|
|
190
|
+
* @param sourceAgent - Source agent identifier
|
|
191
|
+
* @param targetAgent - Target agent identifier
|
|
192
|
+
* @returns Success rate as a decimal (0-1), or 0 if no transfers exist
|
|
193
|
+
*
|
|
194
|
+
* @example
|
|
195
|
+
* ```typescript
|
|
196
|
+
* const rate = registry.getSuccessRate('test-generator', 'coverage-analyzer');
|
|
197
|
+
* console.log(`Success rate: ${(rate * 100).toFixed(1)}%`);
|
|
198
|
+
* ```
|
|
199
|
+
*/
|
|
200
|
+
getSuccessRate(sourceAgent, targetAgent) {
|
|
201
|
+
const stats = this.db.prepare(`
|
|
202
|
+
SELECT
|
|
203
|
+
COUNT(*) as total,
|
|
204
|
+
SUM(CASE WHEN status = 'success' THEN 1 ELSE 0 END) as successes
|
|
205
|
+
FROM transfer_registry
|
|
206
|
+
WHERE source_agent = ? AND target_agent = ?
|
|
207
|
+
`).get(sourceAgent, targetAgent);
|
|
208
|
+
if (!stats || stats.total === 0) {
|
|
209
|
+
return 0;
|
|
210
|
+
}
|
|
211
|
+
return stats.successes / stats.total;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Get overall transfer statistics
|
|
215
|
+
*
|
|
216
|
+
* Aggregates all transfer records to provide:
|
|
217
|
+
* - Total transfer count
|
|
218
|
+
* - Overall success rate
|
|
219
|
+
* - Per-agent-pair success/failure counts
|
|
220
|
+
*
|
|
221
|
+
* @returns Overall statistics object
|
|
222
|
+
*
|
|
223
|
+
* @example
|
|
224
|
+
* ```typescript
|
|
225
|
+
* const stats = registry.getOverallStats();
|
|
226
|
+
* console.log(`Total transfers: ${stats.totalTransfers}`);
|
|
227
|
+
* console.log(`Success rate: ${(stats.successRate * 100).toFixed(1)}%`);
|
|
228
|
+
*
|
|
229
|
+
* for (const [pair, counts] of stats.byAgentPair) {
|
|
230
|
+
* console.log(`${pair}: ${counts.success} success, ${counts.fail} fail`);
|
|
231
|
+
* }
|
|
232
|
+
* ```
|
|
233
|
+
*/
|
|
234
|
+
getOverallStats() {
|
|
235
|
+
// Get overall counts
|
|
236
|
+
const overall = this.db.prepare(`
|
|
237
|
+
SELECT
|
|
238
|
+
COUNT(*) as total,
|
|
239
|
+
SUM(CASE WHEN status = 'success' THEN 1 ELSE 0 END) as successes
|
|
240
|
+
FROM transfer_registry
|
|
241
|
+
`).get();
|
|
242
|
+
// Get per-agent-pair counts
|
|
243
|
+
const pairRows = this.db.prepare(`
|
|
244
|
+
SELECT
|
|
245
|
+
source_agent,
|
|
246
|
+
target_agent,
|
|
247
|
+
SUM(CASE WHEN status = 'success' THEN 1 ELSE 0 END) as success,
|
|
248
|
+
SUM(CASE WHEN status IN ('failed', 'skipped') THEN 1 ELSE 0 END) as fail
|
|
249
|
+
FROM transfer_registry
|
|
250
|
+
GROUP BY source_agent, target_agent
|
|
251
|
+
`).all();
|
|
252
|
+
const byAgentPair = new Map();
|
|
253
|
+
for (const row of pairRows) {
|
|
254
|
+
const key = `${row.source_agent}->${row.target_agent}`;
|
|
255
|
+
byAgentPair.set(key, {
|
|
256
|
+
success: row.success,
|
|
257
|
+
fail: row.fail,
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
return {
|
|
261
|
+
totalTransfers: overall.total || 0,
|
|
262
|
+
successRate: overall.total > 0 ? (overall.successes || 0) / overall.total : 0,
|
|
263
|
+
byAgentPair,
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Get recent transfers within a time window
|
|
268
|
+
*
|
|
269
|
+
* @param hours - Number of hours to look back (default: 24)
|
|
270
|
+
* @returns Array of transfer records within the time window
|
|
271
|
+
*
|
|
272
|
+
* @example
|
|
273
|
+
* ```typescript
|
|
274
|
+
* // Get transfers from last 12 hours
|
|
275
|
+
* const recent = registry.getRecentTransfers(12);
|
|
276
|
+
* console.log(`${recent.length} transfers in last 12 hours`);
|
|
277
|
+
* ```
|
|
278
|
+
*/
|
|
279
|
+
getRecentTransfers(hours = 24) {
|
|
280
|
+
const cutoffTime = Date.now() - (hours * 60 * 60 * 1000);
|
|
281
|
+
const rows = this.db.prepare(`
|
|
282
|
+
SELECT * FROM transfer_registry
|
|
283
|
+
WHERE timestamp >= ?
|
|
284
|
+
ORDER BY timestamp DESC
|
|
285
|
+
`).all(cutoffTime);
|
|
286
|
+
return rows.map(row => ({
|
|
287
|
+
id: row.id,
|
|
288
|
+
sourceAgent: row.source_agent,
|
|
289
|
+
targetAgent: row.target_agent,
|
|
290
|
+
patternId: row.pattern_id,
|
|
291
|
+
status: row.status,
|
|
292
|
+
reason: row.reason || undefined,
|
|
293
|
+
compatibilityScore: row.compatibility_score || undefined,
|
|
294
|
+
timestamp: new Date(row.timestamp),
|
|
295
|
+
}));
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Get transfer statistics for a specific pattern
|
|
299
|
+
*
|
|
300
|
+
* Useful for tracking how well a specific pattern transfers across agents.
|
|
301
|
+
*
|
|
302
|
+
* @param patternId - Pattern identifier
|
|
303
|
+
* @returns Statistics for the pattern's transfer history
|
|
304
|
+
*
|
|
305
|
+
* @example
|
|
306
|
+
* ```typescript
|
|
307
|
+
* const stats = registry.getPatternStats('pattern-123');
|
|
308
|
+
* console.log(`Pattern transferred ${stats.total} times with ${stats.successRate * 100}% success`);
|
|
309
|
+
* ```
|
|
310
|
+
*/
|
|
311
|
+
getPatternStats(patternId) {
|
|
312
|
+
const stats = this.db.prepare(`
|
|
313
|
+
SELECT
|
|
314
|
+
COUNT(*) as total,
|
|
315
|
+
SUM(CASE WHEN status = 'success' THEN 1 ELSE 0 END) as successes
|
|
316
|
+
FROM transfer_registry
|
|
317
|
+
WHERE pattern_id = ?
|
|
318
|
+
`).get(patternId);
|
|
319
|
+
const agents = this.db.prepare(`
|
|
320
|
+
SELECT DISTINCT target_agent FROM transfer_registry
|
|
321
|
+
WHERE pattern_id = ? AND status = 'success'
|
|
322
|
+
`).all(patternId).map((row) => row.target_agent);
|
|
323
|
+
return {
|
|
324
|
+
total: stats.total || 0,
|
|
325
|
+
successRate: stats.total > 0 ? (stats.successes || 0) / stats.total : 0,
|
|
326
|
+
agents,
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* Get most successful transfer pairs
|
|
331
|
+
*
|
|
332
|
+
* Identifies agent pairs with the highest transfer success rates.
|
|
333
|
+
*
|
|
334
|
+
* @param limit - Maximum number of pairs to return (default: 10)
|
|
335
|
+
* @param minTransfers - Minimum number of transfers required (default: 5)
|
|
336
|
+
* @returns Array of agent pairs sorted by success rate
|
|
337
|
+
*
|
|
338
|
+
* @example
|
|
339
|
+
* ```typescript
|
|
340
|
+
* const topPairs = registry.getTopTransferPairs(5, 10);
|
|
341
|
+
* topPairs.forEach(pair => {
|
|
342
|
+
* console.log(`${pair.sourceAgent} -> ${pair.targetAgent}: ${(pair.successRate * 100).toFixed(1)}%`);
|
|
343
|
+
* });
|
|
344
|
+
* ```
|
|
345
|
+
*/
|
|
346
|
+
getTopTransferPairs(limit = 10, minTransfers = 5) {
|
|
347
|
+
const rows = this.db.prepare(`
|
|
348
|
+
SELECT
|
|
349
|
+
source_agent,
|
|
350
|
+
target_agent,
|
|
351
|
+
COUNT(*) as total,
|
|
352
|
+
SUM(CASE WHEN status = 'success' THEN 1 ELSE 0 END) as successes
|
|
353
|
+
FROM transfer_registry
|
|
354
|
+
GROUP BY source_agent, target_agent
|
|
355
|
+
HAVING total >= ?
|
|
356
|
+
ORDER BY (1.0 * successes / total) DESC, total DESC
|
|
357
|
+
LIMIT ?
|
|
358
|
+
`).all(minTransfers, limit);
|
|
359
|
+
return rows.map(row => ({
|
|
360
|
+
sourceAgent: row.source_agent,
|
|
361
|
+
targetAgent: row.target_agent,
|
|
362
|
+
successRate: row.successes / row.total,
|
|
363
|
+
totalTransfers: row.total,
|
|
364
|
+
}));
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* Clear old transfer records
|
|
368
|
+
*
|
|
369
|
+
* Removes records older than the specified number of days.
|
|
370
|
+
* Useful for maintaining database size.
|
|
371
|
+
*
|
|
372
|
+
* @param daysToKeep - Number of days of history to retain (default: 90)
|
|
373
|
+
* @returns Number of records deleted
|
|
374
|
+
*
|
|
375
|
+
* @example
|
|
376
|
+
* ```typescript
|
|
377
|
+
* const deleted = registry.clearOldRecords(30);
|
|
378
|
+
* console.log(`Deleted ${deleted} records older than 30 days`);
|
|
379
|
+
* ```
|
|
380
|
+
*/
|
|
381
|
+
clearOldRecords(daysToKeep = 90) {
|
|
382
|
+
const cutoffTime = Date.now() - (daysToKeep * 24 * 60 * 60 * 1000);
|
|
383
|
+
const result = this.db.prepare(`
|
|
384
|
+
DELETE FROM transfer_registry
|
|
385
|
+
WHERE timestamp < ?
|
|
386
|
+
`).run(cutoffTime);
|
|
387
|
+
this.logger.info('[TransferRegistry] Cleared old records', {
|
|
388
|
+
deleted: result.changes,
|
|
389
|
+
daysToKeep,
|
|
390
|
+
});
|
|
391
|
+
return result.changes;
|
|
392
|
+
}
|
|
393
|
+
/**
|
|
394
|
+
* Close database connection
|
|
395
|
+
*
|
|
396
|
+
* Should be called when registry is no longer needed to release resources.
|
|
397
|
+
*
|
|
398
|
+
* @example
|
|
399
|
+
* ```typescript
|
|
400
|
+
* registry.close();
|
|
401
|
+
* ```
|
|
402
|
+
*/
|
|
403
|
+
close() {
|
|
404
|
+
this.db.close();
|
|
405
|
+
this.logger.debug('[TransferRegistry] Database closed');
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
exports.TransferRegistry = TransferRegistry;
|
|
409
|
+
exports.default = TransferRegistry;
|
|
410
|
+
//# sourceMappingURL=TransferRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TransferRegistry.js","sourceRoot":"","sources":["../../../src/learning/transfer/TransferRegistry.ts"],"names":[],"mappings":"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"}
|