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,196 @@
1
+ /**
2
+ * ExperienceStore - Storage layer for captured agent experiences
3
+ *
4
+ * Provides efficient storage and retrieval of captured experiences using SQLite.
5
+ * Supports batch operations, filtering, and automatic cleanup via TTL.
6
+ *
7
+ * Part of the Nightly-Learner Phase 1 implementation.
8
+ *
9
+ * @version 1.0.0
10
+ * @module src/learning/capture/ExperienceStore
11
+ */
12
+ import BetterSqlite3 from 'better-sqlite3';
13
+ import { CapturedExperience } from './ExperienceCapture';
14
+ export interface ExperienceStoreConfig {
15
+ /** Database path. Default: .agentic-qe/memory.db */
16
+ dbPath?: string;
17
+ /** Enable debug logging */
18
+ debug?: boolean;
19
+ }
20
+ export interface ExperienceQueryOptions {
21
+ /** Maximum number of results */
22
+ limit?: number;
23
+ /** Skip first N results */
24
+ offset?: number;
25
+ /** Filter by processed status */
26
+ processed?: boolean;
27
+ /** Order by field (created_at, quality_score) */
28
+ orderBy?: 'created_at' | 'quality_score';
29
+ /** Sort direction */
30
+ orderDir?: 'ASC' | 'DESC';
31
+ }
32
+ export interface ExperienceStats {
33
+ total: number;
34
+ processed: number;
35
+ unprocessed: number;
36
+ byAgentType: Record<string, number>;
37
+ byTaskType: Record<string, number>;
38
+ avgQualityScore: number;
39
+ successRate: number;
40
+ }
41
+ /**
42
+ * ExperienceStore manages persistent storage of captured experiences
43
+ *
44
+ * @example
45
+ * ```typescript
46
+ * const store = new ExperienceStore({ dbPath: '.agentic-qe/memory.db' });
47
+ *
48
+ * // Store experiences
49
+ * await store.store(experience);
50
+ * await store.storeBatch(experiences);
51
+ *
52
+ * // Query experiences
53
+ * const recent = store.getRecent(24);
54
+ * const unprocessed = store.getUnprocessed(100);
55
+ *
56
+ * // Mark as processed
57
+ * store.markProcessed(['exp-1', 'exp-2']);
58
+ *
59
+ * // Cleanup old data
60
+ * store.cleanup(30); // Remove experiences older than 30 days
61
+ * ```
62
+ */
63
+ export declare class ExperienceStore {
64
+ private db;
65
+ private logger;
66
+ private config;
67
+ /**
68
+ * Create a new ExperienceStore
69
+ *
70
+ * @param config - Store configuration
71
+ */
72
+ constructor(config?: ExperienceStoreConfig);
73
+ /**
74
+ * Initialize database schema for experience storage
75
+ */
76
+ private initializeSchema;
77
+ /**
78
+ * Store a single experience
79
+ *
80
+ * @param experience - Experience to store
81
+ * @returns Promise that resolves when stored
82
+ */
83
+ store(experience: CapturedExperience): Promise<void>;
84
+ /**
85
+ * Store multiple experiences in a batch
86
+ *
87
+ * @param experiences - Experiences to store
88
+ * @returns Number of experiences stored
89
+ */
90
+ storeBatch(experiences: CapturedExperience[]): Promise<number>;
91
+ /**
92
+ * Get experiences by agent type
93
+ *
94
+ * @param agentType - Agent type to filter by
95
+ * @param limit - Maximum number of results (default: 100)
96
+ * @returns Array of experiences
97
+ */
98
+ getByAgentType(agentType: string, limit?: number): CapturedExperience[];
99
+ /**
100
+ * Get experiences by task type
101
+ *
102
+ * @param taskType - Task type to filter by
103
+ * @param limit - Maximum number of results (default: 100)
104
+ * @returns Array of experiences
105
+ */
106
+ getByTaskType(taskType: string, limit?: number): CapturedExperience[];
107
+ /**
108
+ * Get unprocessed experiences
109
+ *
110
+ * @param limit - Maximum number of results (default: 100)
111
+ * @returns Array of unprocessed experiences
112
+ */
113
+ getUnprocessed(limit?: number): CapturedExperience[];
114
+ /**
115
+ * Mark experiences as processed
116
+ *
117
+ * @param ids - Experience IDs to mark as processed
118
+ */
119
+ markProcessed(ids: string[]): void;
120
+ /**
121
+ * Get recent experiences within a time window
122
+ *
123
+ * @param hours - Number of hours to look back (default: 24)
124
+ * @param limit - Maximum number of results (default: 100)
125
+ * @returns Array of recent experiences
126
+ */
127
+ getRecent(hours?: number, limit?: number): CapturedExperience[];
128
+ /**
129
+ * Get experiences within a date range
130
+ *
131
+ * @param startDate - Start of date range
132
+ * @param endDate - End of date range
133
+ * @param options - Query options
134
+ * @returns Array of experiences
135
+ */
136
+ getByDateRange(startDate: Date, endDate: Date, options?: ExperienceQueryOptions): CapturedExperience[];
137
+ /**
138
+ * Get top performing experiences by quality score
139
+ *
140
+ * @param limit - Maximum number of results (default: 10)
141
+ * @returns Array of high-quality experiences
142
+ */
143
+ getTopPerforming(limit?: number): CapturedExperience[];
144
+ /**
145
+ * Get experiences by ID
146
+ *
147
+ * @param ids - Experience IDs to retrieve
148
+ * @returns Array of experiences
149
+ */
150
+ getByIds(ids: string[]): CapturedExperience[];
151
+ /**
152
+ * Get storage statistics
153
+ *
154
+ * @returns Storage statistics
155
+ */
156
+ getStats(): ExperienceStats;
157
+ /**
158
+ * Count experiences matching criteria
159
+ *
160
+ * @param agentType - Optional agent type filter
161
+ * @param taskType - Optional task type filter
162
+ * @param processed - Optional processed status filter
163
+ * @returns Count of matching experiences
164
+ */
165
+ count(agentType?: string, taskType?: string, processed?: boolean): number;
166
+ /**
167
+ * Delete experiences older than specified days (TTL cleanup)
168
+ *
169
+ * @param days - Delete experiences older than this many days
170
+ * @returns Number of experiences deleted
171
+ */
172
+ cleanup(days?: number): number;
173
+ /**
174
+ * Delete all experiences (for testing)
175
+ */
176
+ clear(): void;
177
+ /**
178
+ * Convert database row to CapturedExperience
179
+ *
180
+ * @param row - Database row
181
+ * @returns CapturedExperience object
182
+ */
183
+ private rowToExperience;
184
+ /**
185
+ * Close database connection
186
+ */
187
+ close(): void;
188
+ /**
189
+ * Get database instance (for advanced queries)
190
+ *
191
+ * @returns Database instance
192
+ */
193
+ getDatabase(): BetterSqlite3.Database;
194
+ }
195
+ export default ExperienceStore;
196
+ //# sourceMappingURL=ExperienceStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExperienceStore.d.ts","sourceRoot":"","sources":["../../../src/learning/capture/ExperienceStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,453 @@
1
+ "use strict";
2
+ /**
3
+ * ExperienceStore - Storage layer for captured agent experiences
4
+ *
5
+ * Provides efficient storage and retrieval of captured experiences using SQLite.
6
+ * Supports batch operations, filtering, and automatic cleanup via TTL.
7
+ *
8
+ * Part of the Nightly-Learner Phase 1 implementation.
9
+ *
10
+ * @version 1.0.0
11
+ * @module src/learning/capture/ExperienceStore
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.ExperienceStore = void 0;
51
+ const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
52
+ const path = __importStar(require("path"));
53
+ const fs = __importStar(require("fs"));
54
+ const Logger_1 = require("../../utils/Logger");
55
+ /**
56
+ * ExperienceStore manages persistent storage of captured experiences
57
+ *
58
+ * @example
59
+ * ```typescript
60
+ * const store = new ExperienceStore({ dbPath: '.agentic-qe/memory.db' });
61
+ *
62
+ * // Store experiences
63
+ * await store.store(experience);
64
+ * await store.storeBatch(experiences);
65
+ *
66
+ * // Query experiences
67
+ * const recent = store.getRecent(24);
68
+ * const unprocessed = store.getUnprocessed(100);
69
+ *
70
+ * // Mark as processed
71
+ * store.markProcessed(['exp-1', 'exp-2']);
72
+ *
73
+ * // Cleanup old data
74
+ * store.cleanup(30); // Remove experiences older than 30 days
75
+ * ```
76
+ */
77
+ class ExperienceStore {
78
+ /**
79
+ * Create a new ExperienceStore
80
+ *
81
+ * @param config - Store configuration
82
+ */
83
+ constructor(config) {
84
+ this.logger = Logger_1.Logger.getInstance();
85
+ this.config = {
86
+ dbPath: config?.dbPath || path.join(process.cwd(), '.agentic-qe', 'memory.db'),
87
+ debug: config?.debug ?? false,
88
+ };
89
+ // Ensure the directory exists before opening the database
90
+ const dbDir = path.dirname(this.config.dbPath);
91
+ if (!fs.existsSync(dbDir)) {
92
+ fs.mkdirSync(dbDir, { recursive: true });
93
+ }
94
+ this.db = new better_sqlite3_1.default(this.config.dbPath);
95
+ this.initializeSchema();
96
+ if (this.config.debug) {
97
+ this.logger.debug('[ExperienceStore] Initialized', { dbPath: this.config.dbPath });
98
+ }
99
+ }
100
+ /**
101
+ * Initialize database schema for experience storage
102
+ */
103
+ initializeSchema() {
104
+ this.db.exec(`
105
+ CREATE TABLE IF NOT EXISTS captured_experiences (
106
+ id TEXT PRIMARY KEY,
107
+ agent_id TEXT NOT NULL,
108
+ agent_type TEXT NOT NULL,
109
+ task_type TEXT NOT NULL,
110
+ execution TEXT NOT NULL,
111
+ context TEXT NOT NULL,
112
+ outcome TEXT NOT NULL,
113
+ embedding BLOB,
114
+ created_at INTEGER NOT NULL,
115
+ processed INTEGER DEFAULT 0
116
+ );
117
+
118
+ CREATE INDEX IF NOT EXISTS idx_exp_agent_type ON captured_experiences(agent_type);
119
+ CREATE INDEX IF NOT EXISTS idx_exp_task_type ON captured_experiences(task_type);
120
+ CREATE INDEX IF NOT EXISTS idx_exp_created_at ON captured_experiences(created_at);
121
+ CREATE INDEX IF NOT EXISTS idx_exp_processed ON captured_experiences(processed);
122
+ CREATE INDEX IF NOT EXISTS idx_exp_quality ON captured_experiences(json_extract(outcome, '$.quality_score'));
123
+ `);
124
+ }
125
+ /**
126
+ * Store a single experience
127
+ *
128
+ * @param experience - Experience to store
129
+ * @returns Promise that resolves when stored
130
+ */
131
+ async store(experience) {
132
+ const stmt = this.db.prepare(`
133
+ INSERT OR REPLACE INTO captured_experiences
134
+ (id, agent_id, agent_type, task_type, execution, context, outcome, embedding, created_at, processed)
135
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, 0)
136
+ `);
137
+ stmt.run(experience.id, experience.agentId, experience.agentType, experience.taskType, JSON.stringify(experience.execution), JSON.stringify(experience.context), JSON.stringify(experience.outcome), experience.embedding ? Buffer.from(new Float32Array(experience.embedding).buffer) : null, experience.timestamp.getTime());
138
+ if (this.config.debug) {
139
+ this.logger.debug('[ExperienceStore] Stored experience', {
140
+ id: experience.id,
141
+ agentType: experience.agentType,
142
+ taskType: experience.taskType,
143
+ });
144
+ }
145
+ }
146
+ /**
147
+ * Store multiple experiences in a batch
148
+ *
149
+ * @param experiences - Experiences to store
150
+ * @returns Number of experiences stored
151
+ */
152
+ async storeBatch(experiences) {
153
+ if (experiences.length === 0)
154
+ return 0;
155
+ const stmt = this.db.prepare(`
156
+ INSERT OR REPLACE INTO captured_experiences
157
+ (id, agent_id, agent_type, task_type, execution, context, outcome, embedding, created_at, processed)
158
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, 0)
159
+ `);
160
+ const insertMany = this.db.transaction((exps) => {
161
+ for (const exp of exps) {
162
+ stmt.run(exp.id, exp.agentId, exp.agentType, exp.taskType, JSON.stringify(exp.execution), JSON.stringify(exp.context), JSON.stringify(exp.outcome), exp.embedding ? Buffer.from(new Float32Array(exp.embedding).buffer) : null, exp.timestamp.getTime());
163
+ }
164
+ return exps.length;
165
+ });
166
+ const count = insertMany(experiences);
167
+ this.logger.info('[ExperienceStore] Batch stored', { count });
168
+ return count;
169
+ }
170
+ /**
171
+ * Get experiences by agent type
172
+ *
173
+ * @param agentType - Agent type to filter by
174
+ * @param limit - Maximum number of results (default: 100)
175
+ * @returns Array of experiences
176
+ */
177
+ getByAgentType(agentType, limit = 100) {
178
+ const rows = this.db.prepare(`
179
+ SELECT * FROM captured_experiences
180
+ WHERE agent_type = ?
181
+ ORDER BY created_at DESC
182
+ LIMIT ?
183
+ `).all(agentType, limit);
184
+ return rows.map(row => this.rowToExperience(row));
185
+ }
186
+ /**
187
+ * Get experiences by task type
188
+ *
189
+ * @param taskType - Task type to filter by
190
+ * @param limit - Maximum number of results (default: 100)
191
+ * @returns Array of experiences
192
+ */
193
+ getByTaskType(taskType, limit = 100) {
194
+ const rows = this.db.prepare(`
195
+ SELECT * FROM captured_experiences
196
+ WHERE task_type = ?
197
+ ORDER BY created_at DESC
198
+ LIMIT ?
199
+ `).all(taskType, limit);
200
+ return rows.map(row => this.rowToExperience(row));
201
+ }
202
+ /**
203
+ * Get unprocessed experiences
204
+ *
205
+ * @param limit - Maximum number of results (default: 100)
206
+ * @returns Array of unprocessed experiences
207
+ */
208
+ getUnprocessed(limit = 100) {
209
+ const rows = this.db.prepare(`
210
+ SELECT * FROM captured_experiences
211
+ WHERE processed = 0
212
+ ORDER BY created_at ASC
213
+ LIMIT ?
214
+ `).all(limit);
215
+ return rows.map(row => this.rowToExperience(row));
216
+ }
217
+ /**
218
+ * Mark experiences as processed
219
+ *
220
+ * @param ids - Experience IDs to mark as processed
221
+ */
222
+ markProcessed(ids) {
223
+ if (ids.length === 0)
224
+ return;
225
+ const stmt = this.db.prepare(`
226
+ UPDATE captured_experiences SET processed = 1 WHERE id = ?
227
+ `);
228
+ const updateMany = this.db.transaction((expIds) => {
229
+ for (const id of expIds) {
230
+ stmt.run(id);
231
+ }
232
+ });
233
+ updateMany(ids);
234
+ this.logger.info('[ExperienceStore] Marked processed', { count: ids.length });
235
+ }
236
+ /**
237
+ * Get recent experiences within a time window
238
+ *
239
+ * @param hours - Number of hours to look back (default: 24)
240
+ * @param limit - Maximum number of results (default: 100)
241
+ * @returns Array of recent experiences
242
+ */
243
+ getRecent(hours = 24, limit = 100) {
244
+ const since = Date.now() - hours * 60 * 60 * 1000;
245
+ const rows = this.db.prepare(`
246
+ SELECT * FROM captured_experiences
247
+ WHERE created_at >= ?
248
+ ORDER BY created_at DESC
249
+ LIMIT ?
250
+ `).all(since, limit);
251
+ return rows.map(row => this.rowToExperience(row));
252
+ }
253
+ /**
254
+ * Get experiences within a date range
255
+ *
256
+ * @param startDate - Start of date range
257
+ * @param endDate - End of date range
258
+ * @param options - Query options
259
+ * @returns Array of experiences
260
+ */
261
+ getByDateRange(startDate, endDate, options) {
262
+ const { limit = 100, offset = 0, processed, orderBy = 'created_at', orderDir = 'DESC', } = options || {};
263
+ let query = `
264
+ SELECT * FROM captured_experiences
265
+ WHERE created_at >= ? AND created_at <= ?
266
+ `;
267
+ const params = [startDate.getTime(), endDate.getTime()];
268
+ if (processed !== undefined) {
269
+ query += ` AND processed = ?`;
270
+ params.push(processed ? 1 : 0);
271
+ }
272
+ query += ` ORDER BY ${orderBy} ${orderDir}`;
273
+ query += ` LIMIT ? OFFSET ?`;
274
+ params.push(limit, offset);
275
+ const rows = this.db.prepare(query).all(...params);
276
+ return rows.map(row => this.rowToExperience(row));
277
+ }
278
+ /**
279
+ * Get top performing experiences by quality score
280
+ *
281
+ * @param limit - Maximum number of results (default: 10)
282
+ * @returns Array of high-quality experiences
283
+ */
284
+ getTopPerforming(limit = 10) {
285
+ const rows = this.db.prepare(`
286
+ SELECT * FROM captured_experiences
287
+ WHERE json_extract(outcome, '$.quality_score') >= 0.7
288
+ ORDER BY json_extract(outcome, '$.quality_score') DESC
289
+ LIMIT ?
290
+ `).all(limit);
291
+ return rows.map(row => this.rowToExperience(row));
292
+ }
293
+ /**
294
+ * Get experiences by ID
295
+ *
296
+ * @param ids - Experience IDs to retrieve
297
+ * @returns Array of experiences
298
+ */
299
+ getByIds(ids) {
300
+ if (ids.length === 0)
301
+ return [];
302
+ const placeholders = ids.map(() => '?').join(',');
303
+ const rows = this.db.prepare(`
304
+ SELECT * FROM captured_experiences
305
+ WHERE id IN (${placeholders})
306
+ `).all(...ids);
307
+ return rows.map(row => this.rowToExperience(row));
308
+ }
309
+ /**
310
+ * Get storage statistics
311
+ *
312
+ * @returns Storage statistics
313
+ */
314
+ getStats() {
315
+ const totalRow = this.db.prepare('SELECT COUNT(*) as count FROM captured_experiences').get();
316
+ const processedRow = this.db.prepare('SELECT COUNT(*) as count FROM captured_experiences WHERE processed = 1').get();
317
+ const total = totalRow.count;
318
+ const processed = processedRow.count;
319
+ const unprocessed = total - processed;
320
+ // By agent type
321
+ const agentTypeRows = this.db.prepare(`
322
+ SELECT agent_type, COUNT(*) as count
323
+ FROM captured_experiences
324
+ GROUP BY agent_type
325
+ `).all();
326
+ const byAgentType = {};
327
+ for (const row of agentTypeRows) {
328
+ byAgentType[row.agent_type] = row.count;
329
+ }
330
+ // By task type
331
+ const taskTypeRows = this.db.prepare(`
332
+ SELECT task_type, COUNT(*) as count
333
+ FROM captured_experiences
334
+ GROUP BY task_type
335
+ `).all();
336
+ const byTaskType = {};
337
+ for (const row of taskTypeRows) {
338
+ byTaskType[row.task_type] = row.count;
339
+ }
340
+ // Average quality score
341
+ const qualityRow = this.db.prepare(`
342
+ SELECT AVG(json_extract(outcome, '$.quality_score')) as avg_score
343
+ FROM captured_experiences
344
+ `).get();
345
+ const avgQualityScore = qualityRow.avg_score || 0;
346
+ // Success rate
347
+ const successRow = this.db.prepare(`
348
+ SELECT COUNT(*) as count
349
+ FROM captured_experiences
350
+ WHERE json_extract(execution, '$.success') = 1
351
+ `).get();
352
+ const successRate = total > 0 ? successRow.count / total : 0;
353
+ return {
354
+ total,
355
+ processed,
356
+ unprocessed,
357
+ byAgentType,
358
+ byTaskType,
359
+ avgQualityScore,
360
+ successRate,
361
+ };
362
+ }
363
+ /**
364
+ * Count experiences matching criteria
365
+ *
366
+ * @param agentType - Optional agent type filter
367
+ * @param taskType - Optional task type filter
368
+ * @param processed - Optional processed status filter
369
+ * @returns Count of matching experiences
370
+ */
371
+ count(agentType, taskType, processed) {
372
+ let query = 'SELECT COUNT(*) as count FROM captured_experiences WHERE 1=1';
373
+ const params = [];
374
+ if (agentType) {
375
+ query += ' AND agent_type = ?';
376
+ params.push(agentType);
377
+ }
378
+ if (taskType) {
379
+ query += ' AND task_type = ?';
380
+ params.push(taskType);
381
+ }
382
+ if (processed !== undefined) {
383
+ query += ' AND processed = ?';
384
+ params.push(processed ? 1 : 0);
385
+ }
386
+ const row = this.db.prepare(query).get(...params);
387
+ return row.count;
388
+ }
389
+ /**
390
+ * Delete experiences older than specified days (TTL cleanup)
391
+ *
392
+ * @param days - Delete experiences older than this many days
393
+ * @returns Number of experiences deleted
394
+ */
395
+ cleanup(days = 30) {
396
+ const cutoffTime = Date.now() - days * 24 * 60 * 60 * 1000;
397
+ const result = this.db.prepare(`
398
+ DELETE FROM captured_experiences
399
+ WHERE created_at < ?
400
+ `).run(cutoffTime);
401
+ this.logger.info('[ExperienceStore] Cleanup completed', {
402
+ days,
403
+ deleted: result.changes,
404
+ });
405
+ return result.changes;
406
+ }
407
+ /**
408
+ * Delete all experiences (for testing)
409
+ */
410
+ clear() {
411
+ this.db.prepare('DELETE FROM captured_experiences').run();
412
+ this.logger.warn('[ExperienceStore] All experiences cleared');
413
+ }
414
+ /**
415
+ * Convert database row to CapturedExperience
416
+ *
417
+ * @param row - Database row
418
+ * @returns CapturedExperience object
419
+ */
420
+ rowToExperience(row) {
421
+ return {
422
+ id: row.id,
423
+ agentId: row.agent_id,
424
+ agentType: row.agent_type,
425
+ taskType: row.task_type,
426
+ execution: JSON.parse(row.execution),
427
+ context: JSON.parse(row.context),
428
+ outcome: JSON.parse(row.outcome),
429
+ timestamp: new Date(row.created_at),
430
+ embedding: row.embedding ? Array.from(new Float32Array(row.embedding.buffer)) : undefined,
431
+ };
432
+ }
433
+ /**
434
+ * Close database connection
435
+ */
436
+ close() {
437
+ this.db.close();
438
+ if (this.config.debug) {
439
+ this.logger.debug('[ExperienceStore] Closed');
440
+ }
441
+ }
442
+ /**
443
+ * Get database instance (for advanced queries)
444
+ *
445
+ * @returns Database instance
446
+ */
447
+ getDatabase() {
448
+ return this.db;
449
+ }
450
+ }
451
+ exports.ExperienceStore = ExperienceStore;
452
+ exports.default = ExperienceStore;
453
+ //# sourceMappingURL=ExperienceStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExperienceStore.js","sourceRoot":"","sources":["../../../src/learning/capture/ExperienceStore.ts"],"names":[],"mappings":"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"}
@@ -41,6 +41,8 @@ export interface SleepSchedulerConfig {
41
41
  learningBudget: Partial<LearningBudget>;
42
42
  /** Minimum time between cycles in ms. Default: 3600000 (1 hour) */
43
43
  minCycleInterval?: number;
44
+ /** Phase durations for sleep cycle (for testing with short durations) */
45
+ phaseDurations?: Partial<Record<'N1_CAPTURE' | 'N2_PROCESS' | 'N3_CONSOLIDATE' | 'REM_DREAM', number>>;
44
46
  /** Enable debug logging */
45
47
  debug?: boolean;
46
48
  }