agentic-qe 1.9.3 → 2.0.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 (271) hide show
  1. package/.claude/agents/qe-api-contract-validator.md +95 -1336
  2. package/.claude/agents/qe-chaos-engineer.md +152 -1211
  3. package/.claude/agents/qe-code-complexity.md +144 -707
  4. package/.claude/agents/qe-coverage-analyzer.md +147 -743
  5. package/.claude/agents/qe-deployment-readiness.md +143 -1496
  6. package/.claude/agents/qe-flaky-test-hunter.md +132 -1529
  7. package/.claude/agents/qe-fleet-commander.md +12 -12
  8. package/.claude/agents/qe-performance-tester.md +150 -886
  9. package/.claude/agents/qe-production-intelligence.md +155 -1396
  10. package/.claude/agents/qe-quality-analyzer.md +6 -6
  11. package/.claude/agents/qe-quality-gate.md +151 -648
  12. package/.claude/agents/qe-regression-risk-analyzer.md +132 -1150
  13. package/.claude/agents/qe-requirements-validator.md +149 -932
  14. package/.claude/agents/qe-security-scanner.md +157 -797
  15. package/.claude/agents/qe-test-data-architect.md +96 -1365
  16. package/.claude/agents/qe-test-executor.md +8 -8
  17. package/.claude/agents/qe-test-generator.md +145 -1540
  18. package/.claude/agents/qe-visual-tester.md +153 -1257
  19. package/.claude/agents/qx-partner.md +235 -0
  20. package/.claude/agents/subagents/qe-code-reviewer.md +40 -136
  21. package/.claude/agents/subagents/qe-coverage-gap-analyzer.md +40 -480
  22. package/.claude/agents/subagents/qe-data-generator.md +41 -125
  23. package/.claude/agents/subagents/qe-flaky-investigator.md +55 -411
  24. package/.claude/agents/subagents/qe-integration-tester.md +53 -141
  25. package/.claude/agents/subagents/qe-performance-validator.md +54 -130
  26. package/.claude/agents/subagents/qe-security-auditor.md +56 -114
  27. package/.claude/agents/subagents/qe-test-data-architect-sub.md +57 -548
  28. package/.claude/agents/subagents/qe-test-implementer.md +58 -551
  29. package/.claude/agents/subagents/qe-test-refactorer.md +65 -722
  30. package/.claude/agents/subagents/qe-test-writer.md +63 -726
  31. package/.claude/skills/skills-manifest.json +632 -0
  32. package/.claude/skills/testability-scoring/README.md +71 -0
  33. package/.claude/skills/testability-scoring/SKILL.md +611 -0
  34. package/.claude/skills/testability-scoring/resources/templates/config.template.js +84 -0
  35. package/.claude/skills/testability-scoring/resources/templates/testability-scoring.spec.template.js +532 -0
  36. package/.claude/skills/testability-scoring/scripts/generate-html-report.js +1007 -0
  37. package/.claude/skills/testability-scoring/scripts/run-assessment.sh +70 -0
  38. package/CHANGELOG.md +116 -0
  39. package/README.md +59 -7
  40. package/config/.env.otel.example +25 -0
  41. package/config/OTEL-QUICK-REFERENCE.md +137 -0
  42. package/config/README-OTEL.md +222 -0
  43. package/config/alerting-rules.yml +518 -0
  44. package/config/docker-compose.otel.yml +187 -0
  45. package/config/grafana/dashboards/agentic-qe-overview.json +286 -0
  46. package/config/grafana/provisioning/dashboards/dashboards.yml +19 -0
  47. package/config/grafana/provisioning/datasources/datasources.yml +53 -0
  48. package/config/otel-collector-config.yaml.example +145 -0
  49. package/config/prometheus.yml.example +106 -0
  50. package/dist/agents/QXPartnerAgent.d.ts +139 -0
  51. package/dist/agents/QXPartnerAgent.d.ts.map +1 -0
  52. package/dist/agents/QXPartnerAgent.js +769 -0
  53. package/dist/agents/QXPartnerAgent.js.map +1 -0
  54. package/dist/agents/index.d.ts +1 -0
  55. package/dist/agents/index.d.ts.map +1 -1
  56. package/dist/agents/index.js +82 -2
  57. package/dist/agents/index.js.map +1 -1
  58. package/dist/alerting/AlertManager.d.ts +120 -0
  59. package/dist/alerting/AlertManager.d.ts.map +1 -0
  60. package/dist/alerting/AlertManager.js +345 -0
  61. package/dist/alerting/AlertManager.js.map +1 -0
  62. package/dist/alerting/FeedbackRouter.d.ts +98 -0
  63. package/dist/alerting/FeedbackRouter.d.ts.map +1 -0
  64. package/dist/alerting/FeedbackRouter.js +331 -0
  65. package/dist/alerting/FeedbackRouter.js.map +1 -0
  66. package/dist/alerting/StrategyApplicator.d.ts +120 -0
  67. package/dist/alerting/StrategyApplicator.d.ts.map +1 -0
  68. package/dist/alerting/StrategyApplicator.js +299 -0
  69. package/dist/alerting/StrategyApplicator.js.map +1 -0
  70. package/dist/alerting/index.d.ts +68 -0
  71. package/dist/alerting/index.d.ts.map +1 -0
  72. package/dist/alerting/index.js +112 -0
  73. package/dist/alerting/index.js.map +1 -0
  74. package/dist/alerting/types.d.ts +118 -0
  75. package/dist/alerting/types.d.ts.map +1 -0
  76. package/dist/alerting/types.js +11 -0
  77. package/dist/alerting/types.js.map +1 -0
  78. package/dist/cli/commands/debug/agent.d.ts.map +1 -1
  79. package/dist/cli/commands/debug/agent.js +19 -6
  80. package/dist/cli/commands/debug/agent.js.map +1 -1
  81. package/dist/cli/commands/debug/health-check.js +20 -7
  82. package/dist/cli/commands/debug/health-check.js.map +1 -1
  83. package/dist/cli/commands/init-claude-md-template.d.ts +1 -0
  84. package/dist/cli/commands/init-claude-md-template.d.ts.map +1 -1
  85. package/dist/cli/commands/init-claude-md-template.js +4 -3
  86. package/dist/cli/commands/init-claude-md-template.js.map +1 -1
  87. package/dist/cli/commands/workflow/cancel.d.ts.map +1 -1
  88. package/dist/cli/commands/workflow/cancel.js +4 -3
  89. package/dist/cli/commands/workflow/cancel.js.map +1 -1
  90. package/dist/cli/commands/workflow/list.d.ts.map +1 -1
  91. package/dist/cli/commands/workflow/list.js +4 -3
  92. package/dist/cli/commands/workflow/list.js.map +1 -1
  93. package/dist/cli/commands/workflow/pause.d.ts.map +1 -1
  94. package/dist/cli/commands/workflow/pause.js +4 -3
  95. package/dist/cli/commands/workflow/pause.js.map +1 -1
  96. package/dist/cli/init/claude-config.d.ts.map +1 -1
  97. package/dist/cli/init/claude-config.js +13 -13
  98. package/dist/cli/init/claude-config.js.map +1 -1
  99. package/dist/cli/init/claude-md.d.ts.map +1 -1
  100. package/dist/cli/init/claude-md.js +44 -2
  101. package/dist/cli/init/claude-md.js.map +1 -1
  102. package/dist/cli/init/database-init.js +1 -1
  103. package/dist/cli/init/index.d.ts.map +1 -1
  104. package/dist/cli/init/index.js +13 -6
  105. package/dist/cli/init/index.js.map +1 -1
  106. package/dist/cli/init/skills.d.ts.map +1 -1
  107. package/dist/cli/init/skills.js +2 -1
  108. package/dist/cli/init/skills.js.map +1 -1
  109. package/dist/core/memory/AgentDBIntegration.d.ts +24 -6
  110. package/dist/core/memory/AgentDBIntegration.d.ts.map +1 -1
  111. package/dist/core/memory/AgentDBIntegration.js +66 -10
  112. package/dist/core/memory/AgentDBIntegration.js.map +1 -1
  113. package/dist/core/memory/IPatternStore.d.ts +209 -0
  114. package/dist/core/memory/IPatternStore.d.ts.map +1 -0
  115. package/dist/core/memory/IPatternStore.js +15 -0
  116. package/dist/core/memory/IPatternStore.js.map +1 -0
  117. package/dist/core/memory/MigrationTools.d.ts +192 -0
  118. package/dist/core/memory/MigrationTools.d.ts.map +1 -0
  119. package/dist/core/memory/MigrationTools.js +615 -0
  120. package/dist/core/memory/MigrationTools.js.map +1 -0
  121. package/dist/core/memory/NeuralEnhancement.d.ts +154 -0
  122. package/dist/core/memory/NeuralEnhancement.d.ts.map +1 -0
  123. package/dist/core/memory/NeuralEnhancement.js +598 -0
  124. package/dist/core/memory/NeuralEnhancement.js.map +1 -0
  125. package/dist/core/memory/PatternStoreFactory.d.ts +143 -0
  126. package/dist/core/memory/PatternStoreFactory.d.ts.map +1 -0
  127. package/dist/core/memory/PatternStoreFactory.js +370 -0
  128. package/dist/core/memory/PatternStoreFactory.js.map +1 -0
  129. package/dist/core/memory/RealAgentDBAdapter.d.ts +1 -0
  130. package/dist/core/memory/RealAgentDBAdapter.d.ts.map +1 -1
  131. package/dist/core/memory/RealAgentDBAdapter.js +28 -20
  132. package/dist/core/memory/RealAgentDBAdapter.js.map +1 -1
  133. package/dist/core/memory/RuVectorPatternStore.d.ts +198 -0
  134. package/dist/core/memory/RuVectorPatternStore.d.ts.map +1 -0
  135. package/dist/core/memory/RuVectorPatternStore.js +605 -0
  136. package/dist/core/memory/RuVectorPatternStore.js.map +1 -0
  137. package/dist/core/memory/SelfHealingMonitor.d.ts +186 -0
  138. package/dist/core/memory/SelfHealingMonitor.d.ts.map +1 -0
  139. package/dist/core/memory/SelfHealingMonitor.js +451 -0
  140. package/dist/core/memory/SelfHealingMonitor.js.map +1 -0
  141. package/dist/core/memory/SwarmMemoryManager.d.ts +62 -0
  142. package/dist/core/memory/SwarmMemoryManager.d.ts.map +1 -1
  143. package/dist/core/memory/SwarmMemoryManager.js +97 -0
  144. package/dist/core/memory/SwarmMemoryManager.js.map +1 -1
  145. package/dist/core/memory/UnifiedMemoryCoordinator.d.ts +341 -0
  146. package/dist/core/memory/UnifiedMemoryCoordinator.d.ts.map +1 -0
  147. package/dist/core/memory/UnifiedMemoryCoordinator.js +986 -0
  148. package/dist/core/memory/UnifiedMemoryCoordinator.js.map +1 -0
  149. package/dist/core/memory/index.d.ts +16 -0
  150. package/dist/core/memory/index.d.ts.map +1 -1
  151. package/dist/core/memory/index.js +58 -1
  152. package/dist/core/memory/index.js.map +1 -1
  153. package/dist/core/optimization/SwarmOptimizer.d.ts +185 -0
  154. package/dist/core/optimization/SwarmOptimizer.d.ts.map +1 -0
  155. package/dist/core/optimization/SwarmOptimizer.js +631 -0
  156. package/dist/core/optimization/SwarmOptimizer.js.map +1 -0
  157. package/dist/core/optimization/index.d.ts +9 -0
  158. package/dist/core/optimization/index.d.ts.map +1 -0
  159. package/dist/core/optimization/index.js +25 -0
  160. package/dist/core/optimization/index.js.map +1 -0
  161. package/dist/core/optimization/types.d.ts +53 -0
  162. package/dist/core/optimization/types.d.ts.map +1 -0
  163. package/dist/core/optimization/types.js +6 -0
  164. package/dist/core/optimization/types.js.map +1 -0
  165. package/dist/core/orchestration/PriorityQueue.d.ts +54 -0
  166. package/dist/core/orchestration/PriorityQueue.d.ts.map +1 -0
  167. package/dist/core/orchestration/PriorityQueue.js +122 -0
  168. package/dist/core/orchestration/PriorityQueue.js.map +1 -0
  169. package/dist/core/orchestration/WorkflowOrchestrator.d.ts +176 -0
  170. package/dist/core/orchestration/WorkflowOrchestrator.d.ts.map +1 -0
  171. package/dist/core/orchestration/WorkflowOrchestrator.js +813 -0
  172. package/dist/core/orchestration/WorkflowOrchestrator.js.map +1 -0
  173. package/dist/core/orchestration/index.d.ts +7 -0
  174. package/dist/core/orchestration/index.d.ts.map +1 -0
  175. package/dist/core/orchestration/index.js +11 -0
  176. package/dist/core/orchestration/index.js.map +1 -0
  177. package/dist/core/orchestration/types.d.ts +96 -0
  178. package/dist/core/orchestration/types.d.ts.map +1 -0
  179. package/dist/core/orchestration/types.js +6 -0
  180. package/dist/core/orchestration/types.js.map +1 -0
  181. package/dist/core/skills/DynamicSkillLoader.d.ts +96 -0
  182. package/dist/core/skills/DynamicSkillLoader.d.ts.map +1 -0
  183. package/dist/core/skills/DynamicSkillLoader.js +353 -0
  184. package/dist/core/skills/DynamicSkillLoader.js.map +1 -0
  185. package/dist/core/skills/types.d.ts +118 -0
  186. package/dist/core/skills/types.d.ts.map +1 -0
  187. package/dist/core/skills/types.js +7 -0
  188. package/dist/core/skills/types.js.map +1 -0
  189. package/dist/core/transport/QUICTransport.d.ts +320 -0
  190. package/dist/core/transport/QUICTransport.d.ts.map +1 -0
  191. package/dist/core/transport/QUICTransport.js +711 -0
  192. package/dist/core/transport/QUICTransport.js.map +1 -0
  193. package/dist/core/transport/index.d.ts +40 -0
  194. package/dist/core/transport/index.d.ts.map +1 -0
  195. package/dist/core/transport/index.js +46 -0
  196. package/dist/core/transport/index.js.map +1 -0
  197. package/dist/core/transport/quic-loader.d.ts +123 -0
  198. package/dist/core/transport/quic-loader.d.ts.map +1 -0
  199. package/dist/core/transport/quic-loader.js +293 -0
  200. package/dist/core/transport/quic-loader.js.map +1 -0
  201. package/dist/core/transport/quic.d.ts +154 -0
  202. package/dist/core/transport/quic.d.ts.map +1 -0
  203. package/dist/core/transport/quic.js +214 -0
  204. package/dist/core/transport/quic.js.map +1 -0
  205. package/dist/mcp/services/AgentRegistry.d.ts.map +1 -1
  206. package/dist/mcp/services/AgentRegistry.js +4 -1
  207. package/dist/mcp/services/AgentRegistry.js.map +1 -1
  208. package/dist/reasoning/RuVectorReasoningAdapter.d.ts +232 -0
  209. package/dist/reasoning/RuVectorReasoningAdapter.d.ts.map +1 -0
  210. package/dist/reasoning/RuVectorReasoningAdapter.js +585 -0
  211. package/dist/reasoning/RuVectorReasoningAdapter.js.map +1 -0
  212. package/dist/reasoning/index.d.ts +2 -0
  213. package/dist/reasoning/index.d.ts.map +1 -1
  214. package/dist/reasoning/index.js +6 -1
  215. package/dist/reasoning/index.js.map +1 -1
  216. package/dist/reporting/ResultAggregator.d.ts +107 -0
  217. package/dist/reporting/ResultAggregator.d.ts.map +1 -0
  218. package/dist/reporting/ResultAggregator.js +435 -0
  219. package/dist/reporting/ResultAggregator.js.map +1 -0
  220. package/dist/reporting/index.d.ts +48 -0
  221. package/dist/reporting/index.d.ts.map +1 -0
  222. package/dist/reporting/index.js +154 -0
  223. package/dist/reporting/index.js.map +1 -0
  224. package/dist/reporting/reporters/ControlLoopReporter.d.ts +128 -0
  225. package/dist/reporting/reporters/ControlLoopReporter.d.ts.map +1 -0
  226. package/dist/reporting/reporters/ControlLoopReporter.js +417 -0
  227. package/dist/reporting/reporters/ControlLoopReporter.js.map +1 -0
  228. package/dist/reporting/reporters/HumanReadableReporter.d.ts +140 -0
  229. package/dist/reporting/reporters/HumanReadableReporter.d.ts.map +1 -0
  230. package/dist/reporting/reporters/HumanReadableReporter.js +524 -0
  231. package/dist/reporting/reporters/HumanReadableReporter.js.map +1 -0
  232. package/dist/reporting/reporters/JSONReporter.d.ts +193 -0
  233. package/dist/reporting/reporters/JSONReporter.d.ts.map +1 -0
  234. package/dist/reporting/reporters/JSONReporter.js +324 -0
  235. package/dist/reporting/reporters/JSONReporter.js.map +1 -0
  236. package/dist/reporting/reporters/index.d.ts +14 -0
  237. package/dist/reporting/reporters/index.d.ts.map +1 -0
  238. package/dist/reporting/reporters/index.js +19 -0
  239. package/dist/reporting/reporters/index.js.map +1 -0
  240. package/dist/reporting/types.d.ts +427 -0
  241. package/dist/reporting/types.d.ts.map +1 -0
  242. package/dist/reporting/types.js +12 -0
  243. package/dist/reporting/types.js.map +1 -0
  244. package/dist/types/index.d.ts +2 -1
  245. package/dist/types/index.d.ts.map +1 -1
  246. package/dist/types/index.js +2 -0
  247. package/dist/types/index.js.map +1 -1
  248. package/dist/types/qx.d.ts +397 -0
  249. package/dist/types/qx.d.ts.map +1 -0
  250. package/dist/types/qx.js +71 -0
  251. package/dist/types/qx.js.map +1 -0
  252. package/dist/visualization/api/RestEndpoints.js +1 -1
  253. package/dist/visualization/api/RestEndpoints.js.map +1 -1
  254. package/dist/visualization/api/WebSocketServer.d.ts +44 -0
  255. package/dist/visualization/api/WebSocketServer.d.ts.map +1 -1
  256. package/dist/visualization/api/WebSocketServer.js +144 -23
  257. package/dist/visualization/api/WebSocketServer.js.map +1 -1
  258. package/dist/visualization/core/DataTransformer.d.ts +10 -0
  259. package/dist/visualization/core/DataTransformer.d.ts.map +1 -1
  260. package/dist/visualization/core/DataTransformer.js +60 -5
  261. package/dist/visualization/core/DataTransformer.js.map +1 -1
  262. package/dist/visualization/emit-event.d.ts +75 -0
  263. package/dist/visualization/emit-event.d.ts.map +1 -0
  264. package/dist/visualization/emit-event.js +213 -0
  265. package/dist/visualization/emit-event.js.map +1 -0
  266. package/dist/visualization/index.d.ts +1 -0
  267. package/dist/visualization/index.d.ts.map +1 -1
  268. package/dist/visualization/index.js +7 -1
  269. package/dist/visualization/index.js.map +1 -1
  270. package/docs/reference/skills.md +63 -1
  271. package/package.json +12 -4
@@ -0,0 +1,186 @@
1
+ /**
2
+ * SelfHealingMonitor - Automatic Performance Monitoring and Recovery for RuVector
3
+ *
4
+ * Based on ruv's AgentDB v2 architecture:
5
+ * - Performance degradation detection (<5% over 30 days target)
6
+ * - Automatic index rebalancing when performance drops
7
+ * - Health monitoring dashboard data
8
+ * - Adaptive HNSW parameter tuning
9
+ *
10
+ * Features:
11
+ * - Rolling baseline calculation for accurate degradation detection
12
+ * - Gradual HNSW parameter adjustment (M, efSearch)
13
+ * - Index compaction when fragmentation detected
14
+ * - Automatic cache invalidation on performance issues
15
+ * - Event-based notifications for monitoring systems
16
+ *
17
+ * @module core/memory/SelfHealingMonitor
18
+ * @version 1.0.0
19
+ */
20
+ import type { IPatternStore } from './IPatternStore';
21
+ /**
22
+ * Health metrics snapshot
23
+ */
24
+ export interface HealthMetrics {
25
+ qps: number;
26
+ p50Latency: number;
27
+ p99Latency: number;
28
+ memoryUsage: number;
29
+ indexSize: number;
30
+ lastOptimization: number;
31
+ degradationPercent: number;
32
+ timestamp: number;
33
+ }
34
+ /**
35
+ * Monitor configuration
36
+ */
37
+ export interface MonitorConfig {
38
+ checkIntervalMs?: number;
39
+ degradationThreshold?: number;
40
+ autoHeal?: boolean;
41
+ baselineWindow?: number;
42
+ enableAdaptiveTuning?: boolean;
43
+ maxHealingActions?: number;
44
+ minTimeBetweenHeals?: number;
45
+ }
46
+ /**
47
+ * Healing action record
48
+ */
49
+ export interface HealingAction {
50
+ type: 'reindex' | 'compact' | 'tune_hnsw' | 'clear_cache';
51
+ reason: string;
52
+ timestamp: number;
53
+ success: boolean;
54
+ metricsAfter?: HealthMetrics;
55
+ error?: string;
56
+ parameters?: Record<string, any>;
57
+ }
58
+ /**
59
+ * Event callback type
60
+ */
61
+ type EventCallback = (data: any) => void;
62
+ /**
63
+ * Event types
64
+ */
65
+ type MonitorEvent = 'degradation' | 'healed' | 'error' | 'metrics_updated';
66
+ /**
67
+ * Self-healing monitor for RuVector pattern store
68
+ *
69
+ * Continuously monitors performance and automatically applies healing actions
70
+ * when degradation is detected.
71
+ */
72
+ export declare class SelfHealingMonitor {
73
+ private store;
74
+ private config;
75
+ private intervalId?;
76
+ private running;
77
+ private metricsHistory;
78
+ private baselineMetrics?;
79
+ private lastHealthCheck;
80
+ private queryCount;
81
+ private queryTimings;
82
+ private healingHistory;
83
+ private lastHealingTime;
84
+ private currentHNSWParams;
85
+ private eventListeners;
86
+ /**
87
+ * Create a new self-healing monitor
88
+ */
89
+ constructor(store: IPatternStore, config?: MonitorConfig);
90
+ /**
91
+ * Start continuous monitoring
92
+ */
93
+ start(): void;
94
+ /**
95
+ * Stop monitoring
96
+ */
97
+ stop(): void;
98
+ /**
99
+ * Get current health metrics
100
+ */
101
+ getHealth(): HealthMetrics;
102
+ /**
103
+ * Get healing history
104
+ */
105
+ getHealingHistory(): HealingAction[];
106
+ /**
107
+ * Manual healing trigger
108
+ */
109
+ heal(force?: boolean): Promise<HealingAction | null>;
110
+ /**
111
+ * Event listener registration
112
+ */
113
+ on(event: MonitorEvent, callback: EventCallback): void;
114
+ /**
115
+ * Event listener removal
116
+ */
117
+ off(event: MonitorEvent, callback: EventCallback): void;
118
+ /**
119
+ * Export metrics for dashboard
120
+ */
121
+ exportMetrics(): {
122
+ current: HealthMetrics;
123
+ history: HealthMetrics[];
124
+ actions: HealingAction[];
125
+ baseline?: HealthMetrics;
126
+ config: Required<MonitorConfig>;
127
+ };
128
+ /**
129
+ * Record query for QPS calculation
130
+ */
131
+ recordQuery(latencyUs: number): void;
132
+ /**
133
+ * Perform periodic health check
134
+ */
135
+ private performHealthCheck;
136
+ /**
137
+ * Collect current metrics from pattern store
138
+ */
139
+ private collectMetrics;
140
+ /**
141
+ * Calculate percentile from sorted array
142
+ */
143
+ private getPercentile;
144
+ /**
145
+ * Get timestamp of last optimization
146
+ */
147
+ private getLastOptimizationTime;
148
+ /**
149
+ * Calculate degradation percentage compared to baseline
150
+ */
151
+ private calculateDegradation;
152
+ /**
153
+ * Update baseline metrics
154
+ */
155
+ private updateBaseline;
156
+ /**
157
+ * Determine best healing action based on metrics
158
+ */
159
+ private determineHealingAction;
160
+ /**
161
+ * Apply healing action
162
+ */
163
+ private applyHealingAction;
164
+ /**
165
+ * Adaptively tune HNSW parameters
166
+ */
167
+ private tuneHNSWParameters;
168
+ /**
169
+ * Record healing action
170
+ */
171
+ private recordHealingAction;
172
+ /**
173
+ * Emit event to listeners
174
+ */
175
+ private emit;
176
+ /**
177
+ * Create empty metrics object
178
+ */
179
+ private createEmptyMetrics;
180
+ }
181
+ /**
182
+ * Create a self-healing monitor with default configuration
183
+ */
184
+ export declare function createSelfHealingMonitor(store: IPatternStore, config?: MonitorConfig): SelfHealingMonitor;
185
+ export {};
186
+ //# sourceMappingURL=SelfHealingMonitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelfHealingMonitor.d.ts","sourceRoot":"","sources":["../../../src/core/memory/SelfHealingMonitor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,451 @@
1
+ "use strict";
2
+ /**
3
+ * SelfHealingMonitor - Automatic Performance Monitoring and Recovery for RuVector
4
+ *
5
+ * Based on ruv's AgentDB v2 architecture:
6
+ * - Performance degradation detection (<5% over 30 days target)
7
+ * - Automatic index rebalancing when performance drops
8
+ * - Health monitoring dashboard data
9
+ * - Adaptive HNSW parameter tuning
10
+ *
11
+ * Features:
12
+ * - Rolling baseline calculation for accurate degradation detection
13
+ * - Gradual HNSW parameter adjustment (M, efSearch)
14
+ * - Index compaction when fragmentation detected
15
+ * - Automatic cache invalidation on performance issues
16
+ * - Event-based notifications for monitoring systems
17
+ *
18
+ * @module core/memory/SelfHealingMonitor
19
+ * @version 1.0.0
20
+ */
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.SelfHealingMonitor = void 0;
23
+ exports.createSelfHealingMonitor = createSelfHealingMonitor;
24
+ /**
25
+ * Self-healing monitor for RuVector pattern store
26
+ *
27
+ * Continuously monitors performance and automatically applies healing actions
28
+ * when degradation is detected.
29
+ */
30
+ class SelfHealingMonitor {
31
+ /**
32
+ * Create a new self-healing monitor
33
+ */
34
+ constructor(store, config) {
35
+ this.running = false;
36
+ // Metrics tracking
37
+ this.metricsHistory = [];
38
+ this.lastHealthCheck = 0;
39
+ this.queryCount = 0;
40
+ this.queryTimings = [];
41
+ // Healing tracking
42
+ this.healingHistory = [];
43
+ this.lastHealingTime = 0;
44
+ this.currentHNSWParams = {
45
+ m: 16,
46
+ efConstruction: 200,
47
+ efSearch: 100,
48
+ };
49
+ // Event listeners
50
+ this.eventListeners = new Map();
51
+ this.store = store;
52
+ this.config = {
53
+ checkIntervalMs: config?.checkIntervalMs ?? 60000,
54
+ degradationThreshold: config?.degradationThreshold ?? 0.05,
55
+ autoHeal: config?.autoHeal ?? true,
56
+ baselineWindow: config?.baselineWindow ?? 100,
57
+ enableAdaptiveTuning: config?.enableAdaptiveTuning ?? true,
58
+ maxHealingActions: config?.maxHealingActions ?? 100,
59
+ minTimeBetweenHeals: config?.minTimeBetweenHeals ?? 300000,
60
+ };
61
+ // Initialize event listener maps
62
+ ['degradation', 'healed', 'error', 'metrics_updated'].forEach((event) => {
63
+ this.eventListeners.set(event, new Set());
64
+ });
65
+ }
66
+ /**
67
+ * Start continuous monitoring
68
+ */
69
+ start() {
70
+ if (this.running) {
71
+ console.warn('SelfHealingMonitor is already running');
72
+ return;
73
+ }
74
+ this.running = true;
75
+ console.log(`SelfHealingMonitor started (interval: ${this.config.checkIntervalMs}ms, threshold: ${this.config.degradationThreshold * 100}%)`);
76
+ // Initial health check
77
+ this.performHealthCheck().catch((error) => {
78
+ this.emit('error', { message: 'Initial health check failed', error });
79
+ });
80
+ // Schedule periodic checks
81
+ this.intervalId = setInterval(() => {
82
+ this.performHealthCheck().catch((error) => {
83
+ this.emit('error', { message: 'Health check failed', error });
84
+ });
85
+ }, this.config.checkIntervalMs);
86
+ }
87
+ /**
88
+ * Stop monitoring
89
+ */
90
+ stop() {
91
+ if (!this.running) {
92
+ return;
93
+ }
94
+ if (this.intervalId) {
95
+ clearInterval(this.intervalId);
96
+ this.intervalId = undefined;
97
+ }
98
+ this.running = false;
99
+ console.log('SelfHealingMonitor stopped');
100
+ }
101
+ /**
102
+ * Get current health metrics
103
+ */
104
+ getHealth() {
105
+ if (this.metricsHistory.length === 0) {
106
+ return this.createEmptyMetrics();
107
+ }
108
+ return this.metricsHistory[this.metricsHistory.length - 1];
109
+ }
110
+ /**
111
+ * Get healing history
112
+ */
113
+ getHealingHistory() {
114
+ return [...this.healingHistory];
115
+ }
116
+ /**
117
+ * Manual healing trigger
118
+ */
119
+ async heal(force = false) {
120
+ const currentMetrics = await this.collectMetrics();
121
+ const degradation = this.calculateDegradation(currentMetrics);
122
+ // Check if healing is needed
123
+ if (!force) {
124
+ if (degradation < this.config.degradationThreshold) {
125
+ console.log('No healing needed: performance within threshold');
126
+ return null;
127
+ }
128
+ // Check minimum time between heals
129
+ const timeSinceLastHeal = Date.now() - this.lastHealingTime;
130
+ if (timeSinceLastHeal < this.config.minTimeBetweenHeals) {
131
+ console.log(`Skipping heal: ${Math.round((this.config.minTimeBetweenHeals - timeSinceLastHeal) / 1000)}s until next allowed heal`);
132
+ return null;
133
+ }
134
+ }
135
+ // Determine best healing action
136
+ const action = this.determineHealingAction(currentMetrics, degradation);
137
+ console.log(`Applying healing action: ${action.type} (reason: ${action.reason})`);
138
+ try {
139
+ await this.applyHealingAction(action);
140
+ action.success = true;
141
+ // Collect metrics after healing
142
+ await new Promise((resolve) => setTimeout(resolve, 1000));
143
+ action.metricsAfter = await this.collectMetrics();
144
+ this.lastHealingTime = Date.now();
145
+ this.recordHealingAction(action);
146
+ this.emit('healed', action);
147
+ return action;
148
+ }
149
+ catch (error) {
150
+ action.success = false;
151
+ action.error = error instanceof Error ? error.message : String(error);
152
+ this.recordHealingAction(action);
153
+ this.emit('error', { message: 'Healing action failed', action, error });
154
+ return action;
155
+ }
156
+ }
157
+ /**
158
+ * Event listener registration
159
+ */
160
+ on(event, callback) {
161
+ const listeners = this.eventListeners.get(event);
162
+ if (listeners) {
163
+ listeners.add(callback);
164
+ }
165
+ }
166
+ /**
167
+ * Event listener removal
168
+ */
169
+ off(event, callback) {
170
+ const listeners = this.eventListeners.get(event);
171
+ if (listeners) {
172
+ listeners.delete(callback);
173
+ }
174
+ }
175
+ /**
176
+ * Export metrics for dashboard
177
+ */
178
+ exportMetrics() {
179
+ return {
180
+ current: this.getHealth(),
181
+ history: [...this.metricsHistory],
182
+ actions: this.getHealingHistory(),
183
+ baseline: this.baselineMetrics,
184
+ config: this.config,
185
+ };
186
+ }
187
+ /**
188
+ * Record query for QPS calculation
189
+ */
190
+ recordQuery(latencyUs) {
191
+ this.queryCount++;
192
+ this.queryTimings.push(latencyUs);
193
+ // Keep only recent timings (last 1000 queries)
194
+ if (this.queryTimings.length > 1000) {
195
+ this.queryTimings.shift();
196
+ }
197
+ }
198
+ // --- Private Methods ---
199
+ /**
200
+ * Perform periodic health check
201
+ */
202
+ async performHealthCheck() {
203
+ const metrics = await this.collectMetrics();
204
+ // Calculate degradation
205
+ metrics.degradationPercent = this.calculateDegradation(metrics);
206
+ // Store metrics
207
+ this.metricsHistory.push(metrics);
208
+ if (this.metricsHistory.length > 1000) {
209
+ this.metricsHistory.shift();
210
+ }
211
+ // Update baseline if needed
212
+ this.updateBaseline(metrics);
213
+ this.lastHealthCheck = Date.now();
214
+ this.emit('metrics_updated', metrics);
215
+ // Check for degradation and auto-heal
216
+ if (this.config.autoHeal &&
217
+ metrics.degradationPercent >= this.config.degradationThreshold) {
218
+ const timeSinceLastHeal = Date.now() - this.lastHealingTime;
219
+ if (timeSinceLastHeal >= this.config.minTimeBetweenHeals) {
220
+ this.emit('degradation', {
221
+ metrics,
222
+ degradation: metrics.degradationPercent,
223
+ threshold: this.config.degradationThreshold,
224
+ });
225
+ await this.heal(false);
226
+ }
227
+ }
228
+ }
229
+ /**
230
+ * Collect current metrics from pattern store
231
+ */
232
+ async collectMetrics() {
233
+ const stats = await this.store.getStats();
234
+ // Calculate QPS
235
+ const now = Date.now();
236
+ const timeSinceLastCheck = this.lastHealthCheck
237
+ ? (now - this.lastHealthCheck) / 1000
238
+ : 1;
239
+ const qps = timeSinceLastCheck > 0 ? this.queryCount / timeSinceLastCheck : 0;
240
+ // Calculate latency percentiles
241
+ const sortedTimings = [...this.queryTimings].sort((a, b) => a - b);
242
+ const p50 = this.getPercentile(sortedTimings, 0.5);
243
+ const p99 = this.getPercentile(sortedTimings, 0.99);
244
+ // Reset query tracking
245
+ this.queryCount = 0;
246
+ const metrics = {
247
+ qps: Math.round(qps * 100) / 100,
248
+ p50Latency: Math.round(p50),
249
+ p99Latency: Math.round(p99),
250
+ memoryUsage: stats.memoryUsage ?? 0,
251
+ indexSize: stats.count,
252
+ lastOptimization: this.getLastOptimizationTime(),
253
+ degradationPercent: 0, // Will be calculated
254
+ timestamp: now,
255
+ };
256
+ return metrics;
257
+ }
258
+ /**
259
+ * Calculate percentile from sorted array
260
+ */
261
+ getPercentile(sortedValues, percentile) {
262
+ if (sortedValues.length === 0)
263
+ return 0;
264
+ const index = Math.ceil(sortedValues.length * percentile) - 1;
265
+ return sortedValues[Math.max(0, index)];
266
+ }
267
+ /**
268
+ * Get timestamp of last optimization
269
+ */
270
+ getLastOptimizationTime() {
271
+ const optimizationActions = this.healingHistory.filter((action) => action.type === 'reindex' || action.type === 'compact' || action.type === 'tune_hnsw');
272
+ if (optimizationActions.length === 0)
273
+ return 0;
274
+ return optimizationActions[optimizationActions.length - 1].timestamp;
275
+ }
276
+ /**
277
+ * Calculate degradation percentage compared to baseline
278
+ */
279
+ calculateDegradation(current) {
280
+ if (!this.baselineMetrics) {
281
+ return 0;
282
+ }
283
+ // Primary metric: p99 latency degradation
284
+ const latencyDegradation = this.baselineMetrics.p99Latency > 0
285
+ ? (current.p99Latency - this.baselineMetrics.p99Latency) /
286
+ this.baselineMetrics.p99Latency
287
+ : 0;
288
+ // Secondary metric: QPS degradation (inverse - lower QPS is worse)
289
+ const qpsDegradation = this.baselineMetrics.qps > 0
290
+ ? (this.baselineMetrics.qps - current.qps) / this.baselineMetrics.qps
291
+ : 0;
292
+ // Weighted average (70% latency, 30% QPS)
293
+ const degradation = latencyDegradation * 0.7 + qpsDegradation * 0.3;
294
+ return Math.max(0, degradation);
295
+ }
296
+ /**
297
+ * Update baseline metrics
298
+ */
299
+ updateBaseline(current) {
300
+ // Wait until we have enough samples
301
+ if (this.metricsHistory.length < this.config.baselineWindow) {
302
+ return;
303
+ }
304
+ // Use median of recent samples as baseline
305
+ const recentMetrics = this.metricsHistory.slice(-this.config.baselineWindow);
306
+ const medianP99 = this.getPercentile(recentMetrics.map((m) => m.p99Latency).sort((a, b) => a - b), 0.5);
307
+ const medianQPS = this.getPercentile(recentMetrics.map((m) => m.qps).sort((a, b) => a - b), 0.5);
308
+ this.baselineMetrics = {
309
+ ...current,
310
+ p99Latency: medianP99,
311
+ qps: medianQPS,
312
+ degradationPercent: 0,
313
+ };
314
+ }
315
+ /**
316
+ * Determine best healing action based on metrics
317
+ */
318
+ determineHealingAction(metrics, degradation) {
319
+ const now = Date.now();
320
+ // High latency -> tune HNSW parameters
321
+ if (this.config.enableAdaptiveTuning &&
322
+ this.baselineMetrics &&
323
+ metrics.p99Latency > this.baselineMetrics.p99Latency * 1.5) {
324
+ return {
325
+ type: 'tune_hnsw',
326
+ reason: `p99 latency ${Math.round(metrics.p99Latency)}µs exceeds baseline by 50%`,
327
+ timestamp: now,
328
+ success: false,
329
+ parameters: { ...this.currentHNSWParams },
330
+ };
331
+ }
332
+ // Low QPS -> clear cache
333
+ if (this.baselineMetrics &&
334
+ metrics.qps < this.baselineMetrics.qps * 0.7) {
335
+ return {
336
+ type: 'clear_cache',
337
+ reason: `QPS ${metrics.qps} is 30% below baseline`,
338
+ timestamp: now,
339
+ success: false,
340
+ };
341
+ }
342
+ // Large index without recent optimization -> compact
343
+ const daysSinceOptimization = metrics.lastOptimization
344
+ ? (now - metrics.lastOptimization) / (1000 * 60 * 60 * 24)
345
+ : Infinity;
346
+ if (metrics.indexSize > 10000 && daysSinceOptimization > 7) {
347
+ return {
348
+ type: 'compact',
349
+ reason: `Index size ${metrics.indexSize} with ${Math.round(daysSinceOptimization)} days since last optimization`,
350
+ timestamp: now,
351
+ success: false,
352
+ };
353
+ }
354
+ // Default: reindex
355
+ return {
356
+ type: 'reindex',
357
+ reason: `Performance degradation ${Math.round(degradation * 100)}% exceeds threshold`,
358
+ timestamp: now,
359
+ success: false,
360
+ };
361
+ }
362
+ /**
363
+ * Apply healing action
364
+ */
365
+ async applyHealingAction(action) {
366
+ switch (action.type) {
367
+ case 'reindex':
368
+ await this.store.buildIndex();
369
+ break;
370
+ case 'compact':
371
+ await this.store.optimize();
372
+ break;
373
+ case 'tune_hnsw':
374
+ await this.tuneHNSWParameters();
375
+ await this.store.buildIndex();
376
+ break;
377
+ case 'clear_cache':
378
+ // Clear internal cache
379
+ this.queryTimings = [];
380
+ this.queryCount = 0;
381
+ break;
382
+ default:
383
+ throw new Error(`Unknown healing action type: ${action.type}`);
384
+ }
385
+ }
386
+ /**
387
+ * Adaptively tune HNSW parameters
388
+ */
389
+ async tuneHNSWParameters() {
390
+ const current = this.getHealth();
391
+ // Increase efSearch for better recall at cost of speed
392
+ if (current.p99Latency < 1000) {
393
+ // Still fast, can increase
394
+ this.currentHNSWParams.efSearch = Math.min(this.currentHNSWParams.efSearch + 50, 500);
395
+ }
396
+ else {
397
+ // Too slow, decrease
398
+ this.currentHNSWParams.efSearch = Math.max(this.currentHNSWParams.efSearch - 50, 50);
399
+ }
400
+ console.log(`Tuned HNSW parameters: efSearch=${this.currentHNSWParams.efSearch}`);
401
+ }
402
+ /**
403
+ * Record healing action
404
+ */
405
+ recordHealingAction(action) {
406
+ this.healingHistory.push(action);
407
+ // Trim history
408
+ if (this.healingHistory.length > this.config.maxHealingActions) {
409
+ this.healingHistory.shift();
410
+ }
411
+ }
412
+ /**
413
+ * Emit event to listeners
414
+ */
415
+ emit(event, data) {
416
+ const listeners = this.eventListeners.get(event);
417
+ if (listeners) {
418
+ listeners.forEach((callback) => {
419
+ try {
420
+ callback(data);
421
+ }
422
+ catch (error) {
423
+ console.error(`Error in ${event} event listener:`, error);
424
+ }
425
+ });
426
+ }
427
+ }
428
+ /**
429
+ * Create empty metrics object
430
+ */
431
+ createEmptyMetrics() {
432
+ return {
433
+ qps: 0,
434
+ p50Latency: 0,
435
+ p99Latency: 0,
436
+ memoryUsage: 0,
437
+ indexSize: 0,
438
+ lastOptimization: 0,
439
+ degradationPercent: 0,
440
+ timestamp: Date.now(),
441
+ };
442
+ }
443
+ }
444
+ exports.SelfHealingMonitor = SelfHealingMonitor;
445
+ /**
446
+ * Create a self-healing monitor with default configuration
447
+ */
448
+ function createSelfHealingMonitor(store, config) {
449
+ return new SelfHealingMonitor(store, config);
450
+ }
451
+ //# sourceMappingURL=SelfHealingMonitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelfHealingMonitor.js","sourceRoot":"","sources":["../../../src/core/memory/SelfHealingMonitor.ts"],"names":[],"mappings":"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"}