agentic-qe 2.3.2 → 2.3.4

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 (283) hide show
  1. package/CHANGELOG.md +140 -0
  2. package/README.md +1 -1
  3. package/dist/agents/BaseAgent.d.ts +10 -0
  4. package/dist/agents/BaseAgent.d.ts.map +1 -1
  5. package/dist/agents/BaseAgent.js +113 -0
  6. package/dist/agents/BaseAgent.js.map +1 -1
  7. package/dist/agents/CoverageAnalyzerAgent.d.ts.map +1 -1
  8. package/dist/agents/CoverageAnalyzerAgent.js +53 -27
  9. package/dist/agents/CoverageAnalyzerAgent.js.map +1 -1
  10. package/dist/agents/FlakyTestHunterAgent.d.ts +5 -0
  11. package/dist/agents/FlakyTestHunterAgent.d.ts.map +1 -1
  12. package/dist/agents/FlakyTestHunterAgent.js +20 -5
  13. package/dist/agents/FlakyTestHunterAgent.js.map +1 -1
  14. package/dist/agents/QualityGateAgent.js +44 -6
  15. package/dist/agents/QualityGateAgent.js.map +1 -1
  16. package/dist/cli/commands/dream/index.d.ts +50 -0
  17. package/dist/cli/commands/dream/index.d.ts.map +1 -0
  18. package/dist/cli/commands/dream/index.js +282 -0
  19. package/dist/cli/commands/dream/index.js.map +1 -0
  20. package/dist/cli/commands/learn/index.d.ts +31 -5
  21. package/dist/cli/commands/learn/index.d.ts.map +1 -1
  22. package/dist/cli/commands/learn/index.js +183 -50
  23. package/dist/cli/commands/learn/index.js.map +1 -1
  24. package/dist/cli/commands/transfer/index.d.ts +55 -0
  25. package/dist/cli/commands/transfer/index.d.ts.map +1 -0
  26. package/dist/cli/commands/transfer/index.js +317 -0
  27. package/dist/cli/commands/transfer/index.js.map +1 -0
  28. package/dist/cli/index.js +156 -3
  29. package/dist/cli/index.js.map +1 -1
  30. package/dist/cli/init/database-init.js +5 -0
  31. package/dist/cli/init/database-init.js.map +1 -1
  32. package/dist/cli/init/index.d.ts.map +1 -1
  33. package/dist/cli/init/index.js +12 -4
  34. package/dist/cli/init/index.js.map +1 -1
  35. package/dist/cli/init/learning-init.d.ts +39 -0
  36. package/dist/cli/init/learning-init.d.ts.map +1 -0
  37. package/dist/cli/init/learning-init.js +239 -0
  38. package/dist/cli/init/learning-init.js.map +1 -0
  39. package/dist/core/memory/HNSWVectorMemory.js +1 -1
  40. package/dist/learning/PerformanceTracker.d.ts +9 -0
  41. package/dist/learning/PerformanceTracker.d.ts.map +1 -1
  42. package/dist/learning/PerformanceTracker.js +26 -2
  43. package/dist/learning/PerformanceTracker.js.map +1 -1
  44. package/dist/learning/baselines/BaselineCollector.d.ts +178 -0
  45. package/dist/learning/baselines/BaselineCollector.d.ts.map +1 -0
  46. package/dist/learning/baselines/BaselineCollector.js +398 -0
  47. package/dist/learning/baselines/BaselineCollector.js.map +1 -0
  48. package/dist/learning/baselines/StandardTaskSuite.d.ts +88 -0
  49. package/dist/learning/baselines/StandardTaskSuite.d.ts.map +1 -0
  50. package/dist/learning/baselines/StandardTaskSuite.js +801 -0
  51. package/dist/learning/baselines/StandardTaskSuite.js.map +1 -0
  52. package/dist/learning/baselines/index.d.ts +10 -0
  53. package/dist/learning/baselines/index.d.ts.map +1 -0
  54. package/dist/learning/baselines/index.js +15 -0
  55. package/dist/learning/baselines/index.js.map +1 -0
  56. package/dist/learning/capture/ExecutionRecorder.d.ts +97 -0
  57. package/dist/learning/capture/ExecutionRecorder.d.ts.map +1 -0
  58. package/dist/learning/capture/ExecutionRecorder.js +195 -0
  59. package/dist/learning/capture/ExecutionRecorder.js.map +1 -0
  60. package/dist/learning/capture/ExperienceCapture.d.ts +177 -0
  61. package/dist/learning/capture/ExperienceCapture.d.ts.map +1 -0
  62. package/dist/learning/capture/ExperienceCapture.js +432 -0
  63. package/dist/learning/capture/ExperienceCapture.js.map +1 -0
  64. package/dist/learning/capture/index.d.ts +12 -0
  65. package/dist/learning/capture/index.d.ts.map +1 -0
  66. package/dist/learning/capture/index.js +17 -0
  67. package/dist/learning/capture/index.js.map +1 -0
  68. package/dist/learning/dashboard/MetricsDashboard.d.ts +63 -0
  69. package/dist/learning/dashboard/MetricsDashboard.d.ts.map +1 -0
  70. package/dist/learning/dashboard/MetricsDashboard.js +230 -0
  71. package/dist/learning/dashboard/MetricsDashboard.js.map +1 -0
  72. package/dist/learning/dashboard/index.d.ts +7 -0
  73. package/dist/learning/dashboard/index.d.ts.map +1 -0
  74. package/dist/learning/dashboard/index.js +23 -0
  75. package/dist/learning/dashboard/index.js.map +1 -0
  76. package/dist/learning/dream/ConceptGraph.d.ts +160 -0
  77. package/dist/learning/dream/ConceptGraph.d.ts.map +1 -0
  78. package/dist/learning/dream/ConceptGraph.js +445 -0
  79. package/dist/learning/dream/ConceptGraph.js.map +1 -0
  80. package/dist/learning/dream/DreamEngine.d.ts +150 -0
  81. package/dist/learning/dream/DreamEngine.d.ts.map +1 -0
  82. package/dist/learning/dream/DreamEngine.js +551 -0
  83. package/dist/learning/dream/DreamEngine.js.map +1 -0
  84. package/dist/learning/dream/InsightGenerator.d.ts +152 -0
  85. package/dist/learning/dream/InsightGenerator.d.ts.map +1 -0
  86. package/dist/learning/dream/InsightGenerator.js +463 -0
  87. package/dist/learning/dream/InsightGenerator.js.map +1 -0
  88. package/dist/learning/dream/SpreadingActivation.d.ts +138 -0
  89. package/dist/learning/dream/SpreadingActivation.d.ts.map +1 -0
  90. package/dist/learning/dream/SpreadingActivation.js +320 -0
  91. package/dist/learning/dream/SpreadingActivation.js.map +1 -0
  92. package/dist/learning/dream/index.d.ts +14 -0
  93. package/dist/learning/dream/index.d.ts.map +1 -0
  94. package/dist/learning/dream/index.js +22 -0
  95. package/dist/learning/dream/index.js.map +1 -0
  96. package/dist/learning/metrics/AlertManager.d.ts +107 -0
  97. package/dist/learning/metrics/AlertManager.d.ts.map +1 -0
  98. package/dist/learning/metrics/AlertManager.js +246 -0
  99. package/dist/learning/metrics/AlertManager.js.map +1 -0
  100. package/dist/learning/metrics/LearningMetrics.d.ts +184 -0
  101. package/dist/learning/metrics/LearningMetrics.d.ts.map +1 -0
  102. package/dist/learning/metrics/LearningMetrics.js +754 -0
  103. package/dist/learning/metrics/LearningMetrics.js.map +1 -0
  104. package/dist/learning/metrics/MetricsCollector.d.ts +108 -0
  105. package/dist/learning/metrics/MetricsCollector.d.ts.map +1 -0
  106. package/dist/learning/metrics/MetricsCollector.js +240 -0
  107. package/dist/learning/metrics/MetricsCollector.js.map +1 -0
  108. package/dist/learning/metrics/MetricsStore.d.ts +149 -0
  109. package/dist/learning/metrics/MetricsStore.d.ts.map +1 -0
  110. package/dist/learning/metrics/MetricsStore.js +502 -0
  111. package/dist/learning/metrics/MetricsStore.js.map +1 -0
  112. package/dist/learning/metrics/TrendAnalyzer.d.ts +85 -0
  113. package/dist/learning/metrics/TrendAnalyzer.d.ts.map +1 -0
  114. package/dist/learning/metrics/TrendAnalyzer.js +210 -0
  115. package/dist/learning/metrics/TrendAnalyzer.js.map +1 -0
  116. package/dist/learning/metrics/index.d.ts +13 -0
  117. package/dist/learning/metrics/index.d.ts.map +1 -0
  118. package/dist/learning/metrics/index.js +39 -0
  119. package/dist/learning/metrics/index.js.map +1 -0
  120. package/dist/learning/scheduler/IdleDetector.d.ts +126 -0
  121. package/dist/learning/scheduler/IdleDetector.d.ts.map +1 -0
  122. package/dist/learning/scheduler/IdleDetector.js +281 -0
  123. package/dist/learning/scheduler/IdleDetector.js.map +1 -0
  124. package/dist/learning/scheduler/SleepCycle.d.ts +150 -0
  125. package/dist/learning/scheduler/SleepCycle.d.ts.map +1 -0
  126. package/dist/learning/scheduler/SleepCycle.js +506 -0
  127. package/dist/learning/scheduler/SleepCycle.js.map +1 -0
  128. package/dist/learning/scheduler/SleepScheduler.d.ts +131 -0
  129. package/dist/learning/scheduler/SleepScheduler.d.ts.map +1 -0
  130. package/dist/learning/scheduler/SleepScheduler.js +299 -0
  131. package/dist/learning/scheduler/SleepScheduler.js.map +1 -0
  132. package/dist/learning/scheduler/TimeBasedTrigger.d.ts +108 -0
  133. package/dist/learning/scheduler/TimeBasedTrigger.d.ts.map +1 -0
  134. package/dist/learning/scheduler/TimeBasedTrigger.js +222 -0
  135. package/dist/learning/scheduler/TimeBasedTrigger.js.map +1 -0
  136. package/dist/learning/scheduler/index.d.ts +16 -0
  137. package/dist/learning/scheduler/index.d.ts.map +1 -0
  138. package/dist/learning/scheduler/index.js +23 -0
  139. package/dist/learning/scheduler/index.js.map +1 -0
  140. package/dist/learning/synthesis/PatternSynthesis.d.ts +162 -0
  141. package/dist/learning/synthesis/PatternSynthesis.d.ts.map +1 -0
  142. package/dist/learning/synthesis/PatternSynthesis.js +479 -0
  143. package/dist/learning/synthesis/PatternSynthesis.js.map +1 -0
  144. package/dist/learning/synthesis/index.d.ts +10 -0
  145. package/dist/learning/synthesis/index.d.ts.map +1 -0
  146. package/dist/learning/synthesis/index.js +14 -0
  147. package/dist/learning/synthesis/index.js.map +1 -0
  148. package/dist/learning/transfer/CompatibilityScorer.d.ts +115 -0
  149. package/dist/learning/transfer/CompatibilityScorer.d.ts.map +1 -0
  150. package/dist/learning/transfer/CompatibilityScorer.js +319 -0
  151. package/dist/learning/transfer/CompatibilityScorer.js.map +1 -0
  152. package/dist/learning/transfer/TransferProtocol.d.ts +172 -0
  153. package/dist/learning/transfer/TransferProtocol.d.ts.map +1 -0
  154. package/dist/learning/transfer/TransferProtocol.js +611 -0
  155. package/dist/learning/transfer/TransferProtocol.js.map +1 -0
  156. package/dist/learning/transfer/TransferPrototype.d.ts +93 -0
  157. package/dist/learning/transfer/TransferPrototype.d.ts.map +1 -0
  158. package/dist/learning/transfer/TransferPrototype.js +433 -0
  159. package/dist/learning/transfer/TransferPrototype.js.map +1 -0
  160. package/dist/learning/transfer/TransferValidator.d.ts +140 -0
  161. package/dist/learning/transfer/TransferValidator.d.ts.map +1 -0
  162. package/dist/learning/transfer/TransferValidator.js +413 -0
  163. package/dist/learning/transfer/TransferValidator.js.map +1 -0
  164. package/dist/learning/transfer/index.d.ts +14 -0
  165. package/dist/learning/transfer/index.d.ts.map +1 -0
  166. package/dist/learning/transfer/index.js +22 -0
  167. package/dist/learning/transfer/index.js.map +1 -0
  168. package/dist/mcp/handlers/test/test-generate-enhanced.d.ts +26 -2
  169. package/dist/mcp/handlers/test/test-generate-enhanced.d.ts.map +1 -1
  170. package/dist/mcp/handlers/test/test-generate-enhanced.js +159 -27
  171. package/dist/mcp/handlers/test/test-generate-enhanced.js.map +1 -1
  172. package/dist/mcp/server-instructions.d.ts +1 -1
  173. package/dist/mcp/server-instructions.js +1 -1
  174. package/dist/mcp/server.d.ts.map +1 -1
  175. package/dist/mcp/server.js +2 -1
  176. package/dist/mcp/server.js.map +1 -1
  177. package/package.json +7 -2
  178. package/scripts/README.md +352 -0
  179. package/scripts/hooks/capture-task-learning.js +191 -0
  180. package/scripts/hooks/emit-task-complete.sh +35 -0
  181. package/scripts/hooks/emit-task-spawn.sh +27 -0
  182. package/.claude/agents/failing-agent.json +0 -9
  183. package/.claude/agents/test-agent.json +0 -9
  184. package/dist/App.d.ts +0 -5
  185. package/dist/App.d.ts.map +0 -1
  186. package/dist/App.js +0 -15
  187. package/dist/App.js.map +0 -1
  188. package/dist/cli/init/utils.d.ts +0 -183
  189. package/dist/cli/init/utils.d.ts.map +0 -1
  190. package/dist/cli/init/utils.js +0 -354
  191. package/dist/cli/init/utils.js.map +0 -1
  192. package/dist/components/Dashboard/Dashboard.d.ts +0 -4
  193. package/dist/components/Dashboard/Dashboard.d.ts.map +0 -1
  194. package/dist/components/Dashboard/Dashboard.js +0 -148
  195. package/dist/components/Dashboard/Dashboard.js.map +0 -1
  196. package/dist/components/Dashboard/DashboardHeader.d.ts +0 -4
  197. package/dist/components/Dashboard/DashboardHeader.d.ts.map +0 -1
  198. package/dist/components/Dashboard/DashboardHeader.js +0 -138
  199. package/dist/components/Dashboard/DashboardHeader.js.map +0 -1
  200. package/dist/contexts/DashboardContext.d.ts +0 -41
  201. package/dist/contexts/DashboardContext.d.ts.map +0 -1
  202. package/dist/contexts/DashboardContext.js +0 -187
  203. package/dist/contexts/DashboardContext.js.map +0 -1
  204. package/dist/core/transport/QUICTransport.d.ts +0 -320
  205. package/dist/core/transport/QUICTransport.d.ts.map +0 -1
  206. package/dist/core/transport/QUICTransport.js +0 -711
  207. package/dist/core/transport/QUICTransport.js.map +0 -1
  208. package/dist/learning/LearningPersistenceAdapter.d.ts +0 -84
  209. package/dist/learning/LearningPersistenceAdapter.d.ts.map +0 -1
  210. package/dist/learning/LearningPersistenceAdapter.js +0 -202
  211. package/dist/learning/LearningPersistenceAdapter.js.map +0 -1
  212. package/dist/learning/algorithms/QLearning.d.ts +0 -68
  213. package/dist/learning/algorithms/QLearning.d.ts.map +0 -1
  214. package/dist/learning/algorithms/QLearning.js +0 -116
  215. package/dist/learning/algorithms/QLearning.js.map +0 -1
  216. package/dist/mcp/handlers/advanced/requirements-generate-bdd.d.ts +0 -7
  217. package/dist/mcp/handlers/advanced/requirements-generate-bdd.d.ts.map +0 -1
  218. package/dist/mcp/handlers/advanced/requirements-generate-bdd.js +0 -267
  219. package/dist/mcp/handlers/advanced/requirements-generate-bdd.js.map +0 -1
  220. package/dist/mcp/handlers/advanced/requirements-validate.d.ts +0 -7
  221. package/dist/mcp/handlers/advanced/requirements-validate.d.ts.map +0 -1
  222. package/dist/mcp/handlers/advanced/requirements-validate.js +0 -175
  223. package/dist/mcp/handlers/advanced/requirements-validate.js.map +0 -1
  224. package/dist/mcp/handlers/analysis/performance-benchmark-run-handler.d.ts +0 -15
  225. package/dist/mcp/handlers/analysis/performance-benchmark-run-handler.d.ts.map +0 -1
  226. package/dist/mcp/handlers/analysis/performance-benchmark-run-handler.js +0 -43
  227. package/dist/mcp/handlers/analysis/performance-benchmark-run-handler.js.map +0 -1
  228. package/dist/mcp/handlers/analysis/performanceBenchmarkRun.d.ts +0 -58
  229. package/dist/mcp/handlers/analysis/performanceBenchmarkRun.d.ts.map +0 -1
  230. package/dist/mcp/handlers/analysis/performanceBenchmarkRun.js +0 -188
  231. package/dist/mcp/handlers/analysis/performanceBenchmarkRun.js.map +0 -1
  232. package/dist/mcp/handlers/optimize-tests.d.ts +0 -219
  233. package/dist/mcp/handlers/optimize-tests.d.ts.map +0 -1
  234. package/dist/mcp/handlers/optimize-tests.js +0 -533
  235. package/dist/mcp/handlers/optimize-tests.js.map +0 -1
  236. package/dist/mcp/handlers/predict-defects.d.ts +0 -194
  237. package/dist/mcp/handlers/predict-defects.d.ts.map +0 -1
  238. package/dist/mcp/handlers/predict-defects.js +0 -722
  239. package/dist/mcp/handlers/predict-defects.js.map +0 -1
  240. package/dist/mcp/handlers/prediction/regression-risk-analyze.d.ts +0 -199
  241. package/dist/mcp/handlers/prediction/regression-risk-analyze.d.ts.map +0 -1
  242. package/dist/mcp/handlers/prediction/regression-risk-analyze.js +0 -471
  243. package/dist/mcp/handlers/prediction/regression-risk-analyze.js.map +0 -1
  244. package/dist/mcp/handlers/quality/quality-decision-make.d.ts +0 -104
  245. package/dist/mcp/handlers/quality/quality-decision-make.d.ts.map +0 -1
  246. package/dist/mcp/handlers/quality/quality-decision-make.js +0 -408
  247. package/dist/mcp/handlers/quality/quality-decision-make.js.map +0 -1
  248. package/dist/mcp/handlers/quality/quality-gate-execute.d.ts +0 -160
  249. package/dist/mcp/handlers/quality/quality-gate-execute.d.ts.map +0 -1
  250. package/dist/mcp/handlers/quality/quality-gate-execute.js +0 -412
  251. package/dist/mcp/handlers/quality/quality-gate-execute.js.map +0 -1
  252. package/dist/mcp/handlers/quality/quality-policy-check.d.ts +0 -163
  253. package/dist/mcp/handlers/quality/quality-policy-check.d.ts.map +0 -1
  254. package/dist/mcp/handlers/quality/quality-policy-check.js +0 -455
  255. package/dist/mcp/handlers/quality/quality-policy-check.js.map +0 -1
  256. package/dist/mcp/handlers/quality/quality-risk-assess.d.ts +0 -123
  257. package/dist/mcp/handlers/quality/quality-risk-assess.d.ts.map +0 -1
  258. package/dist/mcp/handlers/quality/quality-risk-assess.js +0 -522
  259. package/dist/mcp/handlers/quality/quality-risk-assess.js.map +0 -1
  260. package/dist/mcp/handlers/quality/quality-validate-metrics.d.ts +0 -117
  261. package/dist/mcp/handlers/quality/quality-validate-metrics.d.ts.map +0 -1
  262. package/dist/mcp/handlers/quality/quality-validate-metrics.js +0 -288
  263. package/dist/mcp/handlers/quality/quality-validate-metrics.js.map +0 -1
  264. package/dist/mcp/handlers/quality-analyze.d.ts +0 -279
  265. package/dist/mcp/handlers/quality-analyze.d.ts.map +0 -1
  266. package/dist/mcp/handlers/quality-analyze.js +0 -720
  267. package/dist/mcp/handlers/quality-analyze.js.map +0 -1
  268. package/dist/mcp/handlers/security/check-authz.d.ts +0 -152
  269. package/dist/mcp/handlers/security/check-authz.d.ts.map +0 -1
  270. package/dist/mcp/handlers/security/check-authz.js +0 -434
  271. package/dist/mcp/handlers/security/check-authz.js.map +0 -1
  272. package/dist/mcp/handlers/security/scan-dependencies.d.ts +0 -148
  273. package/dist/mcp/handlers/security/scan-dependencies.d.ts.map +0 -1
  274. package/dist/mcp/handlers/security/scan-dependencies.js +0 -354
  275. package/dist/mcp/handlers/security/scan-dependencies.js.map +0 -1
  276. package/dist/mcp/handlers/security/validate-auth.d.ts +0 -128
  277. package/dist/mcp/handlers/security/validate-auth.d.ts.map +0 -1
  278. package/dist/mcp/handlers/security/validate-auth.js +0 -294
  279. package/dist/mcp/handlers/security/validate-auth.js.map +0 -1
  280. package/dist/mcp/handlers/test-generate.d.ts +0 -107
  281. package/dist/mcp/handlers/test-generate.d.ts.map +0 -1
  282. package/dist/mcp/handlers/test-generate.js +0 -454
  283. package/dist/mcp/handlers/test-generate.js.map +0 -1
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ /**
3
+ * Learning Scheduler Module
4
+ *
5
+ * Provides scheduling infrastructure for the Nightly-Learner system:
6
+ * - IdleDetector: Monitor system idle state
7
+ * - SleepScheduler: Orchestrate learning cycles
8
+ * - SleepCycle: Execute learning phases
9
+ * - TimeBasedTrigger: Cron-like fallback scheduling
10
+ *
11
+ * @module src/learning/scheduler
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.TimeBasedTrigger = exports.SleepCycle = exports.SleepScheduler = exports.IdleDetector = void 0;
15
+ var IdleDetector_1 = require("./IdleDetector");
16
+ Object.defineProperty(exports, "IdleDetector", { enumerable: true, get: function () { return IdleDetector_1.IdleDetector; } });
17
+ var SleepScheduler_1 = require("./SleepScheduler");
18
+ Object.defineProperty(exports, "SleepScheduler", { enumerable: true, get: function () { return SleepScheduler_1.SleepScheduler; } });
19
+ var SleepCycle_1 = require("./SleepCycle");
20
+ Object.defineProperty(exports, "SleepCycle", { enumerable: true, get: function () { return SleepCycle_1.SleepCycle; } });
21
+ var TimeBasedTrigger_1 = require("./TimeBasedTrigger");
22
+ Object.defineProperty(exports, "TimeBasedTrigger", { enumerable: true, get: function () { return TimeBasedTrigger_1.TimeBasedTrigger; } });
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/learning/scheduler/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;AAEH,+CAA6E;AAApE,4GAAA,YAAY,OAAA;AACrB,mDAM0B;AALxB,gHAAA,cAAc,OAAA;AAMhB,2CAMsB;AALpB,wGAAA,UAAU,OAAA;AAMZ,uDAI4B;AAH1B,oHAAA,gBAAgB,OAAA"}
@@ -0,0 +1,162 @@
1
+ /**
2
+ * PatternSynthesis - Identifies patterns from captured experiences
3
+ *
4
+ * Synthesizes actionable patterns from captured agent executions using
5
+ * clustering and analysis techniques.
6
+ *
7
+ * Part of the Nightly-Learner Phase 1 implementation.
8
+ *
9
+ * @version 1.0.0
10
+ * @module src/learning/synthesis/PatternSynthesis
11
+ */
12
+ import { EventEmitter } from 'events';
13
+ import { CapturedExperience } from '../capture/ExperienceCapture';
14
+ export type PatternType = 'success_strategy' | 'failure_avoidance' | 'efficiency_optimization';
15
+ export interface SynthesizedPattern {
16
+ id: string;
17
+ type: PatternType;
18
+ description: string;
19
+ conditions: string[];
20
+ actions: string[];
21
+ confidence: number;
22
+ supportingExperiences: string[];
23
+ effectiveness: number;
24
+ agentTypes: string[];
25
+ taskTypes: string[];
26
+ createdAt: Date;
27
+ updatedAt: Date;
28
+ }
29
+ export interface Cluster {
30
+ id: string;
31
+ experiences: CapturedExperience[];
32
+ centroid?: number[];
33
+ size: number;
34
+ averageQuality: number;
35
+ commonAgentTypes: string[];
36
+ commonTaskTypes: string[];
37
+ }
38
+ export interface SynthesisOptions {
39
+ /** Specific experience IDs to process */
40
+ experienceIds?: string[];
41
+ /** Minimum experiences to form pattern. Default: 3 */
42
+ minSupport?: number;
43
+ /** Minimum confidence threshold. Default: 0.7 */
44
+ minConfidence?: number;
45
+ /** Maximum patterns to generate. Default: 20 */
46
+ maxPatterns?: number;
47
+ /** Focus on specific agent types */
48
+ agentTypes?: string[];
49
+ /** Focus on specific task types */
50
+ taskTypes?: string[];
51
+ }
52
+ export interface SynthesisResult {
53
+ patterns: SynthesizedPattern[];
54
+ clustersAnalyzed: number;
55
+ experiencesProcessed: number;
56
+ duration: number;
57
+ stats: {
58
+ successStrategies: number;
59
+ failureAvoidances: number;
60
+ efficiencyOptimizations: number;
61
+ averageConfidence: number;
62
+ };
63
+ }
64
+ export interface PatternSynthesisConfig {
65
+ /** Database path. Default: .agentic-qe/memory.db */
66
+ dbPath?: string;
67
+ /** Enable debug logging */
68
+ debug?: boolean;
69
+ }
70
+ /**
71
+ * PatternSynthesis identifies patterns from agent experiences
72
+ *
73
+ * @example
74
+ * ```typescript
75
+ * const synthesis = new PatternSynthesis();
76
+ *
77
+ * const result = await synthesis.synthesize({
78
+ * minSupport: 3,
79
+ * minConfidence: 0.7,
80
+ * maxPatterns: 20,
81
+ * });
82
+ *
83
+ * console.log(`Discovered ${result.patterns.length} patterns`);
84
+ * ```
85
+ */
86
+ export declare class PatternSynthesis extends EventEmitter {
87
+ private config;
88
+ private db;
89
+ private logger;
90
+ constructor(config?: PatternSynthesisConfig);
91
+ /**
92
+ * Initialize database schema for patterns
93
+ */
94
+ private initializeSchema;
95
+ /**
96
+ * Synthesize patterns from experiences
97
+ */
98
+ synthesize(options?: SynthesisOptions): Promise<SynthesisResult>;
99
+ /**
100
+ * Get stored patterns
101
+ */
102
+ getPatterns(options?: {
103
+ type?: PatternType;
104
+ minConfidence?: number;
105
+ agentType?: string;
106
+ limit?: number;
107
+ }): SynthesizedPattern[];
108
+ /**
109
+ * Get pattern by ID
110
+ */
111
+ getPattern(id: string): SynthesizedPattern | null;
112
+ /**
113
+ * Update pattern effectiveness based on new evidence
114
+ */
115
+ updateEffectiveness(patternId: string, success: boolean): void;
116
+ /**
117
+ * Get experiences for synthesis
118
+ */
119
+ private getExperiences;
120
+ /**
121
+ * Cluster experiences by similarity
122
+ */
123
+ private clusterExperiences;
124
+ /**
125
+ * Extract a pattern from a cluster
126
+ */
127
+ private extractPatternFromCluster;
128
+ /**
129
+ * Extract common conditions from experiences
130
+ */
131
+ private extractConditions;
132
+ /**
133
+ * Extract common actions from experiences
134
+ */
135
+ private extractActions;
136
+ /**
137
+ * Calculate confidence score for a cluster
138
+ */
139
+ private calculateConfidence;
140
+ /**
141
+ * Generate a human-readable description
142
+ */
143
+ private generateDescription;
144
+ /**
145
+ * Store patterns in database
146
+ */
147
+ private storePatterns;
148
+ /**
149
+ * Convert database row to experience
150
+ */
151
+ private rowToExperience;
152
+ /**
153
+ * Convert database row to pattern
154
+ */
155
+ private rowToPattern;
156
+ /**
157
+ * Close database connection
158
+ */
159
+ close(): void;
160
+ }
161
+ export default PatternSynthesis;
162
+ //# sourceMappingURL=PatternSynthesis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PatternSynthesis.d.ts","sourceRoot":"","sources":["../../../src/learning/synthesis/PatternSynthesis.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAKtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAElE,MAAM,MAAM,WAAW,GACnB,kBAAkB,GAClB,mBAAmB,GACnB,yBAAyB,CAAC;AAE9B,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,WAAW,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,kBAAkB,EAAE,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,yCAAyC;IACzC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,sDAAsD;IACtD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iDAAiD;IACjD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gDAAgD;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oCAAoC;IACpC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,mCAAmC;IACnC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAC/B,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE;QACL,iBAAiB,EAAE,MAAM,CAAC;QAC1B,iBAAiB,EAAE,MAAM,CAAC;QAC1B,uBAAuB,EAAE,MAAM,CAAC;QAChC,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;CACH;AAED,MAAM,WAAW,sBAAsB;IACrC,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,gBAAiB,SAAQ,YAAY;IAChD,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,EAAE,CAAyB;IACnC,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,CAAC,EAAE,sBAAsB;IAa3C;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAuBxB;;OAEG;IACG,UAAU,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC;IAsE1E;;OAEG;IACH,WAAW,CAAC,OAAO,GAAE;QACnB,IAAI,CAAC,EAAE,WAAW,CAAC;QACnB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;KACX,GAAG,kBAAkB,EAAE;IA8B7B;;OAEG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI;IAKjD;;OAEG;IACH,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAqB9D;;OAEG;YACW,cAAc;IAoC5B;;OAEG;YACW,kBAAkB;IAqChC;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAyCjC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA0BzB;;OAEG;IACH,OAAO,CAAC,cAAc;IA6BtB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAkB3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAgB3B;;OAEG;YACW,aAAa;IA+B3B;;OAEG;IACH,OAAO,CAAC,eAAe;IAavB;;OAEG;IACH,OAAO,CAAC,YAAY;IAiBpB;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd;AAED,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,479 @@
1
+ "use strict";
2
+ /**
3
+ * PatternSynthesis - Identifies patterns from captured experiences
4
+ *
5
+ * Synthesizes actionable patterns from captured agent executions using
6
+ * clustering and analysis techniques.
7
+ *
8
+ * Part of the Nightly-Learner Phase 1 implementation.
9
+ *
10
+ * @version 1.0.0
11
+ * @module src/learning/synthesis/PatternSynthesis
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.PatternSynthesis = void 0;
51
+ const events_1 = require("events");
52
+ const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
53
+ const path = __importStar(require("path"));
54
+ const Logger_1 = require("../../utils/Logger");
55
+ const SecureRandom_1 = require("../../utils/SecureRandom");
56
+ /**
57
+ * PatternSynthesis identifies patterns from agent experiences
58
+ *
59
+ * @example
60
+ * ```typescript
61
+ * const synthesis = new PatternSynthesis();
62
+ *
63
+ * const result = await synthesis.synthesize({
64
+ * minSupport: 3,
65
+ * minConfidence: 0.7,
66
+ * maxPatterns: 20,
67
+ * });
68
+ *
69
+ * console.log(`Discovered ${result.patterns.length} patterns`);
70
+ * ```
71
+ */
72
+ class PatternSynthesis extends events_1.EventEmitter {
73
+ constructor(config) {
74
+ super();
75
+ this.logger = Logger_1.Logger.getInstance();
76
+ this.config = {
77
+ dbPath: config?.dbPath || path.join(process.cwd(), '.agentic-qe', 'memory.db'),
78
+ debug: config?.debug ?? false,
79
+ };
80
+ this.db = new better_sqlite3_1.default(this.config.dbPath);
81
+ this.initializeSchema();
82
+ }
83
+ /**
84
+ * Initialize database schema for patterns
85
+ */
86
+ initializeSchema() {
87
+ this.db.exec(`
88
+ CREATE TABLE IF NOT EXISTS synthesized_patterns (
89
+ id TEXT PRIMARY KEY,
90
+ type TEXT NOT NULL,
91
+ description TEXT NOT NULL,
92
+ conditions TEXT NOT NULL,
93
+ actions TEXT NOT NULL,
94
+ confidence REAL NOT NULL,
95
+ supporting_experiences TEXT NOT NULL,
96
+ effectiveness REAL NOT NULL,
97
+ agent_types TEXT NOT NULL,
98
+ task_types TEXT NOT NULL,
99
+ created_at INTEGER NOT NULL,
100
+ updated_at INTEGER NOT NULL
101
+ );
102
+
103
+ CREATE INDEX IF NOT EXISTS idx_synth_type ON synthesized_patterns(type);
104
+ CREATE INDEX IF NOT EXISTS idx_synth_confidence ON synthesized_patterns(confidence);
105
+ CREATE INDEX IF NOT EXISTS idx_synth_effectiveness ON synthesized_patterns(effectiveness);
106
+ `);
107
+ }
108
+ /**
109
+ * Synthesize patterns from experiences
110
+ */
111
+ async synthesize(options = {}) {
112
+ const startTime = Date.now();
113
+ const { minSupport = 3, minConfidence = 0.7, maxPatterns = 20 } = options;
114
+ this.logger.info('[PatternSynthesis] Starting synthesis', { options });
115
+ // 1. Retrieve experiences
116
+ const experiences = await this.getExperiences(options);
117
+ this.logger.debug('[PatternSynthesis] Retrieved experiences', { count: experiences.length });
118
+ if (experiences.length < minSupport) {
119
+ this.logger.info('[PatternSynthesis] Insufficient experiences for synthesis', {
120
+ found: experiences.length,
121
+ required: minSupport,
122
+ });
123
+ return {
124
+ patterns: [],
125
+ clustersAnalyzed: 0,
126
+ experiencesProcessed: experiences.length,
127
+ duration: Date.now() - startTime,
128
+ stats: { successStrategies: 0, failureAvoidances: 0, efficiencyOptimizations: 0, averageConfidence: 0 },
129
+ };
130
+ }
131
+ // 2. Cluster experiences
132
+ const clusters = await this.clusterExperiences(experiences);
133
+ this.logger.debug('[PatternSynthesis] Created clusters', { count: clusters.length });
134
+ // 3. Extract patterns from clusters
135
+ const patterns = [];
136
+ for (const cluster of clusters) {
137
+ if (cluster.size < minSupport)
138
+ continue;
139
+ if (patterns.length >= maxPatterns)
140
+ break;
141
+ const pattern = this.extractPatternFromCluster(cluster);
142
+ if (pattern.confidence >= minConfidence) {
143
+ patterns.push(pattern);
144
+ this.emit('pattern:discovered', pattern);
145
+ }
146
+ }
147
+ // 4. Store patterns
148
+ await this.storePatterns(patterns);
149
+ // 5. Calculate stats
150
+ const result = {
151
+ patterns,
152
+ clustersAnalyzed: clusters.length,
153
+ experiencesProcessed: experiences.length,
154
+ duration: Date.now() - startTime,
155
+ stats: {
156
+ successStrategies: patterns.filter(p => p.type === 'success_strategy').length,
157
+ failureAvoidances: patterns.filter(p => p.type === 'failure_avoidance').length,
158
+ efficiencyOptimizations: patterns.filter(p => p.type === 'efficiency_optimization').length,
159
+ averageConfidence: patterns.length > 0
160
+ ? patterns.reduce((sum, p) => sum + p.confidence, 0) / patterns.length
161
+ : 0,
162
+ },
163
+ };
164
+ this.logger.info('[PatternSynthesis] Synthesis complete', {
165
+ patterns: result.patterns.length,
166
+ duration: result.duration,
167
+ });
168
+ this.emit('synthesis:complete', result);
169
+ return result;
170
+ }
171
+ /**
172
+ * Get stored patterns
173
+ */
174
+ getPatterns(options = {}) {
175
+ let query = 'SELECT * FROM synthesized_patterns WHERE 1=1';
176
+ const params = [];
177
+ if (options.type) {
178
+ query += ' AND type = ?';
179
+ params.push(options.type);
180
+ }
181
+ if (options.minConfidence) {
182
+ query += ' AND confidence >= ?';
183
+ params.push(options.minConfidence);
184
+ }
185
+ if (options.agentType) {
186
+ query += ' AND agent_types LIKE ?';
187
+ params.push(`%${options.agentType}%`);
188
+ }
189
+ query += ' ORDER BY effectiveness DESC, confidence DESC';
190
+ if (options.limit) {
191
+ query += ' LIMIT ?';
192
+ params.push(options.limit);
193
+ }
194
+ const rows = this.db.prepare(query).all(...params);
195
+ return rows.map(row => this.rowToPattern(row));
196
+ }
197
+ /**
198
+ * Get pattern by ID
199
+ */
200
+ getPattern(id) {
201
+ const row = this.db.prepare('SELECT * FROM synthesized_patterns WHERE id = ?').get(id);
202
+ return row ? this.rowToPattern(row) : null;
203
+ }
204
+ /**
205
+ * Update pattern effectiveness based on new evidence
206
+ */
207
+ updateEffectiveness(patternId, success) {
208
+ const pattern = this.getPattern(patternId);
209
+ if (!pattern)
210
+ return;
211
+ // Exponential moving average
212
+ const alpha = 0.1;
213
+ const newEffectiveness = pattern.effectiveness * (1 - alpha) + (success ? 1 : 0) * alpha;
214
+ this.db.prepare(`
215
+ UPDATE synthesized_patterns
216
+ SET effectiveness = ?, updated_at = ?
217
+ WHERE id = ?
218
+ `).run(newEffectiveness, Date.now(), patternId);
219
+ this.logger.debug('[PatternSynthesis] Updated pattern effectiveness', {
220
+ patternId,
221
+ oldEffectiveness: pattern.effectiveness,
222
+ newEffectiveness,
223
+ });
224
+ }
225
+ /**
226
+ * Get experiences for synthesis
227
+ */
228
+ async getExperiences(options) {
229
+ let query = `
230
+ SELECT * FROM captured_experiences
231
+ WHERE processed = 0
232
+ `;
233
+ const params = [];
234
+ if (options.experienceIds && options.experienceIds.length > 0) {
235
+ const placeholders = options.experienceIds.map(() => '?').join(',');
236
+ query = `SELECT * FROM captured_experiences WHERE id IN (${placeholders})`;
237
+ params.push(...options.experienceIds);
238
+ }
239
+ else {
240
+ if (options.agentTypes && options.agentTypes.length > 0) {
241
+ const placeholders = options.agentTypes.map(() => '?').join(',');
242
+ query += ` AND agent_type IN (${placeholders})`;
243
+ params.push(...options.agentTypes);
244
+ }
245
+ if (options.taskTypes && options.taskTypes.length > 0) {
246
+ const placeholders = options.taskTypes.map(() => '?').join(',');
247
+ query += ` AND task_type IN (${placeholders})`;
248
+ params.push(...options.taskTypes);
249
+ }
250
+ query += ' ORDER BY created_at DESC LIMIT 1000';
251
+ }
252
+ try {
253
+ const rows = this.db.prepare(query).all(...params);
254
+ return rows.map(row => this.rowToExperience(row));
255
+ }
256
+ catch (error) {
257
+ this.logger.warn('[PatternSynthesis] Error fetching experiences, returning empty', { error });
258
+ return [];
259
+ }
260
+ }
261
+ /**
262
+ * Cluster experiences by similarity
263
+ */
264
+ async clusterExperiences(experiences) {
265
+ // Group by agent type and task type for simple clustering
266
+ const clusterMap = new Map();
267
+ for (const exp of experiences) {
268
+ // Cluster key: agentType + success/failure
269
+ const key = `${exp.agentType}:${exp.execution.success ? 'success' : 'failure'}`;
270
+ const existing = clusterMap.get(key) || [];
271
+ existing.push(exp);
272
+ clusterMap.set(key, existing);
273
+ }
274
+ // Convert to cluster objects
275
+ const clusters = [];
276
+ let clusterId = 0;
277
+ for (const [key, exps] of clusterMap) {
278
+ const qualities = exps.map(e => e.outcome.quality_score);
279
+ const agentTypes = [...new Set(exps.map(e => e.agentType))];
280
+ const taskTypes = [...new Set(exps.map(e => e.taskType))];
281
+ clusters.push({
282
+ id: `cluster-${clusterId++}`,
283
+ experiences: exps,
284
+ size: exps.length,
285
+ averageQuality: qualities.reduce((a, b) => a + b, 0) / qualities.length,
286
+ commonAgentTypes: agentTypes,
287
+ commonTaskTypes: taskTypes,
288
+ });
289
+ }
290
+ // Sort by size descending
291
+ clusters.sort((a, b) => b.size - a.size);
292
+ return clusters;
293
+ }
294
+ /**
295
+ * Extract a pattern from a cluster
296
+ */
297
+ extractPatternFromCluster(cluster) {
298
+ const now = new Date();
299
+ // Determine pattern type based on cluster characteristics
300
+ let type;
301
+ if (cluster.averageQuality > 0.7) {
302
+ type = 'success_strategy';
303
+ }
304
+ else if (cluster.averageQuality < 0.3) {
305
+ type = 'failure_avoidance';
306
+ }
307
+ else {
308
+ type = 'efficiency_optimization';
309
+ }
310
+ // Extract common conditions
311
+ const conditions = this.extractConditions(cluster.experiences);
312
+ // Extract common actions
313
+ const actions = this.extractActions(cluster.experiences);
314
+ // Calculate confidence based on cluster consistency
315
+ const confidence = this.calculateConfidence(cluster);
316
+ // Calculate effectiveness
317
+ const effectiveness = cluster.averageQuality;
318
+ return {
319
+ id: `pattern-${Date.now()}-${SecureRandom_1.SecureRandom.randomString(6, 'alphanumeric')}`,
320
+ type,
321
+ description: this.generateDescription(type, cluster),
322
+ conditions,
323
+ actions,
324
+ confidence,
325
+ supportingExperiences: cluster.experiences.map(e => e.id),
326
+ effectiveness,
327
+ agentTypes: cluster.commonAgentTypes,
328
+ taskTypes: cluster.commonTaskTypes,
329
+ createdAt: now,
330
+ updatedAt: now,
331
+ };
332
+ }
333
+ /**
334
+ * Extract common conditions from experiences
335
+ */
336
+ extractConditions(experiences) {
337
+ const conditions = [];
338
+ // Common agent type
339
+ const agentTypes = [...new Set(experiences.map(e => e.agentType))];
340
+ if (agentTypes.length === 1) {
341
+ conditions.push(`agent_type == '${agentTypes[0]}'`);
342
+ }
343
+ // Common task type
344
+ const taskTypes = [...new Set(experiences.map(e => e.taskType))];
345
+ if (taskTypes.length === 1) {
346
+ conditions.push(`task_type == '${taskTypes[0]}'`);
347
+ }
348
+ // Extract common context patterns
349
+ for (const exp of experiences) {
350
+ if (exp.context.patterns_used.length > 0) {
351
+ conditions.push(`patterns_available`);
352
+ break;
353
+ }
354
+ }
355
+ return [...new Set(conditions)];
356
+ }
357
+ /**
358
+ * Extract common actions from experiences
359
+ */
360
+ extractActions(experiences) {
361
+ const actions = [];
362
+ // Collect all decisions made
363
+ const allDecisions = experiences.flatMap(e => e.context.decisions_made);
364
+ const decisionCounts = new Map();
365
+ for (const decision of allDecisions) {
366
+ decisionCounts.set(decision, (decisionCounts.get(decision) || 0) + 1);
367
+ }
368
+ // Add frequent decisions as actions
369
+ for (const [decision, count] of decisionCounts) {
370
+ if (count >= experiences.length * 0.5) { // Present in at least 50% of experiences
371
+ actions.push(decision);
372
+ }
373
+ }
374
+ // Add generic actions based on outcomes
375
+ const successRate = experiences.filter(e => e.execution.success).length / experiences.length;
376
+ if (successRate > 0.8) {
377
+ actions.push('replicate_approach');
378
+ }
379
+ else if (successRate < 0.3) {
380
+ actions.push('avoid_approach');
381
+ }
382
+ return actions;
383
+ }
384
+ /**
385
+ * Calculate confidence score for a cluster
386
+ */
387
+ calculateConfidence(cluster) {
388
+ // Base confidence from cluster size
389
+ let confidence = Math.min(1, cluster.size / 10); // Max out at 10 experiences
390
+ // Bonus for consistent outcomes
391
+ const outcomes = cluster.experiences.map(e => e.execution.success);
392
+ const successRate = outcomes.filter(Boolean).length / outcomes.length;
393
+ const consistency = Math.abs(successRate - 0.5) * 2; // 0 = mixed, 1 = consistent
394
+ confidence = confidence * 0.6 + consistency * 0.4;
395
+ // Bonus for consistent agent types
396
+ if (cluster.commonAgentTypes.length === 1) {
397
+ confidence += 0.1;
398
+ }
399
+ return Math.min(1, confidence);
400
+ }
401
+ /**
402
+ * Generate a human-readable description
403
+ */
404
+ generateDescription(type, cluster) {
405
+ const agentTypes = cluster.commonAgentTypes.join(', ');
406
+ const taskTypes = cluster.commonTaskTypes.join(', ');
407
+ switch (type) {
408
+ case 'success_strategy':
409
+ return `Successful approach for ${agentTypes} when performing ${taskTypes}`;
410
+ case 'failure_avoidance':
411
+ return `Failure pattern to avoid for ${agentTypes} during ${taskTypes}`;
412
+ case 'efficiency_optimization':
413
+ return `Optimization opportunity for ${agentTypes} in ${taskTypes}`;
414
+ default:
415
+ return `Pattern for ${agentTypes}`;
416
+ }
417
+ }
418
+ /**
419
+ * Store patterns in database
420
+ */
421
+ async storePatterns(patterns) {
422
+ const stmt = this.db.prepare(`
423
+ INSERT OR REPLACE INTO synthesized_patterns
424
+ (id, type, description, conditions, actions, confidence, supporting_experiences,
425
+ effectiveness, agent_types, task_types, created_at, updated_at)
426
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
427
+ `);
428
+ const insertMany = this.db.transaction((pats) => {
429
+ for (const p of pats) {
430
+ stmt.run(p.id, p.type, p.description, JSON.stringify(p.conditions), JSON.stringify(p.actions), p.confidence, JSON.stringify(p.supportingExperiences), p.effectiveness, JSON.stringify(p.agentTypes), JSON.stringify(p.taskTypes), p.createdAt.getTime(), p.updatedAt.getTime());
431
+ }
432
+ });
433
+ insertMany(patterns);
434
+ this.logger.info('[PatternSynthesis] Stored patterns', { count: patterns.length });
435
+ }
436
+ /**
437
+ * Convert database row to experience
438
+ */
439
+ rowToExperience(row) {
440
+ return {
441
+ id: row.id,
442
+ agentId: row.agent_id,
443
+ agentType: row.agent_type,
444
+ taskType: row.task_type,
445
+ execution: JSON.parse(row.execution),
446
+ context: JSON.parse(row.context),
447
+ outcome: JSON.parse(row.outcome),
448
+ timestamp: new Date(row.created_at),
449
+ };
450
+ }
451
+ /**
452
+ * Convert database row to pattern
453
+ */
454
+ rowToPattern(row) {
455
+ return {
456
+ id: row.id,
457
+ type: row.type,
458
+ description: row.description,
459
+ conditions: JSON.parse(row.conditions),
460
+ actions: JSON.parse(row.actions),
461
+ confidence: row.confidence,
462
+ supportingExperiences: JSON.parse(row.supporting_experiences),
463
+ effectiveness: row.effectiveness,
464
+ agentTypes: JSON.parse(row.agent_types),
465
+ taskTypes: JSON.parse(row.task_types),
466
+ createdAt: new Date(row.created_at),
467
+ updatedAt: new Date(row.updated_at),
468
+ };
469
+ }
470
+ /**
471
+ * Close database connection
472
+ */
473
+ close() {
474
+ this.db.close();
475
+ }
476
+ }
477
+ exports.PatternSynthesis = PatternSynthesis;
478
+ exports.default = PatternSynthesis;
479
+ //# sourceMappingURL=PatternSynthesis.js.map