agentic-qe 1.9.3 → 1.9.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 (108) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/README.md +30 -5
  3. package/config/.env.otel.example +25 -0
  4. package/config/OTEL-QUICK-REFERENCE.md +137 -0
  5. package/config/README-OTEL.md +222 -0
  6. package/config/alerting-rules.yml +518 -0
  7. package/config/docker-compose.otel.yml +187 -0
  8. package/config/grafana/dashboards/agentic-qe-overview.json +286 -0
  9. package/config/grafana/provisioning/dashboards/dashboards.yml +19 -0
  10. package/config/grafana/provisioning/datasources/datasources.yml +53 -0
  11. package/config/otel-collector-config.yaml.example +145 -0
  12. package/config/prometheus.yml.example +106 -0
  13. package/dist/alerting/AlertManager.d.ts +120 -0
  14. package/dist/alerting/AlertManager.d.ts.map +1 -0
  15. package/dist/alerting/AlertManager.js +345 -0
  16. package/dist/alerting/AlertManager.js.map +1 -0
  17. package/dist/alerting/FeedbackRouter.d.ts +98 -0
  18. package/dist/alerting/FeedbackRouter.d.ts.map +1 -0
  19. package/dist/alerting/FeedbackRouter.js +331 -0
  20. package/dist/alerting/FeedbackRouter.js.map +1 -0
  21. package/dist/alerting/StrategyApplicator.d.ts +120 -0
  22. package/dist/alerting/StrategyApplicator.d.ts.map +1 -0
  23. package/dist/alerting/StrategyApplicator.js +299 -0
  24. package/dist/alerting/StrategyApplicator.js.map +1 -0
  25. package/dist/alerting/index.d.ts +68 -0
  26. package/dist/alerting/index.d.ts.map +1 -0
  27. package/dist/alerting/index.js +112 -0
  28. package/dist/alerting/index.js.map +1 -0
  29. package/dist/alerting/types.d.ts +118 -0
  30. package/dist/alerting/types.d.ts.map +1 -0
  31. package/dist/alerting/types.js +11 -0
  32. package/dist/alerting/types.js.map +1 -0
  33. package/dist/cli/init/claude-config.d.ts.map +1 -1
  34. package/dist/cli/init/claude-config.js +12 -7
  35. package/dist/cli/init/claude-config.js.map +1 -1
  36. package/dist/core/memory/IPatternStore.d.ts +209 -0
  37. package/dist/core/memory/IPatternStore.d.ts.map +1 -0
  38. package/dist/core/memory/IPatternStore.js +15 -0
  39. package/dist/core/memory/IPatternStore.js.map +1 -0
  40. package/dist/core/memory/MigrationTools.d.ts +192 -0
  41. package/dist/core/memory/MigrationTools.d.ts.map +1 -0
  42. package/dist/core/memory/MigrationTools.js +615 -0
  43. package/dist/core/memory/MigrationTools.js.map +1 -0
  44. package/dist/core/memory/NeuralEnhancement.d.ts +154 -0
  45. package/dist/core/memory/NeuralEnhancement.d.ts.map +1 -0
  46. package/dist/core/memory/NeuralEnhancement.js +598 -0
  47. package/dist/core/memory/NeuralEnhancement.js.map +1 -0
  48. package/dist/core/memory/PatternStoreFactory.d.ts +143 -0
  49. package/dist/core/memory/PatternStoreFactory.d.ts.map +1 -0
  50. package/dist/core/memory/PatternStoreFactory.js +370 -0
  51. package/dist/core/memory/PatternStoreFactory.js.map +1 -0
  52. package/dist/core/memory/RealAgentDBAdapter.d.ts +1 -0
  53. package/dist/core/memory/RealAgentDBAdapter.d.ts.map +1 -1
  54. package/dist/core/memory/RealAgentDBAdapter.js +28 -20
  55. package/dist/core/memory/RealAgentDBAdapter.js.map +1 -1
  56. package/dist/core/memory/RuVectorPatternStore.d.ts +198 -0
  57. package/dist/core/memory/RuVectorPatternStore.d.ts.map +1 -0
  58. package/dist/core/memory/RuVectorPatternStore.js +605 -0
  59. package/dist/core/memory/RuVectorPatternStore.js.map +1 -0
  60. package/dist/core/memory/SelfHealingMonitor.d.ts +186 -0
  61. package/dist/core/memory/SelfHealingMonitor.d.ts.map +1 -0
  62. package/dist/core/memory/SelfHealingMonitor.js +451 -0
  63. package/dist/core/memory/SelfHealingMonitor.js.map +1 -0
  64. package/dist/core/memory/SwarmMemoryManager.d.ts +62 -0
  65. package/dist/core/memory/SwarmMemoryManager.d.ts.map +1 -1
  66. package/dist/core/memory/SwarmMemoryManager.js +97 -0
  67. package/dist/core/memory/SwarmMemoryManager.js.map +1 -1
  68. package/dist/core/memory/index.d.ts +11 -0
  69. package/dist/core/memory/index.d.ts.map +1 -1
  70. package/dist/core/memory/index.js +36 -1
  71. package/dist/core/memory/index.js.map +1 -1
  72. package/dist/reasoning/RuVectorReasoningAdapter.d.ts +232 -0
  73. package/dist/reasoning/RuVectorReasoningAdapter.d.ts.map +1 -0
  74. package/dist/reasoning/RuVectorReasoningAdapter.js +585 -0
  75. package/dist/reasoning/RuVectorReasoningAdapter.js.map +1 -0
  76. package/dist/reasoning/index.d.ts +2 -0
  77. package/dist/reasoning/index.d.ts.map +1 -1
  78. package/dist/reasoning/index.js +6 -1
  79. package/dist/reasoning/index.js.map +1 -1
  80. package/dist/reporting/ResultAggregator.d.ts +107 -0
  81. package/dist/reporting/ResultAggregator.d.ts.map +1 -0
  82. package/dist/reporting/ResultAggregator.js +435 -0
  83. package/dist/reporting/ResultAggregator.js.map +1 -0
  84. package/dist/reporting/index.d.ts +48 -0
  85. package/dist/reporting/index.d.ts.map +1 -0
  86. package/dist/reporting/index.js +154 -0
  87. package/dist/reporting/index.js.map +1 -0
  88. package/dist/reporting/reporters/ControlLoopReporter.d.ts +128 -0
  89. package/dist/reporting/reporters/ControlLoopReporter.d.ts.map +1 -0
  90. package/dist/reporting/reporters/ControlLoopReporter.js +417 -0
  91. package/dist/reporting/reporters/ControlLoopReporter.js.map +1 -0
  92. package/dist/reporting/reporters/HumanReadableReporter.d.ts +140 -0
  93. package/dist/reporting/reporters/HumanReadableReporter.d.ts.map +1 -0
  94. package/dist/reporting/reporters/HumanReadableReporter.js +524 -0
  95. package/dist/reporting/reporters/HumanReadableReporter.js.map +1 -0
  96. package/dist/reporting/reporters/JSONReporter.d.ts +193 -0
  97. package/dist/reporting/reporters/JSONReporter.d.ts.map +1 -0
  98. package/dist/reporting/reporters/JSONReporter.js +324 -0
  99. package/dist/reporting/reporters/JSONReporter.js.map +1 -0
  100. package/dist/reporting/reporters/index.d.ts +14 -0
  101. package/dist/reporting/reporters/index.d.ts.map +1 -0
  102. package/dist/reporting/reporters/index.js +19 -0
  103. package/dist/reporting/reporters/index.js.map +1 -0
  104. package/dist/reporting/types.d.ts +427 -0
  105. package/dist/reporting/types.d.ts.map +1 -0
  106. package/dist/reporting/types.js +12 -0
  107. package/dist/reporting/types.js.map +1 -0
  108. package/package.json +9 -1
@@ -0,0 +1,605 @@
1
+ "use strict";
2
+ /**
3
+ * RuVector Pattern Store
4
+ *
5
+ * High-performance vector database wrapper for test pattern storage.
6
+ * Uses RuVector (@ruvector/core) for exceptional performance:
7
+ *
8
+ * Benchmark Results (ARM64 Linux, Nov 30, 2025):
9
+ * - Search p50: 1.5 µs (170x faster than baseline)
10
+ * - QPS: 192,840 queries/sec (53x higher)
11
+ * - Batch insert: 2,703,923 ops/sec (129x faster)
12
+ * - Memory: 18% less than baseline
13
+ *
14
+ * Features:
15
+ * - HNSW indexing with configurable M, efConstruction, efSearch
16
+ * - Automatic native/fallback detection
17
+ * - Cosine, Euclidean, and Dot product distance metrics
18
+ * - Float32Array optimization for native performance
19
+ * - Performance metrics tracking
20
+ *
21
+ * PLATFORM SUPPORT:
22
+ * - Linux x64 (native)
23
+ * - Linux ARM64 (native via ruvector-core-linux-arm64-gnu)
24
+ * - macOS Intel/Apple Silicon (native)
25
+ * - Windows x64 (native)
26
+ *
27
+ * @module core/memory/RuVectorPatternStore
28
+ * @version 2.0.0
29
+ */
30
+ Object.defineProperty(exports, "__esModule", { value: true });
31
+ exports.RuVectorPatternStore = void 0;
32
+ exports.isRuVectorAvailable = isRuVectorAvailable;
33
+ exports.getRuVectorInfo = getRuVectorInfo;
34
+ exports.createQEPatternStore = createQEPatternStore;
35
+ exports.createHighPerformancePatternStore = createHighPerformancePatternStore;
36
+ /**
37
+ * Check if RuVector native module is available
38
+ */
39
+ function isRuVectorAvailable() {
40
+ try {
41
+ require('@ruvector/core');
42
+ return true;
43
+ }
44
+ catch {
45
+ return false;
46
+ }
47
+ }
48
+ /**
49
+ * Get RuVector availability info
50
+ */
51
+ function getRuVectorInfo() {
52
+ const platform = process.platform;
53
+ const arch = process.arch;
54
+ try {
55
+ const ruvector = require('@ruvector/core');
56
+ return {
57
+ available: true,
58
+ platform,
59
+ arch,
60
+ };
61
+ }
62
+ catch (error) {
63
+ return {
64
+ available: false,
65
+ reason: error.message,
66
+ platform,
67
+ arch,
68
+ };
69
+ }
70
+ }
71
+ /**
72
+ * High-performance vector pattern store using RuVector
73
+ *
74
+ * Implements IPatternStore interface for unified pattern storage.
75
+ * Falls back to in-memory implementation when native module unavailable.
76
+ *
77
+ * @implements {IPatternStore}
78
+ */
79
+ class RuVectorPatternStore {
80
+ constructor(config = {}) {
81
+ this.initialized = false;
82
+ this.useNative = false;
83
+ this.nativeDb = null;
84
+ // Fallback in-memory storage
85
+ this.patterns = new Map();
86
+ // Performance tracking
87
+ this.metrics = {
88
+ searchTimes: [],
89
+ insertTimes: [],
90
+ totalSearches: 0,
91
+ totalInserts: 0,
92
+ lastQPS: 0,
93
+ };
94
+ this.config = {
95
+ dimension: config.dimension ?? 384,
96
+ metric: config.metric ?? 'cosine',
97
+ storagePath: config.storagePath ?? './data/ruvector-patterns.db',
98
+ autoPersist: config.autoPersist ?? true,
99
+ hnsw: {
100
+ // Optimized defaults from ruv's benchmarks
101
+ m: config.hnsw?.m ?? 32, // Increased from 16 for better recall
102
+ efConstruction: config.hnsw?.efConstruction ?? 200,
103
+ efSearch: config.hnsw?.efSearch ?? 100,
104
+ },
105
+ preferredBackend: config.preferredBackend ?? 'auto',
106
+ enableMetrics: config.enableMetrics ?? true,
107
+ };
108
+ }
109
+ /**
110
+ * Initialize the vector database
111
+ */
112
+ async initialize() {
113
+ if (this.initialized)
114
+ return;
115
+ // Try to load native RuVector from @ruvector/core
116
+ try {
117
+ const ruvector = require('@ruvector/core');
118
+ // Map our metric names to RuVector's DistanceMetric enum
119
+ const metricMap = {
120
+ cosine: 'Cosine',
121
+ euclidean: 'Euclidean',
122
+ dot: 'DotProduct',
123
+ };
124
+ // Note: VectorDb with lowercase 'd' (NAPI-RS naming convention)
125
+ this.nativeDb = new ruvector.VectorDb({
126
+ dimensions: this.config.dimension,
127
+ distanceMetric: metricMap[this.config.metric] || 'Cosine',
128
+ storagePath: this.config.storagePath,
129
+ hnswConfig: {
130
+ m: this.config.hnsw.m,
131
+ efConstruction: this.config.hnsw.efConstruction,
132
+ efSearch: this.config.hnsw.efSearch,
133
+ },
134
+ });
135
+ this.useNative = true;
136
+ console.log(`[RuVector] ✅ Using native @ruvector/core (${process.arch})`);
137
+ console.log(`[RuVector] HNSW: M=${this.config.hnsw.m}, efConstruction=${this.config.hnsw.efConstruction}, efSearch=${this.config.hnsw.efSearch}`);
138
+ }
139
+ catch (error) {
140
+ // Fallback to in-memory implementation
141
+ this.useNative = false;
142
+ console.log(`[RuVector] ⚠️ Native unavailable (${process.arch}): ${error.message}`);
143
+ console.log(`[RuVector] Using in-memory fallback`);
144
+ }
145
+ this.initialized = true;
146
+ }
147
+ /**
148
+ * Get implementation info
149
+ */
150
+ getImplementationInfo() {
151
+ if (this.useNative) {
152
+ try {
153
+ const ruvector = require('@ruvector/core');
154
+ const ver = ruvector.version ? ruvector.version() : '0.1.x';
155
+ return {
156
+ type: 'ruvector',
157
+ version: ver,
158
+ features: [
159
+ 'hnsw-indexing',
160
+ 'batch-insert',
161
+ 'native-float32',
162
+ 'cosine-similarity',
163
+ 'euclidean-distance',
164
+ 'dot-product',
165
+ ],
166
+ };
167
+ }
168
+ catch {
169
+ return {
170
+ type: 'ruvector',
171
+ version: 'unknown',
172
+ features: ['hnsw-indexing', 'batch-insert'],
173
+ };
174
+ }
175
+ }
176
+ return {
177
+ type: 'fallback',
178
+ version: '2.0.0-fallback',
179
+ features: ['in-memory', 'cosine-similarity'],
180
+ };
181
+ }
182
+ /**
183
+ * Store a test pattern
184
+ */
185
+ async storePattern(pattern) {
186
+ this.ensureInitialized();
187
+ const startTime = performance.now();
188
+ const entry = {
189
+ id: pattern.id,
190
+ vector: pattern.embedding,
191
+ metadata: {
192
+ type: pattern.type,
193
+ domain: pattern.domain,
194
+ content: pattern.content,
195
+ framework: pattern.framework,
196
+ coverage: pattern.coverage,
197
+ flakinessScore: pattern.flakinessScore,
198
+ verdict: pattern.verdict,
199
+ createdAt: pattern.createdAt ?? Date.now(),
200
+ lastUsed: pattern.lastUsed ?? Date.now(),
201
+ usageCount: pattern.usageCount ?? 0,
202
+ ...pattern.metadata,
203
+ },
204
+ };
205
+ if (this.useNative) {
206
+ // RuVector requires Float32Array for vectors
207
+ // Note: insert() returns a Promise in @ruvector/core
208
+ await this.nativeDb.insert({
209
+ id: entry.id,
210
+ vector: new Float32Array(entry.vector),
211
+ });
212
+ // Store metadata separately in our map for retrieval
213
+ this.patterns.set(entry.id, entry);
214
+ }
215
+ else {
216
+ this.patterns.set(entry.id, entry);
217
+ }
218
+ // Track performance
219
+ if (this.config.enableMetrics) {
220
+ const duration = performance.now() - startTime;
221
+ this.metrics.insertTimes.push(duration);
222
+ this.metrics.totalInserts++;
223
+ if (this.metrics.insertTimes.length > 1000) {
224
+ this.metrics.insertTimes.shift();
225
+ }
226
+ }
227
+ }
228
+ /**
229
+ * Store multiple patterns in batch (optimized for high throughput)
230
+ * Achieves 2.7M+ ops/sec on native backend
231
+ */
232
+ async storeBatch(patterns) {
233
+ this.ensureInitialized();
234
+ const startTime = performance.now();
235
+ const entries = patterns.map((pattern) => ({
236
+ id: pattern.id,
237
+ vector: pattern.embedding,
238
+ metadata: {
239
+ type: pattern.type,
240
+ domain: pattern.domain,
241
+ content: pattern.content,
242
+ framework: pattern.framework,
243
+ coverage: pattern.coverage,
244
+ flakinessScore: pattern.flakinessScore,
245
+ verdict: pattern.verdict,
246
+ createdAt: pattern.createdAt ?? Date.now(),
247
+ lastUsed: pattern.lastUsed ?? Date.now(),
248
+ usageCount: pattern.usageCount ?? 0,
249
+ ...pattern.metadata,
250
+ },
251
+ }));
252
+ if (this.useNative) {
253
+ // RuVector batch insert - highly optimized (2.7M ops/sec)
254
+ // Note: insertBatch() returns a Promise in @ruvector/core
255
+ const ruVectorEntries = entries.map((e) => ({
256
+ id: e.id,
257
+ vector: new Float32Array(e.vector),
258
+ }));
259
+ await this.nativeDb.insertBatch(ruVectorEntries);
260
+ // Store metadata separately
261
+ for (const entry of entries) {
262
+ this.patterns.set(entry.id, entry);
263
+ }
264
+ }
265
+ else {
266
+ for (const entry of entries) {
267
+ this.patterns.set(entry.id, entry);
268
+ }
269
+ }
270
+ // Track performance
271
+ if (this.config.enableMetrics) {
272
+ const duration = performance.now() - startTime;
273
+ const perItem = duration / patterns.length;
274
+ for (let i = 0; i < Math.min(patterns.length, 100); i++) {
275
+ this.metrics.insertTimes.push(perItem);
276
+ }
277
+ this.metrics.totalInserts += patterns.length;
278
+ }
279
+ }
280
+ /**
281
+ * Search for similar patterns
282
+ * Achieves 192K+ QPS on native backend
283
+ */
284
+ async searchSimilar(queryEmbedding, options = {}) {
285
+ this.ensureInitialized();
286
+ const startTime = performance.now();
287
+ const k = options.k ?? 10;
288
+ const threshold = options.threshold ?? 0;
289
+ let results;
290
+ if (this.useNative) {
291
+ // RuVector search API requires Float32Array and object format
292
+ // Note: search() returns a Promise in @ruvector/core
293
+ const rawSearchResults = await this.nativeDb.search({
294
+ vector: new Float32Array(queryEmbedding),
295
+ k,
296
+ });
297
+ // Ensure searchResults is an array (handles various return types)
298
+ const searchResults = Array.isArray(rawSearchResults)
299
+ ? rawSearchResults
300
+ : rawSearchResults?.results ?? [];
301
+ // Map results back to patterns with metadata from our store
302
+ const patternResults = [];
303
+ for (const result of searchResults) {
304
+ const entry = this.patterns.get(result.id);
305
+ if (!entry)
306
+ continue;
307
+ // Apply filters
308
+ if (options.domain && entry.metadata?.domain !== options.domain)
309
+ continue;
310
+ if (options.type && entry.metadata?.type !== options.type)
311
+ continue;
312
+ if (options.framework && entry.metadata?.framework !== options.framework)
313
+ continue;
314
+ // Convert distance to similarity score (RuVector returns distance, lower is better)
315
+ // For cosine, score is 1 - distance
316
+ const score = 1 - result.score;
317
+ if (score >= threshold) {
318
+ patternResults.push({
319
+ pattern: this.entryToPattern(entry),
320
+ score,
321
+ });
322
+ }
323
+ }
324
+ results = patternResults;
325
+ }
326
+ else {
327
+ // Fallback: brute-force cosine similarity
328
+ const rawResults = [];
329
+ for (const entry of Array.from(this.patterns.values())) {
330
+ // Apply filters
331
+ if (options.domain && entry.metadata?.domain !== options.domain)
332
+ continue;
333
+ if (options.type && entry.metadata?.type !== options.type)
334
+ continue;
335
+ if (options.framework && entry.metadata?.framework !== options.framework)
336
+ continue;
337
+ const score = this.cosineSimilarity(queryEmbedding, entry.vector);
338
+ if (score >= threshold) {
339
+ rawResults.push({ entry, score });
340
+ }
341
+ }
342
+ // Sort by score descending and take top k
343
+ rawResults.sort((a, b) => b.score - a.score);
344
+ const topK = rawResults.slice(0, k);
345
+ results = topK.map(({ entry, score }) => ({
346
+ pattern: this.entryToPattern(entry),
347
+ score,
348
+ }));
349
+ }
350
+ // Track performance
351
+ if (this.config.enableMetrics) {
352
+ const duration = performance.now() - startTime;
353
+ this.metrics.searchTimes.push(duration);
354
+ this.metrics.totalSearches++;
355
+ if (this.metrics.searchTimes.length > 1000) {
356
+ this.metrics.searchTimes.shift();
357
+ }
358
+ }
359
+ return results;
360
+ }
361
+ /**
362
+ * Get a pattern by ID
363
+ */
364
+ async getPattern(id) {
365
+ this.ensureInitialized();
366
+ // Metadata is stored locally for both native and fallback
367
+ const entry = this.patterns.get(id);
368
+ if (!entry)
369
+ return null;
370
+ return this.entryToPattern(entry);
371
+ }
372
+ /**
373
+ * Delete a pattern by ID
374
+ */
375
+ async deletePattern(id) {
376
+ this.ensureInitialized();
377
+ if (this.useNative) {
378
+ try {
379
+ this.nativeDb.delete(id);
380
+ }
381
+ catch {
382
+ // Ignore deletion errors from native
383
+ }
384
+ }
385
+ return this.patterns.delete(id);
386
+ }
387
+ /**
388
+ * Record pattern usage
389
+ */
390
+ async recordUsage(id) {
391
+ this.ensureInitialized();
392
+ const entry = this.patterns.get(id);
393
+ if (entry) {
394
+ entry.metadata = {
395
+ ...entry.metadata,
396
+ lastUsed: Date.now(),
397
+ usageCount: (entry.metadata?.usageCount ?? 0) + 1,
398
+ };
399
+ }
400
+ }
401
+ /**
402
+ * Build HNSW index
403
+ */
404
+ async buildIndex() {
405
+ this.ensureInitialized();
406
+ if (this.useNative && this.nativeDb.buildIndex) {
407
+ this.nativeDb.buildIndex();
408
+ }
409
+ // Fallback doesn't use HNSW index
410
+ }
411
+ /**
412
+ * Optimize database
413
+ */
414
+ async optimize() {
415
+ this.ensureInitialized();
416
+ if (this.useNative && this.nativeDb.optimize) {
417
+ this.nativeDb.optimize();
418
+ }
419
+ }
420
+ /**
421
+ * Get database statistics
422
+ */
423
+ async getStats() {
424
+ this.ensureInitialized();
425
+ const baseStats = {
426
+ count: this.patterns.size,
427
+ dimension: this.config.dimension,
428
+ metric: this.config.metric,
429
+ implementation: this.useNative ? 'ruvector' : 'fallback',
430
+ };
431
+ // Add performance metrics if available
432
+ if (this.config.enableMetrics && this.metrics.searchTimes.length > 0) {
433
+ const sorted = [...this.metrics.searchTimes].sort((a, b) => a - b);
434
+ const p50Index = Math.floor(sorted.length * 0.5);
435
+ const p99Index = Math.floor(sorted.length * 0.99);
436
+ baseStats.p50Latency = sorted[p50Index];
437
+ baseStats.p99Latency = sorted[p99Index];
438
+ // Calculate QPS from recent searches
439
+ if (sorted.length > 0) {
440
+ const avgTime = sorted.reduce((a, b) => a + b, 0) / sorted.length;
441
+ baseStats.qps = avgTime > 0 ? 1000 / avgTime : 0;
442
+ }
443
+ }
444
+ if (this.useNative) {
445
+ try {
446
+ const nativeCount = this.nativeDb.len();
447
+ baseStats.count = nativeCount;
448
+ baseStats.indexType = 'HNSW';
449
+ }
450
+ catch {
451
+ // Use pattern map count as fallback
452
+ }
453
+ }
454
+ return baseStats;
455
+ }
456
+ /**
457
+ * Save database (no-op for @ruvector/core - it handles persistence internally)
458
+ */
459
+ async save(_path) {
460
+ this.ensureInitialized();
461
+ // @ruvector/core handles persistence automatically via storagePath config
462
+ }
463
+ /**
464
+ * Load database (no-op for @ruvector/core - it loads automatically on init)
465
+ */
466
+ async load(_path) {
467
+ this.ensureInitialized();
468
+ // @ruvector/core handles loading automatically via storagePath config
469
+ }
470
+ /**
471
+ * Clear all patterns
472
+ */
473
+ async clear() {
474
+ this.ensureInitialized();
475
+ // Clear local pattern store
476
+ this.patterns.clear();
477
+ // Reset metrics
478
+ this.metrics = {
479
+ searchTimes: [],
480
+ insertTimes: [],
481
+ totalSearches: 0,
482
+ totalInserts: 0,
483
+ lastQPS: 0,
484
+ };
485
+ // Note: @ruvector/core doesn't have a clear method, would need to recreate
486
+ }
487
+ /**
488
+ * Shutdown
489
+ */
490
+ async shutdown() {
491
+ this.patterns.clear();
492
+ this.nativeDb = null;
493
+ this.initialized = false;
494
+ }
495
+ /**
496
+ * Get performance metrics
497
+ */
498
+ getPerformanceMetrics() {
499
+ const searchTimes = this.metrics.searchTimes;
500
+ const insertTimes = this.metrics.insertTimes;
501
+ if (searchTimes.length === 0) {
502
+ return {
503
+ avgSearchTime: 0,
504
+ p50SearchTime: 0,
505
+ p99SearchTime: 0,
506
+ avgInsertTime: 0,
507
+ totalSearches: 0,
508
+ totalInserts: 0,
509
+ estimatedQPS: 0,
510
+ };
511
+ }
512
+ const sortedSearch = [...searchTimes].sort((a, b) => a - b);
513
+ const sortedInsert = [...insertTimes].sort((a, b) => a - b);
514
+ const avgSearch = searchTimes.reduce((a, b) => a + b, 0) / searchTimes.length;
515
+ const p50Index = Math.floor(sortedSearch.length * 0.5);
516
+ const p99Index = Math.floor(sortedSearch.length * 0.99);
517
+ return {
518
+ avgSearchTime: avgSearch,
519
+ p50SearchTime: sortedSearch[p50Index] || 0,
520
+ p99SearchTime: sortedSearch[p99Index] || 0,
521
+ avgInsertTime: insertTimes.length > 0
522
+ ? insertTimes.reduce((a, b) => a + b, 0) / insertTimes.length
523
+ : 0,
524
+ totalSearches: this.metrics.totalSearches,
525
+ totalInserts: this.metrics.totalInserts,
526
+ estimatedQPS: avgSearch > 0 ? 1000 / avgSearch : 0,
527
+ };
528
+ }
529
+ ensureInitialized() {
530
+ if (!this.initialized) {
531
+ throw new Error('RuVectorPatternStore not initialized. Call initialize() first.');
532
+ }
533
+ }
534
+ cosineSimilarity(a, b) {
535
+ if (a.length !== b.length)
536
+ return 0;
537
+ let dotProduct = 0;
538
+ let normA = 0;
539
+ let normB = 0;
540
+ for (let i = 0; i < a.length; i++) {
541
+ dotProduct += a[i] * b[i];
542
+ normA += a[i] * a[i];
543
+ normB += b[i] * b[i];
544
+ }
545
+ const magnitude = Math.sqrt(normA) * Math.sqrt(normB);
546
+ return magnitude > 0 ? dotProduct / magnitude : 0;
547
+ }
548
+ entryToPattern(entry) {
549
+ return {
550
+ id: entry.id,
551
+ embedding: entry.vector,
552
+ type: entry.metadata?.type ?? 'unknown',
553
+ domain: entry.metadata?.domain ?? 'unknown',
554
+ content: entry.metadata?.content ?? '',
555
+ framework: entry.metadata?.framework,
556
+ coverage: entry.metadata?.coverage,
557
+ flakinessScore: entry.metadata?.flakinessScore,
558
+ verdict: entry.metadata?.verdict,
559
+ createdAt: entry.metadata?.createdAt,
560
+ lastUsed: entry.metadata?.lastUsed,
561
+ usageCount: entry.metadata?.usageCount,
562
+ metadata: entry.metadata,
563
+ };
564
+ }
565
+ }
566
+ exports.RuVectorPatternStore = RuVectorPatternStore;
567
+ /**
568
+ * Create a pre-configured RuVector store for QE patterns
569
+ * Uses optimized HNSW parameters from benchmark testing
570
+ */
571
+ function createQEPatternStore(storagePath) {
572
+ return new RuVectorPatternStore({
573
+ dimension: 384,
574
+ metric: 'cosine',
575
+ storagePath: storagePath ?? './data/qe-patterns.ruvector',
576
+ autoPersist: true,
577
+ enableMetrics: true,
578
+ hnsw: {
579
+ // Optimized from ruv's AgentDB v2 benchmarks
580
+ m: 32, // Higher M for better recall
581
+ efConstruction: 200,
582
+ efSearch: 100,
583
+ },
584
+ });
585
+ }
586
+ /**
587
+ * Create a high-performance RuVector store optimized for throughput
588
+ * Best for batch operations and high-QPS workloads
589
+ */
590
+ function createHighPerformancePatternStore(storagePath) {
591
+ return new RuVectorPatternStore({
592
+ dimension: 384,
593
+ metric: 'cosine',
594
+ storagePath: storagePath ?? './data/hp-patterns.ruvector',
595
+ autoPersist: true,
596
+ enableMetrics: true,
597
+ hnsw: {
598
+ // Tuned for maximum throughput
599
+ m: 48, // Even higher for large datasets
600
+ efConstruction: 300,
601
+ efSearch: 150,
602
+ },
603
+ });
604
+ }
605
+ //# sourceMappingURL=RuVectorPatternStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RuVectorPatternStore.js","sourceRoot":"","sources":["../../../src/core/memory/RuVectorPatternStore.ts"],"names":[],"mappings":"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"}