@nahisaho/musubix-pattern-mcp 1.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 (65) hide show
  1. package/dist/compression/index.d.ts +7 -0
  2. package/dist/compression/index.d.ts.map +1 -0
  3. package/dist/compression/index.js +7 -0
  4. package/dist/compression/index.js.map +1 -0
  5. package/dist/compression/pattern-compressor.d.ts +111 -0
  6. package/dist/compression/pattern-compressor.d.ts.map +1 -0
  7. package/dist/compression/pattern-compressor.js +307 -0
  8. package/dist/compression/pattern-compressor.js.map +1 -0
  9. package/dist/compression/quality-evaluator.d.ts +97 -0
  10. package/dist/compression/quality-evaluator.d.ts.map +1 -0
  11. package/dist/compression/quality-evaluator.js +210 -0
  12. package/dist/compression/quality-evaluator.js.map +1 -0
  13. package/dist/extractor/anti-unifier.d.ts +63 -0
  14. package/dist/extractor/anti-unifier.d.ts.map +1 -0
  15. package/dist/extractor/anti-unifier.js +167 -0
  16. package/dist/extractor/anti-unifier.js.map +1 -0
  17. package/dist/extractor/index.d.ts +9 -0
  18. package/dist/extractor/index.d.ts.map +1 -0
  19. package/dist/extractor/index.js +9 -0
  20. package/dist/extractor/index.js.map +1 -0
  21. package/dist/extractor/pattern-extractor.d.ts +58 -0
  22. package/dist/extractor/pattern-extractor.d.ts.map +1 -0
  23. package/dist/extractor/pattern-extractor.js +201 -0
  24. package/dist/extractor/pattern-extractor.js.map +1 -0
  25. package/dist/extractor/subtree-finder.d.ts +81 -0
  26. package/dist/extractor/subtree-finder.d.ts.map +1 -0
  27. package/dist/extractor/subtree-finder.js +155 -0
  28. package/dist/extractor/subtree-finder.js.map +1 -0
  29. package/dist/extractor/typescript-parser.d.ts +91 -0
  30. package/dist/extractor/typescript-parser.d.ts.map +1 -0
  31. package/dist/extractor/typescript-parser.js +219 -0
  32. package/dist/extractor/typescript-parser.js.map +1 -0
  33. package/dist/index.d.ts +13 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js +19 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/learning/index.d.ts +6 -0
  38. package/dist/learning/index.d.ts.map +1 -0
  39. package/dist/learning/index.js +6 -0
  40. package/dist/learning/index.js.map +1 -0
  41. package/dist/learning/wake-sleep.d.ts +144 -0
  42. package/dist/learning/wake-sleep.d.ts.map +1 -0
  43. package/dist/learning/wake-sleep.js +312 -0
  44. package/dist/learning/wake-sleep.js.map +1 -0
  45. package/dist/library/index.d.ts +6 -0
  46. package/dist/library/index.d.ts.map +1 -0
  47. package/dist/library/index.js +6 -0
  48. package/dist/library/index.js.map +1 -0
  49. package/dist/library/pattern-library.d.ts +59 -0
  50. package/dist/library/pattern-library.d.ts.map +1 -0
  51. package/dist/library/pattern-library.js +139 -0
  52. package/dist/library/pattern-library.js.map +1 -0
  53. package/dist/privacy/index.d.ts +6 -0
  54. package/dist/privacy/index.d.ts.map +1 -0
  55. package/dist/privacy/index.js +6 -0
  56. package/dist/privacy/index.js.map +1 -0
  57. package/dist/privacy/privacy-filter.d.ts +46 -0
  58. package/dist/privacy/privacy-filter.d.ts.map +1 -0
  59. package/dist/privacy/privacy-filter.js +105 -0
  60. package/dist/privacy/privacy-filter.js.map +1 -0
  61. package/dist/types.d.ts +89 -0
  62. package/dist/types.d.ts.map +1 -0
  63. package/dist/types.js +6 -0
  64. package/dist/types.js.map +1 -0
  65. package/package.json +47 -0
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @fileoverview Compression module exports
3
+ * @traceability TSK-PATTERN-002
4
+ */
5
+ export { PatternCompressor, type MDLConfig, type MDLScore, type LibraryEntry } from './pattern-compressor.js';
6
+ export { PatternQualityEvaluator, type PatternQuality, type QualityConfig } from './quality-evaluator.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/compression/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAE,KAAK,SAAS,EAAE,KAAK,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC9G,OAAO,EAAE,uBAAuB,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @fileoverview Compression module exports
3
+ * @traceability TSK-PATTERN-002
4
+ */
5
+ export { PatternCompressor } from './pattern-compressor.js';
6
+ export { PatternQualityEvaluator } from './quality-evaluator.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/compression/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAoD,MAAM,yBAAyB,CAAC;AAC9G,OAAO,EAAE,uBAAuB,EAA2C,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * @fileoverview Pattern compression using MDL (Minimum Description Length)
3
+ * @traceability TSK-PATTERN-002, REQ-PATTERN-001-F002
4
+ */
5
+ import type { ASTNode, Pattern } from '../types.js';
6
+ /**
7
+ * MDL scoring configuration
8
+ */
9
+ export interface MDLConfig {
10
+ /** Weight for library size */
11
+ libraryWeight: number;
12
+ /** Weight for encoding cost */
13
+ encodingWeight: number;
14
+ /** Minimum compression ratio to accept abstraction */
15
+ minCompressionRatio: number;
16
+ }
17
+ /**
18
+ * MDL score result
19
+ */
20
+ export interface MDLScore {
21
+ /** Total MDL score (lower is better) */
22
+ total: number;
23
+ /** Library description length */
24
+ libraryLength: number;
25
+ /** Data encoding length given library */
26
+ encodingLength: number;
27
+ /** Compression ratio vs raw */
28
+ compressionRatio: number;
29
+ }
30
+ /**
31
+ * Pattern library entry
32
+ */
33
+ export interface LibraryEntry {
34
+ pattern: Pattern;
35
+ usageCount: number;
36
+ compressionGain: number;
37
+ }
38
+ /**
39
+ * Pattern compression using MDL principle
40
+ *
41
+ * @description
42
+ * Implements DreamCoder-style compression using MDL:
43
+ * - Library = set of reusable patterns
44
+ * - Goal: minimize |Library| + |Data given Library|
45
+ */
46
+ export declare class PatternCompressor {
47
+ private config;
48
+ private library;
49
+ constructor(config?: Partial<MDLConfig>);
50
+ /**
51
+ * Calculate MDL score for a set of patterns
52
+ */
53
+ calculateMDL(patterns: Pattern[], data: ASTNode[]): MDLScore;
54
+ /**
55
+ * Calculate library description length
56
+ */
57
+ private calculateLibraryLength;
58
+ /**
59
+ * Calculate encoding length given library
60
+ */
61
+ private calculateEncodingLength;
62
+ /**
63
+ * Calculate raw description length (no library)
64
+ */
65
+ private calculateRawLength;
66
+ /**
67
+ * Calculate AST complexity (node count + depth penalty)
68
+ */
69
+ private astComplexity;
70
+ /**
71
+ * Find patterns that match an AST
72
+ */
73
+ private findMatches;
74
+ /**
75
+ * Match pattern against AST
76
+ */
77
+ private matchPattern;
78
+ /**
79
+ * Compress library by merging similar patterns
80
+ */
81
+ compressLibrary(patterns: Pattern[]): Pattern[];
82
+ /**
83
+ * Try to merge two patterns
84
+ */
85
+ private tryMerge;
86
+ /**
87
+ * Merge two ASTs, creating holes for differences
88
+ */
89
+ private mergeAsts;
90
+ /**
91
+ * Extract holes from merged AST
92
+ */
93
+ private extractHolesFromMerged;
94
+ /**
95
+ * Add pattern to library
96
+ */
97
+ addToLibrary(pattern: Pattern): void;
98
+ /**
99
+ * Get library entries sorted by usage
100
+ */
101
+ getLibrary(): LibraryEntry[];
102
+ /**
103
+ * Clear library
104
+ */
105
+ clearLibrary(): void;
106
+ /**
107
+ * Get library size
108
+ */
109
+ get librarySize(): number;
110
+ }
111
+ //# sourceMappingURL=pattern-compressor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern-compressor.d.ts","sourceRoot":"","sources":["../../src/compression/pattern-compressor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEpD;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,8BAA8B;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,+BAA+B;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,sDAAsD;IACtD,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,wCAAwC;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,iCAAiC;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,yCAAyC;IACzC,cAAc,EAAE,MAAM,CAAC;IACvB,+BAA+B;IAC/B,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;GAOG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,OAAO,CAAwC;gBAE3C,MAAM,GAAE,OAAO,CAAC,SAAS,CAAM;IAQ3C;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,QAAQ;IAwB5D;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAc9B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAqB/B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAI1B;;OAEG;IACH,OAAO,CAAC,aAAa;IAmBrB;;OAEG;IACH,OAAO,CAAC,WAAW;IA0BnB;;OAEG;IACH,OAAO,CAAC,YAAY;IA6CpB;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE;IAsC/C;;OAEG;IACH,OAAO,CAAC,QAAQ;IAuBhB;;OAEG;IACH,OAAO,CAAC,SAAS;IAgDjB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAmB9B;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAQpC;;OAEG;IACH,UAAU,IAAI,YAAY,EAAE;IAK5B;;OAEG;IACH,YAAY,IAAI,IAAI;IAIpB;;OAEG;IACH,IAAI,WAAW,IAAI,MAAM,CAExB;CACF"}
@@ -0,0 +1,307 @@
1
+ /**
2
+ * @fileoverview Pattern compression using MDL (Minimum Description Length)
3
+ * @traceability TSK-PATTERN-002, REQ-PATTERN-001-F002
4
+ */
5
+ /**
6
+ * Pattern compression using MDL principle
7
+ *
8
+ * @description
9
+ * Implements DreamCoder-style compression using MDL:
10
+ * - Library = set of reusable patterns
11
+ * - Goal: minimize |Library| + |Data given Library|
12
+ */
13
+ export class PatternCompressor {
14
+ config;
15
+ library = new Map();
16
+ constructor(config = {}) {
17
+ this.config = {
18
+ libraryWeight: config.libraryWeight ?? 1.0,
19
+ encodingWeight: config.encodingWeight ?? 1.0,
20
+ minCompressionRatio: config.minCompressionRatio ?? 1.1,
21
+ };
22
+ }
23
+ /**
24
+ * Calculate MDL score for a set of patterns
25
+ */
26
+ calculateMDL(patterns, data) {
27
+ // Library description length: sum of pattern complexities
28
+ const libraryLength = this.calculateLibraryLength(patterns);
29
+ // Encoding length: cost to describe data using library
30
+ const encodingLength = this.calculateEncodingLength(patterns, data);
31
+ // Raw description length (without library)
32
+ const rawLength = this.calculateRawLength(data);
33
+ const total = this.config.libraryWeight * libraryLength +
34
+ this.config.encodingWeight * encodingLength;
35
+ const compressionRatio = rawLength / (libraryLength + encodingLength);
36
+ return {
37
+ total,
38
+ libraryLength,
39
+ encodingLength,
40
+ compressionRatio,
41
+ };
42
+ }
43
+ /**
44
+ * Calculate library description length
45
+ */
46
+ calculateLibraryLength(patterns) {
47
+ let length = 0;
48
+ for (const pattern of patterns) {
49
+ // Cost of pattern structure
50
+ length += this.astComplexity(pattern.ast);
51
+ // Cost of holes (each hole adds to description)
52
+ length += pattern.holes.length * 2;
53
+ }
54
+ return length;
55
+ }
56
+ /**
57
+ * Calculate encoding length given library
58
+ */
59
+ calculateEncodingLength(patterns, data) {
60
+ let totalLength = 0;
61
+ for (const ast of data) {
62
+ // Find best matching pattern
63
+ const matches = this.findMatches(patterns, ast);
64
+ if (matches.length > 0) {
65
+ // Cost = log(pattern index) + cost of hole bindings
66
+ const bestMatch = matches[0];
67
+ totalLength += Math.log2(patterns.length + 1); // Pattern selection
68
+ totalLength += bestMatch.bindingCost; // Hole binding cost
69
+ }
70
+ else {
71
+ // No pattern matches - use raw encoding
72
+ totalLength += this.astComplexity(ast);
73
+ }
74
+ }
75
+ return totalLength;
76
+ }
77
+ /**
78
+ * Calculate raw description length (no library)
79
+ */
80
+ calculateRawLength(data) {
81
+ return data.reduce((sum, ast) => sum + this.astComplexity(ast), 0);
82
+ }
83
+ /**
84
+ * Calculate AST complexity (node count + depth penalty)
85
+ */
86
+ astComplexity(ast, depth = 0) {
87
+ let complexity = 1 + depth * 0.1; // Base + depth penalty
88
+ // Type complexity
89
+ complexity += ast.type.length * 0.1;
90
+ // Value complexity
91
+ if (ast.value !== undefined) {
92
+ complexity += String(ast.value).length * 0.05;
93
+ }
94
+ // Recursive children
95
+ for (const child of ast.children) {
96
+ complexity += this.astComplexity(child, depth + 1);
97
+ }
98
+ return complexity;
99
+ }
100
+ /**
101
+ * Find patterns that match an AST
102
+ */
103
+ findMatches(patterns, ast) {
104
+ const matches = [];
105
+ for (const pattern of patterns) {
106
+ const result = this.matchPattern(pattern.ast, ast);
107
+ if (result.matches) {
108
+ matches.push({
109
+ patternId: pattern.id,
110
+ bindingCost: result.bindingCost,
111
+ bindings: result.bindings,
112
+ });
113
+ }
114
+ }
115
+ // Sort by binding cost (lower is better)
116
+ return matches.sort((a, b) => a.bindingCost - b.bindingCost);
117
+ }
118
+ /**
119
+ * Match pattern against AST
120
+ */
121
+ matchPattern(pattern, target) {
122
+ const bindings = new Map();
123
+ let bindingCost = 0;
124
+ const match = (p, t) => {
125
+ // Hole matches anything
126
+ if (p.type === 'Hole') {
127
+ const holeId = p.value;
128
+ bindings.set(holeId, t);
129
+ bindingCost += this.astComplexity(t);
130
+ return true;
131
+ }
132
+ // Type must match
133
+ if (p.type !== t.type) {
134
+ return false;
135
+ }
136
+ // Value must match if present
137
+ if (p.value !== undefined && p.value !== t.value) {
138
+ return false;
139
+ }
140
+ // Children must match
141
+ if (p.children.length !== t.children.length) {
142
+ return false;
143
+ }
144
+ for (let i = 0; i < p.children.length; i++) {
145
+ if (!match(p.children[i], t.children[i])) {
146
+ return false;
147
+ }
148
+ }
149
+ return true;
150
+ };
151
+ const matches = match(pattern, target);
152
+ return { matches, bindingCost, bindings };
153
+ }
154
+ /**
155
+ * Compress library by merging similar patterns
156
+ */
157
+ compressLibrary(patterns) {
158
+ if (patterns.length < 2)
159
+ return patterns;
160
+ const compressed = [];
161
+ const merged = new Set();
162
+ for (let i = 0; i < patterns.length; i++) {
163
+ if (merged.has(patterns[i].id))
164
+ continue;
165
+ let bestMerge = null;
166
+ let bestScore = Infinity;
167
+ for (let j = i + 1; j < patterns.length; j++) {
168
+ if (merged.has(patterns[j].id))
169
+ continue;
170
+ // Try merging i and j
171
+ const mergedPattern = this.tryMerge(patterns[i], patterns[j]);
172
+ if (mergedPattern) {
173
+ const beforeMDL = this.calculateMDL([patterns[i], patterns[j]], []);
174
+ const afterMDL = this.calculateMDL([mergedPattern], []);
175
+ if (afterMDL.total < beforeMDL.total && afterMDL.compressionRatio >= this.config.minCompressionRatio) {
176
+ if (afterMDL.total < bestScore) {
177
+ bestScore = afterMDL.total;
178
+ bestMerge = mergedPattern;
179
+ merged.add(patterns[j].id);
180
+ }
181
+ }
182
+ }
183
+ }
184
+ compressed.push(bestMerge ?? patterns[i]);
185
+ merged.add(patterns[i].id);
186
+ }
187
+ return compressed;
188
+ }
189
+ /**
190
+ * Try to merge two patterns
191
+ */
192
+ tryMerge(a, b) {
193
+ // Simple structural merge - if same type, create pattern with holes for differences
194
+ if (a.ast.type !== b.ast.type) {
195
+ return null;
196
+ }
197
+ const mergedAst = this.mergeAsts(a.ast, b.ast);
198
+ if (!mergedAst)
199
+ return null;
200
+ const holes = this.extractHolesFromMerged(mergedAst);
201
+ return {
202
+ id: `merged-${Date.now()}`,
203
+ name: `merged_${a.name}_${b.name}`,
204
+ language: a.language,
205
+ ast: mergedAst,
206
+ holes,
207
+ frequency: a.frequency + b.frequency,
208
+ createdAt: new Date().toISOString(),
209
+ updatedAt: new Date().toISOString(),
210
+ };
211
+ }
212
+ /**
213
+ * Merge two ASTs, creating holes for differences
214
+ */
215
+ mergeAsts(a, b) {
216
+ const defaultPos = { row: 0, column: 0 };
217
+ // Different types - create hole
218
+ if (a.type !== b.type) {
219
+ return {
220
+ type: 'Hole',
221
+ value: `H${Date.now()}`,
222
+ children: [],
223
+ startPosition: defaultPos,
224
+ endPosition: defaultPos,
225
+ };
226
+ }
227
+ // Same type - check children
228
+ const children = [];
229
+ const maxChildren = Math.max(a.children.length, b.children.length);
230
+ for (let i = 0; i < maxChildren; i++) {
231
+ const childA = a.children[i];
232
+ const childB = b.children[i];
233
+ if (!childA || !childB) {
234
+ // Optional child - create hole
235
+ children.push({
236
+ type: 'Hole',
237
+ value: `H${Date.now()}_${i}`,
238
+ children: [],
239
+ startPosition: defaultPos,
240
+ endPosition: defaultPos,
241
+ });
242
+ }
243
+ else {
244
+ const merged = this.mergeAsts(childA, childB);
245
+ if (merged) {
246
+ children.push(merged);
247
+ }
248
+ }
249
+ }
250
+ return {
251
+ type: a.type,
252
+ value: a.value === b.value ? a.value : undefined,
253
+ children,
254
+ startPosition: a.startPosition,
255
+ endPosition: b.endPosition,
256
+ };
257
+ }
258
+ /**
259
+ * Extract holes from merged AST
260
+ */
261
+ extractHolesFromMerged(ast) {
262
+ const holes = [];
263
+ const traverse = (node) => {
264
+ if (node.type === 'Hole' && node.value) {
265
+ holes.push({
266
+ id: String(node.value),
267
+ type: 'any',
268
+ });
269
+ }
270
+ for (const child of node.children) {
271
+ traverse(child);
272
+ }
273
+ };
274
+ traverse(ast);
275
+ return holes;
276
+ }
277
+ /**
278
+ * Add pattern to library
279
+ */
280
+ addToLibrary(pattern) {
281
+ this.library.set(pattern.id, {
282
+ pattern,
283
+ usageCount: pattern.frequency,
284
+ compressionGain: 0,
285
+ });
286
+ }
287
+ /**
288
+ * Get library entries sorted by usage
289
+ */
290
+ getLibrary() {
291
+ return Array.from(this.library.values())
292
+ .sort((a, b) => b.usageCount - a.usageCount);
293
+ }
294
+ /**
295
+ * Clear library
296
+ */
297
+ clearLibrary() {
298
+ this.library.clear();
299
+ }
300
+ /**
301
+ * Get library size
302
+ */
303
+ get librarySize() {
304
+ return this.library.size;
305
+ }
306
+ }
307
+ //# sourceMappingURL=pattern-compressor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern-compressor.js","sourceRoot":"","sources":["../../src/compression/pattern-compressor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * @fileoverview Pattern quality evaluator
3
+ * @traceability TSK-PATTERN-002, REQ-PATTERN-001-F002
4
+ */
5
+ import type { Pattern } from '../types.js';
6
+ /**
7
+ * Quality metrics for a pattern
8
+ */
9
+ export interface PatternQuality {
10
+ /** Overall quality score 0-1 */
11
+ score: number;
12
+ /** Generality: how abstractable is the pattern */
13
+ generality: number;
14
+ /** Specificity: how precisely does it match */
15
+ specificity: number;
16
+ /** Utility: how useful for code generation */
17
+ utility: number;
18
+ /** Stability: how consistent across codebases */
19
+ stability: number;
20
+ }
21
+ /**
22
+ * Quality evaluation configuration
23
+ */
24
+ export interface QualityConfig {
25
+ /** Minimum frequency for high utility */
26
+ minFrequency: number;
27
+ /** Maximum holes for high specificity */
28
+ maxHoles: number;
29
+ /** Ideal depth range for quality patterns */
30
+ idealDepthRange: [number, number];
31
+ }
32
+ /**
33
+ * Pattern quality evaluator
34
+ *
35
+ * @description
36
+ * Evaluates pattern quality based on:
37
+ * - Generality: abstractness level (holes vs concrete)
38
+ * - Specificity: how precise the pattern is
39
+ * - Utility: usefulness based on frequency and coverage
40
+ * - Stability: consistency of the pattern
41
+ */
42
+ export declare class PatternQualityEvaluator {
43
+ private config;
44
+ constructor(config?: Partial<QualityConfig>);
45
+ /**
46
+ * Evaluate overall pattern quality
47
+ */
48
+ evaluate(pattern: Pattern): PatternQuality;
49
+ /**
50
+ * Evaluate pattern generality (abstractness)
51
+ */
52
+ private evaluateGenerality;
53
+ /**
54
+ * Evaluate pattern specificity
55
+ */
56
+ private evaluateSpecificity;
57
+ /**
58
+ * Evaluate pattern utility
59
+ */
60
+ private evaluateUtility;
61
+ /**
62
+ * Evaluate pattern stability
63
+ */
64
+ private evaluateStability;
65
+ /**
66
+ * Count total nodes in AST
67
+ */
68
+ private countNodes;
69
+ /**
70
+ * Calculate AST depth
71
+ */
72
+ private calculateDepth;
73
+ /**
74
+ * Get utility score for AST node type
75
+ */
76
+ private getTypeUtility;
77
+ /**
78
+ * Check if children have consistent types
79
+ */
80
+ private hasConsistentChildTypes;
81
+ /**
82
+ * Check if pattern has ambiguous holes
83
+ */
84
+ private hasAmbiguousHoles;
85
+ /**
86
+ * Rank patterns by quality
87
+ */
88
+ rankPatterns(patterns: Pattern[]): Array<{
89
+ pattern: Pattern;
90
+ quality: PatternQuality;
91
+ }>;
92
+ /**
93
+ * Filter patterns by minimum quality
94
+ */
95
+ filterByQuality(patterns: Pattern[], minScore: number): Pattern[];
96
+ }
97
+ //# sourceMappingURL=quality-evaluator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quality-evaluator.d.ts","sourceRoot":"","sources":["../../src/compression/quality-evaluator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAW,OAAO,EAAE,MAAM,aAAa,CAAC;AAEpD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,gCAAgC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,kDAAkD;IAClD,UAAU,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,WAAW,EAAE,MAAM,CAAC;IACpB,8CAA8C;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,yCAAyC;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,6CAA6C;IAC7C,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED;;;;;;;;;GASG;AACH,qBAAa,uBAAuB;IAClC,OAAO,CAAC,MAAM,CAAgB;gBAElB,MAAM,GAAE,OAAO,CAAC,aAAa,CAAM;IAQ/C;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,cAAc;IAuB1C;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAmB1B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAyB3B;;OAEG;IACH,OAAO,CAAC,eAAe;IAevB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAkBzB;;OAEG;IACH,OAAO,CAAC,UAAU;IAQlB;;OAEG;IACH,OAAO,CAAC,cAAc;IAKtB;;OAEG;IACH,OAAO,CAAC,cAAc;IA0BtB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAc/B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAMzB;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,cAAc,CAAA;KAAE,CAAC;IASvF;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,EAAE;CAGlE"}