@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.
- package/dist/compression/index.d.ts +7 -0
- package/dist/compression/index.d.ts.map +1 -0
- package/dist/compression/index.js +7 -0
- package/dist/compression/index.js.map +1 -0
- package/dist/compression/pattern-compressor.d.ts +111 -0
- package/dist/compression/pattern-compressor.d.ts.map +1 -0
- package/dist/compression/pattern-compressor.js +307 -0
- package/dist/compression/pattern-compressor.js.map +1 -0
- package/dist/compression/quality-evaluator.d.ts +97 -0
- package/dist/compression/quality-evaluator.d.ts.map +1 -0
- package/dist/compression/quality-evaluator.js +210 -0
- package/dist/compression/quality-evaluator.js.map +1 -0
- package/dist/extractor/anti-unifier.d.ts +63 -0
- package/dist/extractor/anti-unifier.d.ts.map +1 -0
- package/dist/extractor/anti-unifier.js +167 -0
- package/dist/extractor/anti-unifier.js.map +1 -0
- package/dist/extractor/index.d.ts +9 -0
- package/dist/extractor/index.d.ts.map +1 -0
- package/dist/extractor/index.js +9 -0
- package/dist/extractor/index.js.map +1 -0
- package/dist/extractor/pattern-extractor.d.ts +58 -0
- package/dist/extractor/pattern-extractor.d.ts.map +1 -0
- package/dist/extractor/pattern-extractor.js +201 -0
- package/dist/extractor/pattern-extractor.js.map +1 -0
- package/dist/extractor/subtree-finder.d.ts +81 -0
- package/dist/extractor/subtree-finder.d.ts.map +1 -0
- package/dist/extractor/subtree-finder.js +155 -0
- package/dist/extractor/subtree-finder.js.map +1 -0
- package/dist/extractor/typescript-parser.d.ts +91 -0
- package/dist/extractor/typescript-parser.d.ts.map +1 -0
- package/dist/extractor/typescript-parser.js +219 -0
- package/dist/extractor/typescript-parser.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/learning/index.d.ts +6 -0
- package/dist/learning/index.d.ts.map +1 -0
- package/dist/learning/index.js +6 -0
- package/dist/learning/index.js.map +1 -0
- package/dist/learning/wake-sleep.d.ts +144 -0
- package/dist/learning/wake-sleep.d.ts.map +1 -0
- package/dist/learning/wake-sleep.js +312 -0
- package/dist/learning/wake-sleep.js.map +1 -0
- package/dist/library/index.d.ts +6 -0
- package/dist/library/index.d.ts.map +1 -0
- package/dist/library/index.js +6 -0
- package/dist/library/index.js.map +1 -0
- package/dist/library/pattern-library.d.ts +59 -0
- package/dist/library/pattern-library.d.ts.map +1 -0
- package/dist/library/pattern-library.js +139 -0
- package/dist/library/pattern-library.js.map +1 -0
- package/dist/privacy/index.d.ts +6 -0
- package/dist/privacy/index.d.ts.map +1 -0
- package/dist/privacy/index.js +6 -0
- package/dist/privacy/index.js.map +1 -0
- package/dist/privacy/privacy-filter.d.ts +46 -0
- package/dist/privacy/privacy-filter.d.ts.map +1 -0
- package/dist/privacy/privacy-filter.js +105 -0
- package/dist/privacy/privacy-filter.js.map +1 -0
- package/dist/types.d.ts +89 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- 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 @@
|
|
|
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"}
|