agentic-qe 2.3.3 → 2.3.5

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 +122 -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 +10 -0
  8. package/dist/agents/BaseAgent.d.ts.map +1 -1
  9. package/dist/agents/BaseAgent.js +113 -0
  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 +5 -0
  24. package/dist/agents/FlakyTestHunterAgent.d.ts.map +1 -1
  25. package/dist/agents/FlakyTestHunterAgent.js +40 -0
  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 +5 -0
  66. package/dist/agents/TestExecutorAgent.d.ts.map +1 -1
  67. package/dist/agents/TestExecutorAgent.js +48 -0
  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 +36 -0
  72. package/dist/agents/TestGeneratorAgent.js.map +1 -1
  73. package/dist/agents/lifecycle/AgentLifecycleManager.d.ts.map +1 -1
  74. package/dist/agents/lifecycle/AgentLifecycleManager.js +5 -2
  75. package/dist/agents/lifecycle/AgentLifecycleManager.js.map +1 -1
  76. package/dist/cli/commands/dream/index.d.ts +50 -0
  77. package/dist/cli/commands/dream/index.d.ts.map +1 -0
  78. package/dist/cli/commands/dream/index.js +282 -0
  79. package/dist/cli/commands/dream/index.js.map +1 -0
  80. package/dist/cli/commands/learn/index.d.ts +31 -5
  81. package/dist/cli/commands/learn/index.d.ts.map +1 -1
  82. package/dist/cli/commands/learn/index.js +183 -50
  83. package/dist/cli/commands/learn/index.js.map +1 -1
  84. package/dist/cli/commands/transfer/index.d.ts +55 -0
  85. package/dist/cli/commands/transfer/index.d.ts.map +1 -0
  86. package/dist/cli/commands/transfer/index.js +317 -0
  87. package/dist/cli/commands/transfer/index.js.map +1 -0
  88. package/dist/cli/index.js +224 -3
  89. package/dist/cli/index.js.map +1 -1
  90. package/dist/cli/init/index.d.ts.map +1 -1
  91. package/dist/cli/init/index.js +12 -4
  92. package/dist/cli/init/index.js.map +1 -1
  93. package/dist/cli/init/learning-init.d.ts +39 -0
  94. package/dist/cli/init/learning-init.d.ts.map +1 -0
  95. package/dist/cli/init/learning-init.js +239 -0
  96. package/dist/cli/init/learning-init.js.map +1 -0
  97. package/dist/core/memory/HNSWVectorMemory.js +1 -1
  98. package/dist/learning/baselines/BaselineCollector.d.ts +178 -0
  99. package/dist/learning/baselines/BaselineCollector.d.ts.map +1 -0
  100. package/dist/learning/baselines/BaselineCollector.js +398 -0
  101. package/dist/learning/baselines/BaselineCollector.js.map +1 -0
  102. package/dist/learning/baselines/StandardTaskSuite.d.ts +88 -0
  103. package/dist/learning/baselines/StandardTaskSuite.d.ts.map +1 -0
  104. package/dist/learning/baselines/StandardTaskSuite.js +801 -0
  105. package/dist/learning/baselines/StandardTaskSuite.js.map +1 -0
  106. package/dist/learning/baselines/index.d.ts +10 -0
  107. package/dist/learning/baselines/index.d.ts.map +1 -0
  108. package/dist/learning/baselines/index.js +15 -0
  109. package/dist/learning/baselines/index.js.map +1 -0
  110. package/dist/learning/capture/ExecutionRecorder.d.ts +97 -0
  111. package/dist/learning/capture/ExecutionRecorder.d.ts.map +1 -0
  112. package/dist/learning/capture/ExecutionRecorder.js +195 -0
  113. package/dist/learning/capture/ExecutionRecorder.js.map +1 -0
  114. package/dist/learning/capture/ExperienceCapture.d.ts +177 -0
  115. package/dist/learning/capture/ExperienceCapture.d.ts.map +1 -0
  116. package/dist/learning/capture/ExperienceCapture.js +432 -0
  117. package/dist/learning/capture/ExperienceCapture.js.map +1 -0
  118. package/dist/learning/capture/ExperienceExtractor.d.ts +219 -0
  119. package/dist/learning/capture/ExperienceExtractor.d.ts.map +1 -0
  120. package/dist/learning/capture/ExperienceExtractor.js +536 -0
  121. package/dist/learning/capture/ExperienceExtractor.js.map +1 -0
  122. package/dist/learning/capture/ExperienceStore.d.ts +196 -0
  123. package/dist/learning/capture/ExperienceStore.d.ts.map +1 -0
  124. package/dist/learning/capture/ExperienceStore.js +453 -0
  125. package/dist/learning/capture/ExperienceStore.js.map +1 -0
  126. package/dist/learning/capture/index.d.ts +12 -0
  127. package/dist/learning/capture/index.d.ts.map +1 -0
  128. package/dist/learning/capture/index.js +17 -0
  129. package/dist/learning/capture/index.js.map +1 -0
  130. package/dist/learning/dashboard/MetricsDashboard.d.ts +63 -0
  131. package/dist/learning/dashboard/MetricsDashboard.d.ts.map +1 -0
  132. package/dist/learning/dashboard/MetricsDashboard.js +230 -0
  133. package/dist/learning/dashboard/MetricsDashboard.js.map +1 -0
  134. package/dist/learning/dashboard/index.d.ts +7 -0
  135. package/dist/learning/dashboard/index.d.ts.map +1 -0
  136. package/dist/learning/dashboard/index.js +23 -0
  137. package/dist/learning/dashboard/index.js.map +1 -0
  138. package/dist/learning/dream/ConceptGraph.d.ts +160 -0
  139. package/dist/learning/dream/ConceptGraph.d.ts.map +1 -0
  140. package/dist/learning/dream/ConceptGraph.js +445 -0
  141. package/dist/learning/dream/ConceptGraph.js.map +1 -0
  142. package/dist/learning/dream/DreamEngine.d.ts +150 -0
  143. package/dist/learning/dream/DreamEngine.d.ts.map +1 -0
  144. package/dist/learning/dream/DreamEngine.js +551 -0
  145. package/dist/learning/dream/DreamEngine.js.map +1 -0
  146. package/dist/learning/dream/InsightGenerator.d.ts +152 -0
  147. package/dist/learning/dream/InsightGenerator.d.ts.map +1 -0
  148. package/dist/learning/dream/InsightGenerator.js +463 -0
  149. package/dist/learning/dream/InsightGenerator.js.map +1 -0
  150. package/dist/learning/dream/SpreadingActivation.d.ts +138 -0
  151. package/dist/learning/dream/SpreadingActivation.d.ts.map +1 -0
  152. package/dist/learning/dream/SpreadingActivation.js +320 -0
  153. package/dist/learning/dream/SpreadingActivation.js.map +1 -0
  154. package/dist/learning/dream/index.d.ts +14 -0
  155. package/dist/learning/dream/index.d.ts.map +1 -0
  156. package/dist/learning/dream/index.js +22 -0
  157. package/dist/learning/dream/index.js.map +1 -0
  158. package/dist/learning/metrics/AlertManager.d.ts +107 -0
  159. package/dist/learning/metrics/AlertManager.d.ts.map +1 -0
  160. package/dist/learning/metrics/AlertManager.js +246 -0
  161. package/dist/learning/metrics/AlertManager.js.map +1 -0
  162. package/dist/learning/metrics/LearningMetrics.d.ts +184 -0
  163. package/dist/learning/metrics/LearningMetrics.d.ts.map +1 -0
  164. package/dist/learning/metrics/LearningMetrics.js +754 -0
  165. package/dist/learning/metrics/LearningMetrics.js.map +1 -0
  166. package/dist/learning/metrics/MetricsCollector.d.ts +108 -0
  167. package/dist/learning/metrics/MetricsCollector.d.ts.map +1 -0
  168. package/dist/learning/metrics/MetricsCollector.js +240 -0
  169. package/dist/learning/metrics/MetricsCollector.js.map +1 -0
  170. package/dist/learning/metrics/MetricsStore.d.ts +149 -0
  171. package/dist/learning/metrics/MetricsStore.d.ts.map +1 -0
  172. package/dist/learning/metrics/MetricsStore.js +502 -0
  173. package/dist/learning/metrics/MetricsStore.js.map +1 -0
  174. package/dist/learning/metrics/TrendAnalyzer.d.ts +85 -0
  175. package/dist/learning/metrics/TrendAnalyzer.d.ts.map +1 -0
  176. package/dist/learning/metrics/TrendAnalyzer.js +210 -0
  177. package/dist/learning/metrics/TrendAnalyzer.js.map +1 -0
  178. package/dist/learning/metrics/index.d.ts +13 -0
  179. package/dist/learning/metrics/index.d.ts.map +1 -0
  180. package/dist/learning/metrics/index.js +39 -0
  181. package/dist/learning/metrics/index.js.map +1 -0
  182. package/dist/learning/scheduler/IdleDetector.d.ts +126 -0
  183. package/dist/learning/scheduler/IdleDetector.d.ts.map +1 -0
  184. package/dist/learning/scheduler/IdleDetector.js +281 -0
  185. package/dist/learning/scheduler/IdleDetector.js.map +1 -0
  186. package/dist/learning/scheduler/SleepCycle.d.ts +150 -0
  187. package/dist/learning/scheduler/SleepCycle.d.ts.map +1 -0
  188. package/dist/learning/scheduler/SleepCycle.js +506 -0
  189. package/dist/learning/scheduler/SleepCycle.js.map +1 -0
  190. package/dist/learning/scheduler/SleepScheduler.d.ts +133 -0
  191. package/dist/learning/scheduler/SleepScheduler.d.ts.map +1 -0
  192. package/dist/learning/scheduler/SleepScheduler.js +301 -0
  193. package/dist/learning/scheduler/SleepScheduler.js.map +1 -0
  194. package/dist/learning/scheduler/TimeBasedTrigger.d.ts +108 -0
  195. package/dist/learning/scheduler/TimeBasedTrigger.d.ts.map +1 -0
  196. package/dist/learning/scheduler/TimeBasedTrigger.js +222 -0
  197. package/dist/learning/scheduler/TimeBasedTrigger.js.map +1 -0
  198. package/dist/learning/scheduler/index.d.ts +16 -0
  199. package/dist/learning/scheduler/index.d.ts.map +1 -0
  200. package/dist/learning/scheduler/index.js +23 -0
  201. package/dist/learning/scheduler/index.js.map +1 -0
  202. package/dist/learning/synthesis/ClusteringEngine.d.ts +122 -0
  203. package/dist/learning/synthesis/ClusteringEngine.d.ts.map +1 -0
  204. package/dist/learning/synthesis/ClusteringEngine.js +356 -0
  205. package/dist/learning/synthesis/ClusteringEngine.js.map +1 -0
  206. package/dist/learning/synthesis/PatternSynthesis.d.ts +162 -0
  207. package/dist/learning/synthesis/PatternSynthesis.d.ts.map +1 -0
  208. package/dist/learning/synthesis/PatternSynthesis.js +479 -0
  209. package/dist/learning/synthesis/PatternSynthesis.js.map +1 -0
  210. package/dist/learning/synthesis/index.d.ts +10 -0
  211. package/dist/learning/synthesis/index.d.ts.map +1 -0
  212. package/dist/learning/synthesis/index.js +14 -0
  213. package/dist/learning/synthesis/index.js.map +1 -0
  214. package/dist/learning/transfer/CompatibilityScorer.d.ts +115 -0
  215. package/dist/learning/transfer/CompatibilityScorer.d.ts.map +1 -0
  216. package/dist/learning/transfer/CompatibilityScorer.js +319 -0
  217. package/dist/learning/transfer/CompatibilityScorer.js.map +1 -0
  218. package/dist/learning/transfer/TransferProtocol.d.ts +172 -0
  219. package/dist/learning/transfer/TransferProtocol.d.ts.map +1 -0
  220. package/dist/learning/transfer/TransferProtocol.js +611 -0
  221. package/dist/learning/transfer/TransferProtocol.js.map +1 -0
  222. package/dist/learning/transfer/TransferPrototype.d.ts +93 -0
  223. package/dist/learning/transfer/TransferPrototype.d.ts.map +1 -0
  224. package/dist/learning/transfer/TransferPrototype.js +433 -0
  225. package/dist/learning/transfer/TransferPrototype.js.map +1 -0
  226. package/dist/learning/transfer/TransferRegistry.d.ts +245 -0
  227. package/dist/learning/transfer/TransferRegistry.d.ts.map +1 -0
  228. package/dist/learning/transfer/TransferRegistry.js +410 -0
  229. package/dist/learning/transfer/TransferRegistry.js.map +1 -0
  230. package/dist/learning/transfer/TransferValidator.d.ts +140 -0
  231. package/dist/learning/transfer/TransferValidator.d.ts.map +1 -0
  232. package/dist/learning/transfer/TransferValidator.js +413 -0
  233. package/dist/learning/transfer/TransferValidator.js.map +1 -0
  234. package/dist/learning/transfer/index.d.ts +14 -0
  235. package/dist/learning/transfer/index.d.ts.map +1 -0
  236. package/dist/learning/transfer/index.js +22 -0
  237. package/dist/learning/transfer/index.js.map +1 -0
  238. package/dist/mcp/handlers/task-orchestrate.d.ts +11 -0
  239. package/dist/mcp/handlers/task-orchestrate.d.ts.map +1 -1
  240. package/dist/mcp/handlers/task-orchestrate.js +297 -4
  241. package/dist/mcp/handlers/task-orchestrate.js.map +1 -1
  242. package/dist/mcp/handlers/test/test-generate-enhanced.d.ts +26 -2
  243. package/dist/mcp/handlers/test/test-generate-enhanced.d.ts.map +1 -1
  244. package/dist/mcp/handlers/test/test-generate-enhanced.js +159 -27
  245. package/dist/mcp/handlers/test/test-generate-enhanced.js.map +1 -1
  246. package/dist/mcp/server-instructions.d.ts +1 -1
  247. package/dist/mcp/server-instructions.js +1 -1
  248. package/dist/mcp/server.d.ts.map +1 -1
  249. package/dist/mcp/server.js +2 -1
  250. package/dist/mcp/server.js.map +1 -1
  251. package/dist/mcp/services/AgentRegistry.d.ts +6 -1
  252. package/dist/mcp/services/AgentRegistry.d.ts.map +1 -1
  253. package/dist/mcp/services/AgentRegistry.js +34 -3
  254. package/dist/mcp/services/AgentRegistry.js.map +1 -1
  255. package/package.json +5 -2
@@ -0,0 +1,301 @@
1
+ "use strict";
2
+ /**
3
+ * SleepScheduler - Orchestrates learning cycles during system idle periods
4
+ *
5
+ * Triggers learning activities when the system is idle, using either:
6
+ * - Idle detection (CPU/memory monitoring)
7
+ * - Time-based scheduling (cron-like)
8
+ * - Hybrid mode (both)
9
+ *
10
+ * Part of the Nightly-Learner Phase 1 implementation.
11
+ *
12
+ * @version 1.0.0
13
+ * @module src/learning/scheduler/SleepScheduler
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.SleepScheduler = void 0;
17
+ const events_1 = require("events");
18
+ const IdleDetector_1 = require("./IdleDetector");
19
+ const SleepCycle_1 = require("./SleepCycle");
20
+ const Logger_1 = require("../../utils/Logger");
21
+ /**
22
+ * SleepScheduler orchestrates learning cycles during idle periods
23
+ *
24
+ * @example
25
+ * ```typescript
26
+ * const scheduler = new SleepScheduler({
27
+ * mode: 'hybrid',
28
+ * learningBudget: { maxPatternsPerCycle: 50, maxAgentsPerCycle: 5 },
29
+ * });
30
+ *
31
+ * scheduler.on('sleep:start', (cycle) => console.log('Learning cycle started'));
32
+ * scheduler.on('sleep:end', (summary) => console.log('Cycle complete:', summary));
33
+ *
34
+ * await scheduler.start();
35
+ * ```
36
+ */
37
+ class SleepScheduler extends events_1.EventEmitter {
38
+ constructor(config) {
39
+ super();
40
+ this.currentCycle = null;
41
+ this.isRunning = false;
42
+ this.timeBasedTimer = null;
43
+ this.lastCycleEnd = null;
44
+ this.cyclesCompleted = 0;
45
+ this.totalPatternsProcessed = 0;
46
+ this.totalAgentsProcessed = 0;
47
+ this.logger = Logger_1.Logger.getInstance();
48
+ // Apply defaults
49
+ this.config = {
50
+ mode: config.mode,
51
+ idleConfig: {
52
+ cpuThreshold: 20,
53
+ memoryThreshold: 70,
54
+ taskQueueEmpty: true,
55
+ minIdleDuration: 60000,
56
+ checkInterval: 10000,
57
+ debug: config.debug ?? false,
58
+ ...config.idleConfig,
59
+ },
60
+ schedule: {
61
+ startHour: 2,
62
+ durationMinutes: 60,
63
+ daysOfWeek: [0, 1, 2, 3, 4, 5, 6],
64
+ ...config.schedule,
65
+ },
66
+ learningBudget: {
67
+ maxPatternsPerCycle: 50,
68
+ maxAgentsPerCycle: 5,
69
+ maxDurationMs: 3600000,
70
+ ...config.learningBudget,
71
+ },
72
+ minCycleInterval: config.minCycleInterval ?? 3600000,
73
+ phaseDurations: config.phaseDurations,
74
+ debug: config.debug ?? false,
75
+ };
76
+ this.idleDetector = new IdleDetector_1.IdleDetector(this.config.idleConfig);
77
+ }
78
+ /**
79
+ * Start the sleep scheduler
80
+ */
81
+ async start() {
82
+ if (this.isRunning) {
83
+ this.logger.warn('[SleepScheduler] Already running');
84
+ return;
85
+ }
86
+ this.isRunning = true;
87
+ this.logger.info('[SleepScheduler] Starting', {
88
+ mode: this.config.mode,
89
+ budget: this.config.learningBudget,
90
+ });
91
+ // Set up idle-based triggering
92
+ if (this.config.mode === 'idle' || this.config.mode === 'hybrid') {
93
+ this.idleDetector.on('idle:detected', this.handleIdleDetected.bind(this));
94
+ await this.idleDetector.start();
95
+ this.logger.info('[SleepScheduler] Idle detection enabled');
96
+ }
97
+ // Set up time-based triggering
98
+ if (this.config.mode === 'time' || this.config.mode === 'hybrid') {
99
+ this.scheduleTimeBased();
100
+ this.logger.info('[SleepScheduler] Time-based scheduling enabled', {
101
+ startHour: this.config.schedule.startHour,
102
+ durationMinutes: this.config.schedule.durationMinutes,
103
+ });
104
+ }
105
+ this.emit('scheduler:started', this.getState());
106
+ }
107
+ /**
108
+ * Stop the sleep scheduler
109
+ */
110
+ async stop() {
111
+ if (!this.isRunning)
112
+ return;
113
+ this.logger.info('[SleepScheduler] Stopping');
114
+ this.isRunning = false;
115
+ // Stop idle detection
116
+ await this.idleDetector.stop();
117
+ // Clear time-based timer
118
+ if (this.timeBasedTimer) {
119
+ clearTimeout(this.timeBasedTimer);
120
+ this.timeBasedTimer = null;
121
+ }
122
+ // Abort current cycle if active
123
+ if (this.currentCycle?.isActive) {
124
+ await this.currentCycle.abort();
125
+ }
126
+ this.emit('scheduler:stopped', this.getState());
127
+ }
128
+ /**
129
+ * Manually trigger a learning cycle
130
+ */
131
+ async triggerCycle(reason = 'manual') {
132
+ if (!this.isRunning) {
133
+ this.logger.warn('[SleepScheduler] Cannot trigger cycle - scheduler not running');
134
+ return null;
135
+ }
136
+ if (this.currentCycle?.isActive) {
137
+ this.logger.warn('[SleepScheduler] Cycle already in progress');
138
+ return null;
139
+ }
140
+ this.logger.info('[SleepScheduler] Manual cycle triggered', { reason });
141
+ return await this.executeCycle(reason);
142
+ }
143
+ /**
144
+ * Get current scheduler state
145
+ */
146
+ getState() {
147
+ return {
148
+ isRunning: this.isRunning,
149
+ mode: this.config.mode,
150
+ currentCycle: this.currentCycle,
151
+ lastCycleEnd: this.lastCycleEnd,
152
+ cyclesCompleted: this.cyclesCompleted,
153
+ totalPatternsProcessed: this.totalPatternsProcessed,
154
+ totalAgentsProcessed: this.totalAgentsProcessed,
155
+ nextScheduledRun: this.getNextScheduledRun(),
156
+ };
157
+ }
158
+ /**
159
+ * Register a task to prevent idle detection during critical operations
160
+ */
161
+ registerTask(taskId) {
162
+ this.idleDetector.registerTask(taskId);
163
+ }
164
+ /**
165
+ * Unregister a task to allow idle detection
166
+ */
167
+ unregisterTask(taskId) {
168
+ this.idleDetector.unregisterTask(taskId);
169
+ }
170
+ /**
171
+ * Handle idle detection event
172
+ */
173
+ async handleIdleDetected(state) {
174
+ // Check if we're within minimum cycle interval
175
+ if (this.lastCycleEnd) {
176
+ const timeSinceLastCycle = Date.now() - this.lastCycleEnd.getTime();
177
+ if (timeSinceLastCycle < this.config.minCycleInterval) {
178
+ this.logger.debug('[SleepScheduler] Skipping cycle - too soon since last', {
179
+ timeSinceLastCycle,
180
+ minInterval: this.config.minCycleInterval,
181
+ });
182
+ return;
183
+ }
184
+ }
185
+ this.logger.info('[SleepScheduler] Idle detected, triggering cycle', {
186
+ idleDuration: state.idleDuration,
187
+ cpu: state.cpuUsage.toFixed(1) + '%',
188
+ memory: state.memoryUsage.toFixed(1) + '%',
189
+ });
190
+ await this.executeCycle('idle');
191
+ }
192
+ /**
193
+ * Execute a learning cycle
194
+ */
195
+ async executeCycle(trigger) {
196
+ const cycleConfig = {
197
+ budget: this.config.learningBudget,
198
+ phaseDurations: this.config.phaseDurations,
199
+ debug: this.config.debug,
200
+ };
201
+ this.currentCycle = new SleepCycle_1.SleepCycle(cycleConfig);
202
+ // Forward cycle events
203
+ this.currentCycle.on('phase:start', (phase) => {
204
+ this.emit('sleep:phase', phase);
205
+ });
206
+ this.currentCycle.on('phase:complete', (phase, result) => {
207
+ this.emit('sleep:phase:complete', phase, result);
208
+ });
209
+ this.emit('sleep:start', {
210
+ cycle: this.currentCycle,
211
+ trigger,
212
+ timestamp: new Date(),
213
+ });
214
+ try {
215
+ const summary = await this.currentCycle.execute();
216
+ this.lastCycleEnd = new Date();
217
+ this.cyclesCompleted++;
218
+ this.totalPatternsProcessed += summary.patternsDiscovered + summary.patternsConsolidated;
219
+ this.totalAgentsProcessed += summary.agentsProcessed.length;
220
+ this.emit('sleep:end', summary);
221
+ this.logger.info('[SleepScheduler] Cycle completed', {
222
+ duration: summary.endTime.getTime() - summary.startTime.getTime(),
223
+ patternsDiscovered: summary.patternsDiscovered,
224
+ patternsConsolidated: summary.patternsConsolidated,
225
+ agentsProcessed: summary.agentsProcessed.length,
226
+ errors: summary.errors.length,
227
+ });
228
+ return summary;
229
+ }
230
+ catch (error) {
231
+ this.logger.error('[SleepScheduler] Cycle failed', error);
232
+ this.emit('error', error);
233
+ throw error;
234
+ }
235
+ finally {
236
+ this.currentCycle = null;
237
+ }
238
+ }
239
+ /**
240
+ * Set up time-based scheduling
241
+ */
242
+ scheduleTimeBased() {
243
+ const scheduleNext = () => {
244
+ const nextRun = this.getNextScheduledRun();
245
+ if (!nextRun)
246
+ return;
247
+ const delay = nextRun.getTime() - Date.now();
248
+ this.logger.debug('[SleepScheduler] Next scheduled run', {
249
+ nextRun: nextRun.toISOString(),
250
+ delayMs: delay,
251
+ });
252
+ this.timeBasedTimer = setTimeout(async () => {
253
+ if (!this.isRunning)
254
+ return;
255
+ // Check if today is a scheduled day
256
+ const today = new Date().getDay();
257
+ if (this.config.schedule.daysOfWeek?.includes(today)) {
258
+ try {
259
+ await this.executeCycle('scheduled');
260
+ }
261
+ catch (error) {
262
+ this.logger.error('[SleepScheduler] Scheduled cycle failed', error);
263
+ }
264
+ }
265
+ // Schedule next run
266
+ scheduleNext();
267
+ }, delay);
268
+ };
269
+ scheduleNext();
270
+ }
271
+ /**
272
+ * Calculate next scheduled run time
273
+ */
274
+ getNextScheduledRun() {
275
+ if (this.config.mode === 'idle')
276
+ return null;
277
+ const now = new Date();
278
+ const nextRun = new Date(now);
279
+ // Set to scheduled hour
280
+ nextRun.setHours(this.config.schedule?.startHour ?? 2, 0, 0, 0);
281
+ // If that time has passed today, schedule for tomorrow
282
+ if (nextRun <= now) {
283
+ nextRun.setDate(nextRun.getDate() + 1);
284
+ }
285
+ // Find next valid day
286
+ const daysOfWeek = this.config.schedule.daysOfWeek || [0, 1, 2, 3, 4, 5, 6];
287
+ while (!daysOfWeek.includes(nextRun.getDay())) {
288
+ nextRun.setDate(nextRun.getDate() + 1);
289
+ }
290
+ return nextRun;
291
+ }
292
+ /**
293
+ * Get configuration
294
+ */
295
+ getConfig() {
296
+ return { ...this.config };
297
+ }
298
+ }
299
+ exports.SleepScheduler = SleepScheduler;
300
+ exports.default = SleepScheduler;
301
+ //# sourceMappingURL=SleepScheduler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SleepScheduler.js","sourceRoot":"","sources":["../../../src/learning/scheduler/SleepScheduler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * TimeBasedTrigger - Cron-like scheduling for learning cycles
3
+ *
4
+ * Provides time-based triggering as a fallback or supplement to idle detection.
5
+ * Supports daily scheduling with configurable hours and days of week.
6
+ *
7
+ * Part of the Nightly-Learner Phase 1 implementation.
8
+ *
9
+ * @version 1.0.0
10
+ * @module src/learning/scheduler/TimeBasedTrigger
11
+ */
12
+ import { EventEmitter } from 'events';
13
+ export interface TimeBasedTriggerConfig {
14
+ /** Hour to trigger (0-23). Default: 2 (2 AM) */
15
+ hour: number;
16
+ /** Minute to trigger (0-59). Default: 0 */
17
+ minute?: number;
18
+ /** Days of week to trigger (0=Sunday, 6=Saturday). Default: all days */
19
+ daysOfWeek?: number[];
20
+ /** Timezone offset in hours. Default: 0 (UTC) */
21
+ timezoneOffset?: number;
22
+ /** Enable debug logging */
23
+ debug?: boolean;
24
+ }
25
+ export interface TriggerEvent {
26
+ timestamp: Date;
27
+ scheduledTime: Date;
28
+ dayOfWeek: number;
29
+ triggered: boolean;
30
+ skipped?: string;
31
+ }
32
+ /**
33
+ * TimeBasedTrigger provides cron-like scheduling
34
+ *
35
+ * @example
36
+ * ```typescript
37
+ * const trigger = new TimeBasedTrigger({
38
+ * hour: 2,
39
+ * minute: 30,
40
+ * daysOfWeek: [1, 2, 3, 4, 5], // Weekdays only
41
+ * });
42
+ *
43
+ * trigger.on('trigger', () => {
44
+ * console.log('Time to learn!');
45
+ * });
46
+ *
47
+ * trigger.start();
48
+ * ```
49
+ */
50
+ export declare class TimeBasedTrigger extends EventEmitter {
51
+ private config;
52
+ private logger;
53
+ private timer;
54
+ private isRunning;
55
+ private triggerHistory;
56
+ private skipNextTrigger;
57
+ constructor(config: TimeBasedTriggerConfig);
58
+ /**
59
+ * Start the time-based trigger
60
+ */
61
+ start(): void;
62
+ /**
63
+ * Stop the time-based trigger
64
+ */
65
+ stop(): void;
66
+ /**
67
+ * Skip the next scheduled trigger
68
+ */
69
+ skipNext(reason?: string): void;
70
+ /**
71
+ * Get the next scheduled trigger time
72
+ */
73
+ getNextTriggerTime(): Date | null;
74
+ /**
75
+ * Get time until next trigger in milliseconds
76
+ */
77
+ getTimeUntilNextTrigger(): number | null;
78
+ /**
79
+ * Get trigger history
80
+ */
81
+ getHistory(limit?: number): TriggerEvent[];
82
+ /**
83
+ * Check if a specific day is enabled
84
+ */
85
+ isDayEnabled(day: number): boolean;
86
+ /**
87
+ * Update configuration (requires restart)
88
+ */
89
+ updateConfig(config: Partial<TimeBasedTriggerConfig>): void;
90
+ /**
91
+ * Schedule the next trigger
92
+ */
93
+ private scheduleNextTrigger;
94
+ /**
95
+ * Handle a trigger event
96
+ */
97
+ private handleTrigger;
98
+ /**
99
+ * Get configuration
100
+ */
101
+ getConfig(): TimeBasedTriggerConfig;
102
+ /**
103
+ * Check if trigger is running
104
+ */
105
+ getIsRunning(): boolean;
106
+ }
107
+ export default TimeBasedTrigger;
108
+ //# sourceMappingURL=TimeBasedTrigger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TimeBasedTrigger.d.ts","sourceRoot":"","sources":["../../../src/learning/scheduler/TimeBasedTrigger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC,MAAM,WAAW,sBAAsB;IACrC,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wEAAwE;IACxE,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,iDAAiD;IACjD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,IAAI,CAAC;IAChB,aAAa,EAAE,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,gBAAiB,SAAQ,YAAY;IAChD,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,cAAc,CAAsB;IAC5C,OAAO,CAAC,eAAe,CAAkB;gBAE7B,MAAM,EAAE,sBAAsB;IAqB1C;;OAEG;IACH,KAAK,IAAI,IAAI;IAmBb;;OAEG;IACH,IAAI,IAAI,IAAI;IAcZ;;OAEG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAK/B;;OAEG;IACH,kBAAkB,IAAI,IAAI,GAAG,IAAI;IAyBjC;;OAEG;IACH,uBAAuB,IAAI,MAAM,GAAG,IAAI;IAMxC;;OAEG;IACH,UAAU,CAAC,KAAK,GAAE,MAAW,GAAG,YAAY,EAAE;IAI9C;;OAEG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIlC;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,sBAAsB,CAAC,GAAG,IAAI;IAiB3D;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;OAEG;IACH,OAAO,CAAC,aAAa;IAkCrB;;OAEG;IACH,SAAS,IAAI,sBAAsB;IAInC;;OAEG;IACH,YAAY,IAAI,OAAO;CAGxB;AAED,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,222 @@
1
+ "use strict";
2
+ /**
3
+ * TimeBasedTrigger - Cron-like scheduling for learning cycles
4
+ *
5
+ * Provides time-based triggering as a fallback or supplement to idle detection.
6
+ * Supports daily scheduling with configurable hours and days of week.
7
+ *
8
+ * Part of the Nightly-Learner Phase 1 implementation.
9
+ *
10
+ * @version 1.0.0
11
+ * @module src/learning/scheduler/TimeBasedTrigger
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.TimeBasedTrigger = void 0;
15
+ const events_1 = require("events");
16
+ const Logger_1 = require("../../utils/Logger");
17
+ /**
18
+ * TimeBasedTrigger provides cron-like scheduling
19
+ *
20
+ * @example
21
+ * ```typescript
22
+ * const trigger = new TimeBasedTrigger({
23
+ * hour: 2,
24
+ * minute: 30,
25
+ * daysOfWeek: [1, 2, 3, 4, 5], // Weekdays only
26
+ * });
27
+ *
28
+ * trigger.on('trigger', () => {
29
+ * console.log('Time to learn!');
30
+ * });
31
+ *
32
+ * trigger.start();
33
+ * ```
34
+ */
35
+ class TimeBasedTrigger extends events_1.EventEmitter {
36
+ constructor(config) {
37
+ super();
38
+ this.timer = null;
39
+ this.isRunning = false;
40
+ this.triggerHistory = [];
41
+ this.skipNextTrigger = false;
42
+ this.logger = Logger_1.Logger.getInstance();
43
+ this.config = {
44
+ hour: config.hour,
45
+ minute: config.minute ?? 0,
46
+ daysOfWeek: config.daysOfWeek ?? [0, 1, 2, 3, 4, 5, 6],
47
+ timezoneOffset: config.timezoneOffset ?? 0,
48
+ debug: config.debug ?? false,
49
+ };
50
+ // Validate config
51
+ if (this.config.hour < 0 || this.config.hour > 23) {
52
+ throw new Error('Hour must be between 0 and 23');
53
+ }
54
+ if (this.config.minute < 0 || this.config.minute > 59) {
55
+ throw new Error('Minute must be between 0 and 59');
56
+ }
57
+ }
58
+ /**
59
+ * Start the time-based trigger
60
+ */
61
+ start() {
62
+ if (this.isRunning) {
63
+ this.logger.warn('[TimeBasedTrigger] Already running');
64
+ return;
65
+ }
66
+ this.isRunning = true;
67
+ this.scheduleNextTrigger();
68
+ this.logger.info('[TimeBasedTrigger] Started', {
69
+ hour: this.config.hour,
70
+ minute: this.config.minute,
71
+ daysOfWeek: this.config.daysOfWeek,
72
+ nextTrigger: this.getNextTriggerTime()?.toISOString(),
73
+ });
74
+ this.emit('started');
75
+ }
76
+ /**
77
+ * Stop the time-based trigger
78
+ */
79
+ stop() {
80
+ if (!this.isRunning)
81
+ return;
82
+ this.isRunning = false;
83
+ if (this.timer) {
84
+ clearTimeout(this.timer);
85
+ this.timer = null;
86
+ }
87
+ this.logger.info('[TimeBasedTrigger] Stopped');
88
+ this.emit('stopped');
89
+ }
90
+ /**
91
+ * Skip the next scheduled trigger
92
+ */
93
+ skipNext(reason) {
94
+ this.skipNextTrigger = true;
95
+ this.logger.info('[TimeBasedTrigger] Next trigger will be skipped', { reason });
96
+ }
97
+ /**
98
+ * Get the next scheduled trigger time
99
+ */
100
+ getNextTriggerTime() {
101
+ if (!this.isRunning)
102
+ return null;
103
+ const now = new Date();
104
+ const next = new Date(now);
105
+ // Set to configured time
106
+ next.setHours(this.config.hour, this.config.minute, 0, 0);
107
+ // Adjust for timezone
108
+ next.setTime(next.getTime() - this.config.timezoneOffset * 60 * 60 * 1000);
109
+ // If time has passed today, move to tomorrow
110
+ if (next <= now) {
111
+ next.setDate(next.getDate() + 1);
112
+ }
113
+ // Find next valid day of week
114
+ while (!this.config.daysOfWeek.includes(next.getDay())) {
115
+ next.setDate(next.getDate() + 1);
116
+ }
117
+ return next;
118
+ }
119
+ /**
120
+ * Get time until next trigger in milliseconds
121
+ */
122
+ getTimeUntilNextTrigger() {
123
+ const next = this.getNextTriggerTime();
124
+ if (!next)
125
+ return null;
126
+ return Math.max(0, next.getTime() - Date.now());
127
+ }
128
+ /**
129
+ * Get trigger history
130
+ */
131
+ getHistory(limit = 10) {
132
+ return this.triggerHistory.slice(-limit);
133
+ }
134
+ /**
135
+ * Check if a specific day is enabled
136
+ */
137
+ isDayEnabled(day) {
138
+ return this.config.daysOfWeek.includes(day);
139
+ }
140
+ /**
141
+ * Update configuration (requires restart)
142
+ */
143
+ updateConfig(config) {
144
+ const wasRunning = this.isRunning;
145
+ if (wasRunning) {
146
+ this.stop();
147
+ }
148
+ this.config = {
149
+ ...this.config,
150
+ ...config,
151
+ };
152
+ if (wasRunning) {
153
+ this.start();
154
+ }
155
+ }
156
+ /**
157
+ * Schedule the next trigger
158
+ */
159
+ scheduleNextTrigger() {
160
+ const nextTime = this.getNextTriggerTime();
161
+ if (!nextTime)
162
+ return;
163
+ const delay = nextTime.getTime() - Date.now();
164
+ if (this.config.debug) {
165
+ this.logger.debug('[TimeBasedTrigger] Scheduling next trigger', {
166
+ nextTime: nextTime.toISOString(),
167
+ delayMs: delay,
168
+ delayHours: (delay / 1000 / 60 / 60).toFixed(2),
169
+ });
170
+ }
171
+ this.timer = setTimeout(() => this.handleTrigger(nextTime), delay);
172
+ }
173
+ /**
174
+ * Handle a trigger event
175
+ */
176
+ handleTrigger(scheduledTime) {
177
+ if (!this.isRunning)
178
+ return;
179
+ const event = {
180
+ timestamp: new Date(),
181
+ scheduledTime,
182
+ dayOfWeek: new Date().getDay(),
183
+ triggered: false,
184
+ };
185
+ // Check if we should skip this trigger
186
+ if (this.skipNextTrigger) {
187
+ event.skipped = 'Manual skip requested';
188
+ this.skipNextTrigger = false;
189
+ this.logger.info('[TimeBasedTrigger] Trigger skipped', { reason: event.skipped });
190
+ }
191
+ else if (!this.config.daysOfWeek.includes(event.dayOfWeek)) {
192
+ event.skipped = `Day ${event.dayOfWeek} not in schedule`;
193
+ }
194
+ else {
195
+ event.triggered = true;
196
+ this.logger.info('[TimeBasedTrigger] Triggering');
197
+ this.emit('trigger', event);
198
+ }
199
+ this.triggerHistory.push(event);
200
+ // Keep history limited
201
+ if (this.triggerHistory.length > 100) {
202
+ this.triggerHistory = this.triggerHistory.slice(-50);
203
+ }
204
+ // Schedule next trigger
205
+ this.scheduleNextTrigger();
206
+ }
207
+ /**
208
+ * Get configuration
209
+ */
210
+ getConfig() {
211
+ return { ...this.config };
212
+ }
213
+ /**
214
+ * Check if trigger is running
215
+ */
216
+ getIsRunning() {
217
+ return this.isRunning;
218
+ }
219
+ }
220
+ exports.TimeBasedTrigger = TimeBasedTrigger;
221
+ exports.default = TimeBasedTrigger;
222
+ //# sourceMappingURL=TimeBasedTrigger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TimeBasedTrigger.js","sourceRoot":"","sources":["../../../src/learning/scheduler/TimeBasedTrigger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Learning Scheduler Module
3
+ *
4
+ * Provides scheduling infrastructure for the Nightly-Learner system:
5
+ * - IdleDetector: Monitor system idle state
6
+ * - SleepScheduler: Orchestrate learning cycles
7
+ * - SleepCycle: Execute learning phases
8
+ * - TimeBasedTrigger: Cron-like fallback scheduling
9
+ *
10
+ * @module src/learning/scheduler
11
+ */
12
+ export { IdleDetector, IdleDetectorConfig, IdleState } from './IdleDetector';
13
+ export { SleepScheduler, SleepSchedulerConfig, SleepSchedulerState, LearningBudget, ScheduleConfig, } from './SleepScheduler';
14
+ export { SleepCycle, SleepCycleConfig, SleepPhase, PhaseResult, CycleSummary, } from './SleepCycle';
15
+ export { TimeBasedTrigger, TimeBasedTriggerConfig, TriggerEvent, } from './TimeBasedTrigger';
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/learning/scheduler/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,cAAc,EACd,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,YAAY,GACb,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,YAAY,GACb,MAAM,oBAAoB,CAAC"}