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.
Files changed (255) hide show
  1. package/CHANGELOG.md +72 -0
  2. package/README.md +1 -1
  3. package/dist/agents/ApiContractValidatorAgent.d.ts +5 -0
  4. package/dist/agents/ApiContractValidatorAgent.d.ts.map +1 -1
  5. package/dist/agents/ApiContractValidatorAgent.js +41 -0
  6. package/dist/agents/ApiContractValidatorAgent.js.map +1 -1
  7. package/dist/agents/BaseAgent.d.ts +56 -49
  8. package/dist/agents/BaseAgent.d.ts.map +1 -1
  9. package/dist/agents/BaseAgent.js +208 -604
  10. package/dist/agents/BaseAgent.js.map +1 -1
  11. package/dist/agents/CodeComplexityAnalyzerAgent.d.ts +5 -0
  12. package/dist/agents/CodeComplexityAnalyzerAgent.d.ts.map +1 -1
  13. package/dist/agents/CodeComplexityAnalyzerAgent.js +47 -0
  14. package/dist/agents/CodeComplexityAnalyzerAgent.js.map +1 -1
  15. package/dist/agents/CoverageAnalyzerAgent.d.ts +26 -0
  16. package/dist/agents/CoverageAnalyzerAgent.d.ts.map +1 -1
  17. package/dist/agents/CoverageAnalyzerAgent.js +149 -1
  18. package/dist/agents/CoverageAnalyzerAgent.js.map +1 -1
  19. package/dist/agents/DeploymentReadinessAgent.d.ts +5 -0
  20. package/dist/agents/DeploymentReadinessAgent.d.ts.map +1 -1
  21. package/dist/agents/DeploymentReadinessAgent.js +41 -0
  22. package/dist/agents/DeploymentReadinessAgent.js.map +1 -1
  23. package/dist/agents/FlakyTestHunterAgent.d.ts +7 -2
  24. package/dist/agents/FlakyTestHunterAgent.d.ts.map +1 -1
  25. package/dist/agents/FlakyTestHunterAgent.js +48 -104
  26. package/dist/agents/FlakyTestHunterAgent.js.map +1 -1
  27. package/dist/agents/FleetCommanderAgent.d.ts +5 -0
  28. package/dist/agents/FleetCommanderAgent.d.ts.map +1 -1
  29. package/dist/agents/FleetCommanderAgent.js +51 -0
  30. package/dist/agents/FleetCommanderAgent.js.map +1 -1
  31. package/dist/agents/PerformanceTesterAgent.d.ts +5 -0
  32. package/dist/agents/PerformanceTesterAgent.d.ts.map +1 -1
  33. package/dist/agents/PerformanceTesterAgent.js +44 -0
  34. package/dist/agents/PerformanceTesterAgent.js.map +1 -1
  35. package/dist/agents/ProductionIntelligenceAgent.d.ts +5 -0
  36. package/dist/agents/ProductionIntelligenceAgent.d.ts.map +1 -1
  37. package/dist/agents/ProductionIntelligenceAgent.js +46 -0
  38. package/dist/agents/ProductionIntelligenceAgent.js.map +1 -1
  39. package/dist/agents/QXPartnerAgent.js +52 -0
  40. package/dist/agents/QXPartnerAgent.js.map +1 -1
  41. package/dist/agents/QualityAnalyzerAgent.d.ts +5 -0
  42. package/dist/agents/QualityAnalyzerAgent.d.ts.map +1 -1
  43. package/dist/agents/QualityAnalyzerAgent.js +45 -0
  44. package/dist/agents/QualityAnalyzerAgent.js.map +1 -1
  45. package/dist/agents/QualityGateAgent.d.ts +40 -0
  46. package/dist/agents/QualityGateAgent.d.ts.map +1 -1
  47. package/dist/agents/QualityGateAgent.js +227 -1
  48. package/dist/agents/QualityGateAgent.js.map +1 -1
  49. package/dist/agents/RegressionRiskAnalyzerAgent.d.ts +5 -0
  50. package/dist/agents/RegressionRiskAnalyzerAgent.d.ts.map +1 -1
  51. package/dist/agents/RegressionRiskAnalyzerAgent.js +46 -0
  52. package/dist/agents/RegressionRiskAnalyzerAgent.js.map +1 -1
  53. package/dist/agents/RequirementsValidatorAgent.d.ts +5 -0
  54. package/dist/agents/RequirementsValidatorAgent.d.ts.map +1 -1
  55. package/dist/agents/RequirementsValidatorAgent.js +42 -0
  56. package/dist/agents/RequirementsValidatorAgent.js.map +1 -1
  57. package/dist/agents/SecurityScannerAgent.d.ts +5 -0
  58. package/dist/agents/SecurityScannerAgent.d.ts.map +1 -1
  59. package/dist/agents/SecurityScannerAgent.js +39 -0
  60. package/dist/agents/SecurityScannerAgent.js.map +1 -1
  61. package/dist/agents/TestDataArchitectAgent.d.ts +5 -0
  62. package/dist/agents/TestDataArchitectAgent.d.ts.map +1 -1
  63. package/dist/agents/TestDataArchitectAgent.js +46 -0
  64. package/dist/agents/TestDataArchitectAgent.js.map +1 -1
  65. package/dist/agents/TestExecutorAgent.d.ts +6 -1
  66. package/dist/agents/TestExecutorAgent.d.ts.map +1 -1
  67. package/dist/agents/TestExecutorAgent.js +52 -46
  68. package/dist/agents/TestExecutorAgent.js.map +1 -1
  69. package/dist/agents/TestGeneratorAgent.d.ts +5 -0
  70. package/dist/agents/TestGeneratorAgent.d.ts.map +1 -1
  71. package/dist/agents/TestGeneratorAgent.js +51 -35
  72. package/dist/agents/TestGeneratorAgent.js.map +1 -1
  73. package/dist/agents/adapters/CoordinatorAdapter.d.ts +47 -0
  74. package/dist/agents/adapters/CoordinatorAdapter.d.ts.map +1 -0
  75. package/dist/agents/adapters/CoordinatorAdapter.js +266 -0
  76. package/dist/agents/adapters/CoordinatorAdapter.js.map +1 -0
  77. package/dist/agents/adapters/LearningEngineAdapter.d.ts +45 -0
  78. package/dist/agents/adapters/LearningEngineAdapter.d.ts.map +1 -0
  79. package/dist/agents/adapters/LearningEngineAdapter.js +279 -0
  80. package/dist/agents/adapters/LearningEngineAdapter.js.map +1 -0
  81. package/dist/agents/adapters/LifecycleManagerAdapter.d.ts +45 -0
  82. package/dist/agents/adapters/LifecycleManagerAdapter.d.ts.map +1 -0
  83. package/dist/agents/adapters/LifecycleManagerAdapter.js +128 -0
  84. package/dist/agents/adapters/LifecycleManagerAdapter.js.map +1 -0
  85. package/dist/agents/adapters/MemoryServiceAdapter.d.ts +96 -0
  86. package/dist/agents/adapters/MemoryServiceAdapter.d.ts.map +1 -0
  87. package/dist/agents/adapters/MemoryServiceAdapter.js +266 -0
  88. package/dist/agents/adapters/MemoryServiceAdapter.js.map +1 -0
  89. package/dist/agents/adapters/index.d.ts +14 -0
  90. package/dist/agents/adapters/index.d.ts.map +1 -0
  91. package/dist/agents/adapters/index.js +25 -0
  92. package/dist/agents/adapters/index.js.map +1 -0
  93. package/dist/agents/lifecycle/AgentLifecycleManager.d.ts.map +1 -1
  94. package/dist/agents/lifecycle/AgentLifecycleManager.js +17 -8
  95. package/dist/agents/lifecycle/AgentLifecycleManager.js.map +1 -1
  96. package/dist/cli/index.js +68 -0
  97. package/dist/cli/index.js.map +1 -1
  98. package/dist/core/cache/BinaryCacheBuilder.d.ts +84 -0
  99. package/dist/core/cache/BinaryCacheBuilder.d.ts.map +1 -0
  100. package/dist/core/cache/BinaryCacheBuilder.js +225 -0
  101. package/dist/core/cache/BinaryCacheBuilder.js.map +1 -0
  102. package/dist/core/cache/BinaryCacheManager.d.ts +142 -0
  103. package/dist/core/cache/BinaryCacheManager.d.ts.map +1 -0
  104. package/dist/core/cache/BinaryCacheManager.js +354 -0
  105. package/dist/core/cache/BinaryCacheManager.js.map +1 -0
  106. package/dist/core/cache/BinaryCacheReader.d.ts +129 -0
  107. package/dist/core/cache/BinaryCacheReader.d.ts.map +1 -0
  108. package/dist/core/cache/BinaryCacheReader.js +243 -0
  109. package/dist/core/cache/BinaryCacheReader.js.map +1 -0
  110. package/dist/core/cache/BinaryMetadataCache.d.ts +533 -0
  111. package/dist/core/cache/BinaryMetadataCache.d.ts.map +1 -0
  112. package/dist/core/cache/BinaryMetadataCache.js +142 -0
  113. package/dist/core/cache/BinaryMetadataCache.js.map +1 -0
  114. package/dist/core/cache/CacheInvalidator.d.ts +103 -0
  115. package/dist/core/cache/CacheInvalidator.d.ts.map +1 -0
  116. package/dist/core/cache/CacheInvalidator.js +152 -0
  117. package/dist/core/cache/CacheInvalidator.js.map +1 -0
  118. package/dist/core/cache/CacheValidator.d.ts +69 -0
  119. package/dist/core/cache/CacheValidator.d.ts.map +1 -0
  120. package/dist/core/cache/CacheValidator.js +189 -0
  121. package/dist/core/cache/CacheValidator.js.map +1 -0
  122. package/dist/core/cache/MessagePackSerializer.d.ts +163 -0
  123. package/dist/core/cache/MessagePackSerializer.d.ts.map +1 -0
  124. package/dist/core/cache/MessagePackSerializer.js +274 -0
  125. package/dist/core/cache/MessagePackSerializer.js.map +1 -0
  126. package/dist/core/cache/index.d.ts +58 -0
  127. package/dist/core/cache/index.d.ts.map +1 -0
  128. package/dist/core/cache/index.js +102 -0
  129. package/dist/core/cache/index.js.map +1 -0
  130. package/dist/core/index.d.ts +2 -0
  131. package/dist/core/index.d.ts.map +1 -1
  132. package/dist/core/index.js +18 -0
  133. package/dist/core/index.js.map +1 -1
  134. package/dist/core/memory/HNSWVectorMemory.js +1 -1
  135. package/dist/core/memory/PatternStoreFactory.d.ts +28 -0
  136. package/dist/core/memory/PatternStoreFactory.d.ts.map +1 -1
  137. package/dist/core/memory/PatternStoreFactory.js +68 -3
  138. package/dist/core/memory/PatternStoreFactory.js.map +1 -1
  139. package/dist/core/platform/FileOperations.d.ts +124 -0
  140. package/dist/core/platform/FileOperations.d.ts.map +1 -0
  141. package/dist/core/platform/FileOperations.js +371 -0
  142. package/dist/core/platform/FileOperations.js.map +1 -0
  143. package/dist/core/platform/PlatformDetector.d.ts +53 -0
  144. package/dist/core/platform/PlatformDetector.d.ts.map +1 -0
  145. package/dist/core/platform/PlatformDetector.js +251 -0
  146. package/dist/core/platform/PlatformDetector.js.map +1 -0
  147. package/dist/core/platform/index.d.ts +12 -0
  148. package/dist/core/platform/index.d.ts.map +1 -0
  149. package/dist/core/platform/index.js +28 -0
  150. package/dist/core/platform/index.js.map +1 -0
  151. package/dist/core/strategies/AcceleratedLearningStrategy.d.ts +74 -0
  152. package/dist/core/strategies/AcceleratedLearningStrategy.d.ts.map +1 -0
  153. package/dist/core/strategies/AcceleratedLearningStrategy.js +200 -0
  154. package/dist/core/strategies/AcceleratedLearningStrategy.js.map +1 -0
  155. package/dist/core/strategies/AgentCoordinationStrategy.d.ts +157 -0
  156. package/dist/core/strategies/AgentCoordinationStrategy.d.ts.map +1 -0
  157. package/dist/core/strategies/AgentCoordinationStrategy.js +12 -0
  158. package/dist/core/strategies/AgentCoordinationStrategy.js.map +1 -0
  159. package/dist/core/strategies/AgentLearningStrategy.d.ts +200 -0
  160. package/dist/core/strategies/AgentLearningStrategy.d.ts.map +1 -0
  161. package/dist/core/strategies/AgentLearningStrategy.js +13 -0
  162. package/dist/core/strategies/AgentLearningStrategy.js.map +1 -0
  163. package/dist/core/strategies/AgentLifecycleStrategy.d.ts +116 -0
  164. package/dist/core/strategies/AgentLifecycleStrategy.d.ts.map +1 -0
  165. package/dist/core/strategies/AgentLifecycleStrategy.js +12 -0
  166. package/dist/core/strategies/AgentLifecycleStrategy.js.map +1 -0
  167. package/dist/core/strategies/AgentMemoryStrategy.d.ts +154 -0
  168. package/dist/core/strategies/AgentMemoryStrategy.d.ts.map +1 -0
  169. package/dist/core/strategies/AgentMemoryStrategy.js +13 -0
  170. package/dist/core/strategies/AgentMemoryStrategy.js.map +1 -0
  171. package/dist/core/strategies/DefaultCoordinationStrategy.d.ts +105 -0
  172. package/dist/core/strategies/DefaultCoordinationStrategy.d.ts.map +1 -0
  173. package/dist/core/strategies/DefaultCoordinationStrategy.js +332 -0
  174. package/dist/core/strategies/DefaultCoordinationStrategy.js.map +1 -0
  175. package/dist/core/strategies/DefaultLearningStrategy.d.ts +120 -0
  176. package/dist/core/strategies/DefaultLearningStrategy.d.ts.map +1 -0
  177. package/dist/core/strategies/DefaultLearningStrategy.js +365 -0
  178. package/dist/core/strategies/DefaultLearningStrategy.js.map +1 -0
  179. package/dist/core/strategies/DefaultLifecycleStrategy.d.ts +129 -0
  180. package/dist/core/strategies/DefaultLifecycleStrategy.d.ts.map +1 -0
  181. package/dist/core/strategies/DefaultLifecycleStrategy.js +297 -0
  182. package/dist/core/strategies/DefaultLifecycleStrategy.js.map +1 -0
  183. package/dist/core/strategies/DefaultMemoryStrategy.d.ts +91 -0
  184. package/dist/core/strategies/DefaultMemoryStrategy.d.ts.map +1 -0
  185. package/dist/core/strategies/DefaultMemoryStrategy.js +257 -0
  186. package/dist/core/strategies/DefaultMemoryStrategy.js.map +1 -0
  187. package/dist/core/strategies/DistributedMemoryStrategy.d.ts +85 -0
  188. package/dist/core/strategies/DistributedMemoryStrategy.d.ts.map +1 -0
  189. package/dist/core/strategies/DistributedMemoryStrategy.js +126 -0
  190. package/dist/core/strategies/DistributedMemoryStrategy.js.map +1 -0
  191. package/dist/core/strategies/index.d.ts +95 -0
  192. package/dist/core/strategies/index.d.ts.map +1 -0
  193. package/dist/core/strategies/index.js +65 -0
  194. package/dist/core/strategies/index.js.map +1 -0
  195. package/dist/learning/PerformanceOptimizer.js +2 -2
  196. package/dist/learning/PerformanceOptimizer.js.map +1 -1
  197. package/dist/learning/capture/ExperienceExtractor.d.ts +219 -0
  198. package/dist/learning/capture/ExperienceExtractor.d.ts.map +1 -0
  199. package/dist/learning/capture/ExperienceExtractor.js +536 -0
  200. package/dist/learning/capture/ExperienceExtractor.js.map +1 -0
  201. package/dist/learning/capture/ExperienceStore.d.ts +196 -0
  202. package/dist/learning/capture/ExperienceStore.d.ts.map +1 -0
  203. package/dist/learning/capture/ExperienceStore.js +453 -0
  204. package/dist/learning/capture/ExperienceStore.js.map +1 -0
  205. package/dist/learning/scheduler/SleepScheduler.d.ts +2 -0
  206. package/dist/learning/scheduler/SleepScheduler.d.ts.map +1 -1
  207. package/dist/learning/scheduler/SleepScheduler.js +2 -0
  208. package/dist/learning/scheduler/SleepScheduler.js.map +1 -1
  209. package/dist/learning/synthesis/ClusteringEngine.d.ts +122 -0
  210. package/dist/learning/synthesis/ClusteringEngine.d.ts.map +1 -0
  211. package/dist/learning/synthesis/ClusteringEngine.js +356 -0
  212. package/dist/learning/synthesis/ClusteringEngine.js.map +1 -0
  213. package/dist/learning/transfer/TransferRegistry.d.ts +245 -0
  214. package/dist/learning/transfer/TransferRegistry.d.ts.map +1 -0
  215. package/dist/learning/transfer/TransferRegistry.js +410 -0
  216. package/dist/learning/transfer/TransferRegistry.js.map +1 -0
  217. package/dist/mcp/handlers/base-handler.d.ts +28 -1
  218. package/dist/mcp/handlers/base-handler.d.ts.map +1 -1
  219. package/dist/mcp/handlers/base-handler.js +41 -0
  220. package/dist/mcp/handlers/base-handler.js.map +1 -1
  221. package/dist/mcp/handlers/task-orchestrate.d.ts +11 -0
  222. package/dist/mcp/handlers/task-orchestrate.d.ts.map +1 -1
  223. package/dist/mcp/handlers/task-orchestrate.js +297 -4
  224. package/dist/mcp/handlers/task-orchestrate.js.map +1 -1
  225. package/dist/mcp/server-instructions.d.ts +1 -1
  226. package/dist/mcp/server-instructions.js +1 -1
  227. package/dist/mcp/services/AgentRegistry.d.ts +6 -1
  228. package/dist/mcp/services/AgentRegistry.d.ts.map +1 -1
  229. package/dist/mcp/services/AgentRegistry.js +34 -3
  230. package/dist/mcp/services/AgentRegistry.js.map +1 -1
  231. package/dist/output/AIActionSuggester.d.ts +98 -0
  232. package/dist/output/AIActionSuggester.d.ts.map +1 -0
  233. package/dist/output/AIActionSuggester.js +499 -0
  234. package/dist/output/AIActionSuggester.js.map +1 -0
  235. package/dist/output/CLIOutputHelper.d.ts +169 -0
  236. package/dist/output/CLIOutputHelper.d.ts.map +1 -0
  237. package/dist/output/CLIOutputHelper.js +320 -0
  238. package/dist/output/CLIOutputHelper.js.map +1 -0
  239. package/dist/output/OutputFormatter.d.ts +764 -0
  240. package/dist/output/OutputFormatter.d.ts.map +1 -0
  241. package/dist/output/OutputFormatter.js +125 -0
  242. package/dist/output/OutputFormatter.js.map +1 -0
  243. package/dist/output/OutputFormatterImpl.d.ts +131 -0
  244. package/dist/output/OutputFormatterImpl.d.ts.map +1 -0
  245. package/dist/output/OutputFormatterImpl.js +556 -0
  246. package/dist/output/OutputFormatterImpl.js.map +1 -0
  247. package/dist/output/examples.d.ts +38 -0
  248. package/dist/output/examples.d.ts.map +1 -0
  249. package/dist/output/examples.js +503 -0
  250. package/dist/output/examples.js.map +1 -0
  251. package/dist/output/index.d.ts +16 -0
  252. package/dist/output/index.d.ts.map +1 -0
  253. package/dist/output/index.js +58 -0
  254. package/dist/output/index.js.map +1 -0
  255. 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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"}