@claude-flow/plugin-test-intelligence 3.0.0-alpha.1

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.
@@ -0,0 +1,432 @@
1
+ /**
2
+ * SONA Bridge for Test Intelligence
3
+ *
4
+ * Provides pattern learning and continuous adaptation for test intelligence
5
+ * using SONA (Self-Optimizing Neural Architecture) with LoRA fine-tuning
6
+ * and EWC++ memory preservation.
7
+ */
8
+ /**
9
+ * Default SONA configuration
10
+ */
11
+ const DEFAULT_SONA_CONFIG = {
12
+ mode: 'balanced',
13
+ loraRank: 4,
14
+ learningRate: 0.001,
15
+ ewcLambda: 100,
16
+ batchSize: 32,
17
+ };
18
+ /**
19
+ * SONA Bridge Implementation for Test Intelligence
20
+ *
21
+ * Provides continuous learning capabilities for test pattern recognition:
22
+ * - Pattern storage and retrieval using HNSW-indexed embeddings
23
+ * - LoRA-based fine-tuning for domain adaptation
24
+ * - EWC++ for preventing catastrophic forgetting
25
+ */
26
+ export class TestSonaBridge {
27
+ name = 'test-intelligence-sona';
28
+ version = '0.1.0';
29
+ status = 'unloaded';
30
+ config;
31
+ patterns = new Map();
32
+ patternEmbeddings = [];
33
+ loraWeights;
34
+ ewcState;
35
+ patternIndex = new Map();
36
+ constructor(config) {
37
+ this.config = { ...DEFAULT_SONA_CONFIG, ...config };
38
+ this.loraWeights = {
39
+ A: new Map(),
40
+ B: new Map(),
41
+ rank: this.config.loraRank,
42
+ alpha: 0.1,
43
+ };
44
+ this.ewcState = {
45
+ fisher: new Map(),
46
+ means: new Map(),
47
+ lambda: this.config.ewcLambda,
48
+ };
49
+ }
50
+ async init() {
51
+ if (this.status === 'ready')
52
+ return;
53
+ if (this.status === 'loading')
54
+ return;
55
+ this.status = 'loading';
56
+ try {
57
+ // Try to load SONA WASM module
58
+ // Dynamic import of optional WASM module - use string literal to avoid type error
59
+ const modulePath = '@claude-flow/ruvector-upstream';
60
+ const wasmModule = await import(/* @vite-ignore */ modulePath).catch(() => null);
61
+ if (wasmModule) {
62
+ // Initialize with WASM module
63
+ this.status = 'ready';
64
+ }
65
+ else {
66
+ // Use mock implementation
67
+ this.initializeMockLoRA();
68
+ this.status = 'ready';
69
+ }
70
+ }
71
+ catch (error) {
72
+ this.status = 'error';
73
+ throw error;
74
+ }
75
+ }
76
+ async destroy() {
77
+ this.patterns.clear();
78
+ this.patternEmbeddings = [];
79
+ this.patternIndex.clear();
80
+ this.loraWeights.A.clear();
81
+ this.loraWeights.B.clear();
82
+ this.ewcState.fisher.clear();
83
+ this.ewcState.means.clear();
84
+ this.status = 'unloaded';
85
+ }
86
+ isReady() {
87
+ return this.status === 'ready';
88
+ }
89
+ /**
90
+ * Learn from test execution patterns
91
+ *
92
+ * Uses SONA's continuous learning to extract and store patterns
93
+ * from successful test selections.
94
+ */
95
+ async learnPatterns(patterns) {
96
+ if (!this.isReady()) {
97
+ throw new Error('SONA bridge not initialized');
98
+ }
99
+ if (patterns.length === 0)
100
+ return 0;
101
+ // Filter high-quality patterns
102
+ const goodPatterns = patterns.filter(p => p.successRate >= 0.5);
103
+ if (goodPatterns.length === 0)
104
+ return 0;
105
+ let totalImprovement = 0;
106
+ for (const pattern of goodPatterns) {
107
+ // Store pattern
108
+ const patternId = this.generatePatternId(pattern);
109
+ this.patterns.set(patternId, pattern);
110
+ // Add to embedding index
111
+ const idx = this.patternEmbeddings.length;
112
+ this.patternEmbeddings.push(pattern.embedding);
113
+ this.patternIndex.set(idx, patternId);
114
+ // Update LoRA weights based on pattern
115
+ const gradients = this.computePatternGradients(pattern);
116
+ this.updateLoRA(gradients);
117
+ totalImprovement += pattern.successRate;
118
+ }
119
+ // Update EWC state to preserve learned patterns
120
+ this.updateEWCState(goodPatterns);
121
+ return totalImprovement / goodPatterns.length;
122
+ }
123
+ /**
124
+ * Find similar patterns to a query embedding
125
+ *
126
+ * Uses approximate nearest neighbor search to find patterns
127
+ * with similar characteristics.
128
+ */
129
+ async findSimilarPatterns(query, k) {
130
+ if (!this.isReady()) {
131
+ throw new Error('SONA bridge not initialized');
132
+ }
133
+ if (this.patternEmbeddings.length === 0) {
134
+ return [];
135
+ }
136
+ // Apply LoRA transformation to query
137
+ const transformedQuery = this.applyLoRA(query);
138
+ // Compute similarities
139
+ const similarities = [];
140
+ for (let i = 0; i < this.patternEmbeddings.length; i++) {
141
+ const transformedPattern = this.applyLoRA(this.patternEmbeddings[i]);
142
+ const sim = this.cosineSimilarity(transformedQuery, transformedPattern);
143
+ similarities.push({ idx: i, sim });
144
+ }
145
+ // Sort by similarity
146
+ similarities.sort((a, b) => b.sim - a.sim);
147
+ // Return top K patterns
148
+ const results = [];
149
+ for (let i = 0; i < Math.min(k, similarities.length); i++) {
150
+ const patternId = this.patternIndex.get(similarities[i].idx);
151
+ if (patternId) {
152
+ const pattern = this.patterns.get(patternId);
153
+ if (pattern) {
154
+ results.push(pattern);
155
+ }
156
+ }
157
+ }
158
+ return results;
159
+ }
160
+ /**
161
+ * Store a single pattern
162
+ */
163
+ async storePattern(pattern) {
164
+ if (!this.isReady()) {
165
+ throw new Error('SONA bridge not initialized');
166
+ }
167
+ const patternId = this.generatePatternId(pattern);
168
+ this.patterns.set(patternId, pattern);
169
+ const idx = this.patternEmbeddings.length;
170
+ this.patternEmbeddings.push(pattern.embedding);
171
+ this.patternIndex.set(idx, patternId);
172
+ }
173
+ /**
174
+ * Get current operating mode
175
+ */
176
+ getMode() {
177
+ return this.config.mode;
178
+ }
179
+ /**
180
+ * Set operating mode
181
+ */
182
+ setMode(mode) {
183
+ this.config.mode = mode;
184
+ }
185
+ /**
186
+ * Get pattern count
187
+ */
188
+ getPatternCount() {
189
+ return this.patterns.size;
190
+ }
191
+ /**
192
+ * Predict test selection based on learned patterns
193
+ */
194
+ predictSelection(codeChanges, availableTests) {
195
+ if (!this.isReady() || this.patterns.size === 0) {
196
+ return { tests: availableTests.slice(0, 10), confidence: 0.3 };
197
+ }
198
+ // Create query embedding from code changes
199
+ const queryEmbedding = this.createQueryEmbedding(codeChanges);
200
+ // Find similar patterns
201
+ const similarPatterns = this.findSimilarPatternsSync(queryEmbedding, 5);
202
+ if (similarPatterns.length === 0) {
203
+ return { tests: availableTests.slice(0, 10), confidence: 0.3 };
204
+ }
205
+ // Aggregate test selections from similar patterns
206
+ const testScores = new Map();
207
+ for (const pattern of similarPatterns) {
208
+ const weight = pattern.successRate;
209
+ for (const test of pattern.selectedTests) {
210
+ const currentScore = testScores.get(test) || 0;
211
+ testScores.set(test, currentScore + weight);
212
+ }
213
+ }
214
+ // Sort tests by score and filter to available tests
215
+ const rankedTests = Array.from(testScores.entries())
216
+ .filter(([test]) => availableTests.includes(test))
217
+ .sort((a, b) => b[1] - a[1])
218
+ .map(([test]) => test);
219
+ const avgSuccessRate = similarPatterns.reduce((s, p) => s + p.successRate, 0) / similarPatterns.length;
220
+ return {
221
+ tests: rankedTests.slice(0, Math.max(10, Math.floor(availableTests.length * 0.2))),
222
+ confidence: avgSuccessRate,
223
+ };
224
+ }
225
+ // ============================================================================
226
+ // Private Methods
227
+ // ============================================================================
228
+ initializeMockLoRA() {
229
+ const dim = 64;
230
+ const rank = this.config.loraRank;
231
+ // Initialize LoRA matrices with small random values
232
+ const A = new Float32Array(rank * dim);
233
+ const B = new Float32Array(dim * rank);
234
+ for (let i = 0; i < A.length; i++) {
235
+ A[i] = (Math.random() - 0.5) * 0.01;
236
+ }
237
+ for (let i = 0; i < B.length; i++) {
238
+ B[i] = (Math.random() - 0.5) * 0.01;
239
+ }
240
+ this.loraWeights.A.set('default', A);
241
+ this.loraWeights.B.set('default', B);
242
+ }
243
+ generatePatternId(pattern) {
244
+ const hash = this.hashArray(pattern.embedding);
245
+ return `pattern_${hash}_${Date.now()}`;
246
+ }
247
+ hashArray(arr) {
248
+ let hash = 0;
249
+ for (let i = 0; i < arr.length; i++) {
250
+ const value = Math.floor(arr[i] * 1000);
251
+ hash = ((hash << 5) - hash) + value;
252
+ hash = hash & hash;
253
+ }
254
+ return Math.abs(hash).toString(16);
255
+ }
256
+ computePatternGradients(pattern) {
257
+ const gradients = new Float32Array(pattern.embedding.length);
258
+ // Compute gradients based on pattern quality
259
+ for (let i = 0; i < pattern.embedding.length; i++) {
260
+ // Scale gradient by success rate
261
+ gradients[i] = pattern.embedding[i] * (pattern.successRate - 0.5);
262
+ }
263
+ return gradients;
264
+ }
265
+ updateLoRA(gradients) {
266
+ const A = this.loraWeights.A.get('default');
267
+ const B = this.loraWeights.B.get('default');
268
+ if (!A || !B)
269
+ return;
270
+ const rank = this.loraWeights.rank;
271
+ const dim = gradients.length;
272
+ const lr = this.config.learningRate;
273
+ // Apply EWC penalty
274
+ const means = this.ewcState.means.get('default');
275
+ const fisher = this.ewcState.fisher.get('default');
276
+ // Update A matrix
277
+ for (let r = 0; r < rank; r++) {
278
+ for (let d = 0; d < Math.min(dim, A.length / rank); d++) {
279
+ const idx = r * dim + d;
280
+ if (idx < A.length) {
281
+ let update = lr * gradients[d];
282
+ // Apply EWC penalty if available
283
+ if (means && fisher && idx < means.length) {
284
+ const ewcPenalty = this.ewcState.lambda * fisher[idx] * (A[idx] - means[idx]);
285
+ update -= lr * ewcPenalty;
286
+ }
287
+ A[idx] += update;
288
+ }
289
+ }
290
+ }
291
+ // Update B matrix
292
+ for (let d = 0; d < Math.min(dim, B.length / rank); d++) {
293
+ for (let r = 0; r < rank; r++) {
294
+ const idx = d * rank + r;
295
+ if (idx < B.length) {
296
+ B[idx] += lr * gradients[d] * 0.1;
297
+ }
298
+ }
299
+ }
300
+ }
301
+ updateEWCState(patterns) {
302
+ if (patterns.length === 0)
303
+ return;
304
+ const A = this.loraWeights.A.get('default');
305
+ if (!A)
306
+ return;
307
+ // Compute Fisher information matrix (diagonal approximation)
308
+ const fisher = new Float32Array(A.length);
309
+ for (const pattern of patterns) {
310
+ const gradients = this.computePatternGradients(pattern);
311
+ for (let i = 0; i < Math.min(gradients.length, fisher.length); i++) {
312
+ fisher[i] += gradients[i] * gradients[i];
313
+ }
314
+ }
315
+ // Normalize
316
+ for (let i = 0; i < fisher.length; i++) {
317
+ fisher[i] /= patterns.length;
318
+ }
319
+ // Store current weights as means
320
+ const means = new Float32Array(A);
321
+ // Update or accumulate EWC state
322
+ const existingFisher = this.ewcState.fisher.get('default');
323
+ if (existingFisher) {
324
+ // Running average
325
+ for (let i = 0; i < fisher.length; i++) {
326
+ fisher[i] = 0.9 * existingFisher[i] + 0.1 * fisher[i];
327
+ }
328
+ }
329
+ this.ewcState.fisher.set('default', fisher);
330
+ this.ewcState.means.set('default', means);
331
+ }
332
+ applyLoRA(input) {
333
+ const A = this.loraWeights.A.get('default');
334
+ const B = this.loraWeights.B.get('default');
335
+ if (!A || !B)
336
+ return input;
337
+ const output = new Float32Array(input.length);
338
+ output.set(input);
339
+ const rank = this.loraWeights.rank;
340
+ const dim = input.length;
341
+ const alpha = this.loraWeights.alpha;
342
+ // Compute A @ input (reduce to rank)
343
+ const intermediate = new Float32Array(rank);
344
+ for (let r = 0; r < rank; r++) {
345
+ let sum = 0;
346
+ for (let d = 0; d < dim; d++) {
347
+ const idx = r * dim + d;
348
+ if (idx < A.length) {
349
+ sum += A[idx] * input[d];
350
+ }
351
+ }
352
+ intermediate[r] = sum;
353
+ }
354
+ // Compute B @ intermediate (expand back to dim)
355
+ for (let d = 0; d < dim; d++) {
356
+ let sum = 0;
357
+ for (let r = 0; r < rank; r++) {
358
+ const idx = d * rank + r;
359
+ if (idx < B.length) {
360
+ sum += B[idx] * intermediate[r];
361
+ }
362
+ }
363
+ output[d] += alpha * sum;
364
+ }
365
+ return output;
366
+ }
367
+ cosineSimilarity(a, b) {
368
+ if (a.length !== b.length)
369
+ return 0;
370
+ let dot = 0;
371
+ let normA = 0;
372
+ let normB = 0;
373
+ for (let i = 0; i < a.length; i++) {
374
+ dot += a[i] * b[i];
375
+ normA += a[i] * a[i];
376
+ normB += b[i] * b[i];
377
+ }
378
+ const denom = Math.sqrt(normA) * Math.sqrt(normB);
379
+ return denom > 0 ? dot / denom : 0;
380
+ }
381
+ createQueryEmbedding(codeChanges) {
382
+ const embedding = new Float32Array(64);
383
+ // Encode code change characteristics
384
+ embedding[0] = Math.min(codeChanges.length / 50, 1);
385
+ for (let i = 0; i < Math.min(codeChanges.length, 30); i++) {
386
+ const hash = this.hashString(codeChanges[i]);
387
+ embedding[1 + i * 2] = ((hash >> 8) & 0xFF) / 255;
388
+ if (2 + i * 2 < embedding.length) {
389
+ embedding[2 + i * 2] = (hash & 0xFF) / 255;
390
+ }
391
+ }
392
+ return embedding;
393
+ }
394
+ findSimilarPatternsSync(query, k) {
395
+ if (this.patternEmbeddings.length === 0)
396
+ return [];
397
+ const transformedQuery = this.applyLoRA(query);
398
+ const similarities = [];
399
+ for (let i = 0; i < this.patternEmbeddings.length; i++) {
400
+ const transformedPattern = this.applyLoRA(this.patternEmbeddings[i]);
401
+ const sim = this.cosineSimilarity(transformedQuery, transformedPattern);
402
+ similarities.push({ idx: i, sim });
403
+ }
404
+ similarities.sort((a, b) => b.sim - a.sim);
405
+ const results = [];
406
+ for (let i = 0; i < Math.min(k, similarities.length); i++) {
407
+ const patternId = this.patternIndex.get(similarities[i].idx);
408
+ if (patternId) {
409
+ const pattern = this.patterns.get(patternId);
410
+ if (pattern)
411
+ results.push(pattern);
412
+ }
413
+ }
414
+ return results;
415
+ }
416
+ hashString(str) {
417
+ let hash = 0;
418
+ for (let i = 0; i < str.length; i++) {
419
+ const char = str.charCodeAt(i);
420
+ hash = ((hash << 5) - hash) + char;
421
+ hash = hash & hash;
422
+ }
423
+ return Math.abs(hash);
424
+ }
425
+ }
426
+ /**
427
+ * Create a new SONA bridge instance
428
+ */
429
+ export function createTestSonaBridge(config) {
430
+ return new TestSonaBridge(config);
431
+ }
432
+ //# sourceMappingURL=sona-bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sona-bridge.js","sourceRoot":"","sources":["../../src/bridges/sona-bridge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * @claude-flow/plugin-test-intelligence
3
+ *
4
+ * AI-powered test intelligence plugin for Claude Flow V3.
5
+ *
6
+ * Features:
7
+ * - Predictive test selection using reinforcement learning
8
+ * - Flaky test detection and analysis
9
+ * - Test coverage gap identification
10
+ * - Mutation testing optimization
11
+ * - Test case generation suggestions
12
+ *
13
+ * Uses RuVector WASM packages for high-performance analysis:
14
+ * - ruvector-learning-wasm: RL-based test selection
15
+ * - SONA: Continuous pattern learning
16
+ * - micro-hnsw-wasm: Code-to-test similarity matching
17
+ */
18
+ export * from './types.js';
19
+ export { selectPredictiveTool, flakyDetectTool, coverageGapsTool, mutationOptimizeTool, generateSuggestTool, testIntelligenceTools, } from './mcp-tools.js';
20
+ export { TestLearningBridge, createTestLearningBridge } from './bridges/learning-bridge.js';
21
+ export { TestSonaBridge, createTestSonaBridge } from './bridges/sona-bridge.js';
22
+ export declare const pluginMetadata: {
23
+ name: string;
24
+ version: string;
25
+ description: string;
26
+ category: string;
27
+ tags: string[];
28
+ author: string;
29
+ license: string;
30
+ repository: string;
31
+ engines: {
32
+ 'claude-flow': string;
33
+ node: string;
34
+ };
35
+ capabilities: {
36
+ mcpTools: string[];
37
+ bridges: string[];
38
+ wasmPackages: string[];
39
+ };
40
+ performanceTargets: {
41
+ testSelection: string;
42
+ flakyDetection: string;
43
+ coverageAnalysis: string;
44
+ mutationOptimization: string;
45
+ ciTimeReduction: string;
46
+ };
47
+ };
48
+ export interface TestIntelligencePluginOptions {
49
+ learningConfig?: {
50
+ algorithm?: 'q-learning' | 'ppo' | 'decision-transformer';
51
+ learningRate?: number;
52
+ gamma?: number;
53
+ batchSize?: number;
54
+ };
55
+ sonaConfig?: {
56
+ mode?: 'real-time' | 'balanced' | 'research' | 'edge' | 'batch';
57
+ loraRank?: number;
58
+ learningRate?: number;
59
+ ewcLambda?: number;
60
+ };
61
+ selection?: {
62
+ defaultStrategy?: 'fast_feedback' | 'high_coverage' | 'risk_based' | 'balanced';
63
+ defaultConfidence?: number;
64
+ maxTests?: number;
65
+ };
66
+ flaky?: {
67
+ historyDepth?: number;
68
+ threshold?: number;
69
+ quarantineEnabled?: boolean;
70
+ };
71
+ }
72
+ /**
73
+ * Initialize the test intelligence plugin
74
+ */
75
+ export declare function initializePlugin(options?: TestIntelligencePluginOptions): Promise<{
76
+ learningBridge: InstanceType<typeof import('./bridges/learning-bridge.js').TestLearningBridge>;
77
+ sonaBridge: InstanceType<typeof import('./bridges/sona-bridge.js').TestSonaBridge>;
78
+ tools: typeof import('./mcp-tools.js').testIntelligenceTools;
79
+ }>;
80
+ /**
81
+ * Plugin entry point for Claude Flow plugin loader
82
+ */
83
+ declare const _default: {
84
+ metadata: {
85
+ name: string;
86
+ version: string;
87
+ description: string;
88
+ category: string;
89
+ tags: string[];
90
+ author: string;
91
+ license: string;
92
+ repository: string;
93
+ engines: {
94
+ 'claude-flow': string;
95
+ node: string;
96
+ };
97
+ capabilities: {
98
+ mcpTools: string[];
99
+ bridges: string[];
100
+ wasmPackages: string[];
101
+ };
102
+ performanceTargets: {
103
+ testSelection: string;
104
+ flakyDetection: string;
105
+ coverageAnalysis: string;
106
+ mutationOptimization: string;
107
+ ciTimeReduction: string;
108
+ };
109
+ };
110
+ initialize: typeof initializePlugin;
111
+ };
112
+ export default _default;
113
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,cAAc,YAAY,CAAC;AAG3B,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAC5F,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAGhF,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;CAmC1B,CAAC;AAGF,MAAM,WAAW,6BAA6B;IAC5C,cAAc,CAAC,EAAE;QACf,SAAS,CAAC,EAAE,YAAY,GAAG,KAAK,GAAG,sBAAsB,CAAC;QAC1D,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,UAAU,CAAC,EAAE;QACX,IAAI,CAAC,EAAE,WAAW,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,GAAG,OAAO,CAAC;QAChE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,SAAS,CAAC,EAAE;QACV,eAAe,CAAC,EAAE,eAAe,GAAG,eAAe,GAAG,YAAY,GAAG,UAAU,CAAC;QAChF,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,KAAK,CAAC,EAAE;QACN,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,iBAAiB,CAAC,EAAE,OAAO,CAAC;KAC7B,CAAC;CACH;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,CAAC,EAAE,6BAA6B,GACtC,OAAO,CAAC;IACT,cAAc,EAAE,YAAY,CAAC,cAAc,8BAA8B,EAAE,kBAAkB,CAAC,CAAC;IAC/F,UAAU,EAAE,YAAY,CAAC,cAAc,0BAA0B,EAAE,cAAc,CAAC,CAAC;IACnF,KAAK,EAAE,cAAc,gBAAgB,EAAE,qBAAqB,CAAC;CAC9D,CAAC,CAkBD;AAED;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACH,wBAGE"}
package/dist/index.js ADDED
@@ -0,0 +1,88 @@
1
+ /**
2
+ * @claude-flow/plugin-test-intelligence
3
+ *
4
+ * AI-powered test intelligence plugin for Claude Flow V3.
5
+ *
6
+ * Features:
7
+ * - Predictive test selection using reinforcement learning
8
+ * - Flaky test detection and analysis
9
+ * - Test coverage gap identification
10
+ * - Mutation testing optimization
11
+ * - Test case generation suggestions
12
+ *
13
+ * Uses RuVector WASM packages for high-performance analysis:
14
+ * - ruvector-learning-wasm: RL-based test selection
15
+ * - SONA: Continuous pattern learning
16
+ * - micro-hnsw-wasm: Code-to-test similarity matching
17
+ */
18
+ // Types
19
+ export * from './types.js';
20
+ // MCP Tools
21
+ export { selectPredictiveTool, flakyDetectTool, coverageGapsTool, mutationOptimizeTool, generateSuggestTool, testIntelligenceTools, } from './mcp-tools.js';
22
+ // Bridges
23
+ export { TestLearningBridge, createTestLearningBridge } from './bridges/learning-bridge.js';
24
+ export { TestSonaBridge, createTestSonaBridge } from './bridges/sona-bridge.js';
25
+ // Plugin metadata
26
+ export const pluginMetadata = {
27
+ name: '@claude-flow/plugin-test-intelligence',
28
+ version: '3.0.0-alpha.1',
29
+ description: 'AI-powered test intelligence for predictive selection, flaky detection, and coverage optimization',
30
+ category: 'testing',
31
+ tags: ['testing', 'ci-optimization', 'machine-learning', 'coverage', 'mutation-testing'],
32
+ author: 'Claude Flow Team',
33
+ license: 'MIT',
34
+ repository: 'https://github.com/ruvnet/claude-flow',
35
+ engines: {
36
+ 'claude-flow': '>=3.0.0-alpha.1',
37
+ node: '>=18.0.0',
38
+ },
39
+ capabilities: {
40
+ mcpTools: [
41
+ 'test/select-predictive',
42
+ 'test/flaky-detect',
43
+ 'test/coverage-gaps',
44
+ 'test/mutation-optimize',
45
+ 'test/generate-suggest',
46
+ ],
47
+ bridges: ['learning', 'sona'],
48
+ wasmPackages: [
49
+ 'ruvector-learning-wasm',
50
+ 'micro-hnsw-wasm',
51
+ 'sona',
52
+ ],
53
+ },
54
+ performanceTargets: {
55
+ testSelection: '<1s for 10K tests',
56
+ flakyDetection: '<5s for 1000 test runs',
57
+ coverageAnalysis: '<10s for 100K LOC',
58
+ mutationOptimization: '80% score in 20% time',
59
+ ciTimeReduction: '60-80%',
60
+ },
61
+ };
62
+ /**
63
+ * Initialize the test intelligence plugin
64
+ */
65
+ export async function initializePlugin(options) {
66
+ const { createTestLearningBridge } = await import('./bridges/learning-bridge.js');
67
+ const { createTestSonaBridge } = await import('./bridges/sona-bridge.js');
68
+ const { testIntelligenceTools } = await import('./mcp-tools.js');
69
+ const learningBridge = createTestLearningBridge(options?.learningConfig);
70
+ const sonaBridge = createTestSonaBridge(options?.sonaConfig);
71
+ await Promise.all([
72
+ learningBridge.init(),
73
+ sonaBridge.init(),
74
+ ]);
75
+ return {
76
+ learningBridge,
77
+ sonaBridge,
78
+ tools: testIntelligenceTools,
79
+ };
80
+ }
81
+ /**
82
+ * Plugin entry point for Claude Flow plugin loader
83
+ */
84
+ export default {
85
+ metadata: pluginMetadata,
86
+ initialize: initializePlugin,
87
+ };
88
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,QAAQ;AACR,cAAc,YAAY,CAAC;AAE3B,YAAY;AACZ,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AAExB,UAAU;AACV,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAC5F,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhF,kBAAkB;AAClB,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,IAAI,EAAE,uCAAuC;IAC7C,OAAO,EAAE,eAAe;IACxB,WAAW,EAAE,mGAAmG;IAChH,QAAQ,EAAE,SAAS;IACnB,IAAI,EAAE,CAAC,SAAS,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,UAAU,EAAE,kBAAkB,CAAC;IACxF,MAAM,EAAE,kBAAkB;IAC1B,OAAO,EAAE,KAAK;IACd,UAAU,EAAE,uCAAuC;IACnD,OAAO,EAAE;QACP,aAAa,EAAE,iBAAiB;QAChC,IAAI,EAAE,UAAU;KACjB;IACD,YAAY,EAAE;QACZ,QAAQ,EAAE;YACR,wBAAwB;YACxB,mBAAmB;YACnB,oBAAoB;YACpB,wBAAwB;YACxB,uBAAuB;SACxB;QACD,OAAO,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC;QAC7B,YAAY,EAAE;YACZ,wBAAwB;YACxB,iBAAiB;YACjB,MAAM;SACP;KACF;IACD,kBAAkB,EAAE;QAClB,aAAa,EAAE,mBAAmB;QAClC,cAAc,EAAE,wBAAwB;QACxC,gBAAgB,EAAE,mBAAmB;QACrC,oBAAoB,EAAE,uBAAuB;QAC7C,eAAe,EAAE,QAAQ;KAC1B;CACF,CAAC;AA4BF;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAAuC;IAMvC,MAAM,EAAE,wBAAwB,EAAE,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAC;IAClF,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;IAC1E,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAEjE,MAAM,cAAc,GAAG,wBAAwB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IACzE,MAAM,UAAU,GAAG,oBAAoB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAE7D,MAAM,OAAO,CAAC,GAAG,CAAC;QAChB,cAAc,CAAC,IAAI,EAAE;QACrB,UAAU,CAAC,IAAI,EAAE;KAClB,CAAC,CAAC;IAEH,OAAO;QACL,cAAc;QACd,UAAU;QACV,KAAK,EAAE,qBAAqB;KAC7B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,eAAe;IACb,QAAQ,EAAE,cAAc;IACxB,UAAU,EAAE,gBAAgB;CAC7B,CAAC"}