@nahisaho/musubix-synthesis 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/README.md +100 -0
  2. package/dist/dsl/DSL.d.ts +73 -0
  3. package/dist/dsl/DSL.d.ts.map +1 -0
  4. package/dist/dsl/DSL.js +250 -0
  5. package/dist/dsl/DSL.js.map +1 -0
  6. package/dist/dsl/DSLBuilder.d.ts +33 -0
  7. package/dist/dsl/DSLBuilder.d.ts.map +1 -0
  8. package/dist/dsl/DSLBuilder.js +51 -0
  9. package/dist/dsl/DSLBuilder.js.map +1 -0
  10. package/dist/dsl/TypeSystem.d.ts +51 -0
  11. package/dist/dsl/TypeSystem.d.ts.map +1 -0
  12. package/dist/dsl/TypeSystem.js +253 -0
  13. package/dist/dsl/TypeSystem.js.map +1 -0
  14. package/dist/dsl/index.d.ts +8 -0
  15. package/dist/dsl/index.d.ts.map +1 -0
  16. package/dist/dsl/index.js +8 -0
  17. package/dist/dsl/index.js.map +1 -0
  18. package/dist/errors.d.ts +93 -0
  19. package/dist/errors.d.ts.map +1 -0
  20. package/dist/errors.js +142 -0
  21. package/dist/errors.js.map +1 -0
  22. package/dist/index.d.ts +11 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +16 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/rules/MetaLearner.d.ts +50 -0
  27. package/dist/rules/MetaLearner.d.ts.map +1 -0
  28. package/dist/rules/MetaLearner.js +144 -0
  29. package/dist/rules/MetaLearner.js.map +1 -0
  30. package/dist/rules/RuleExtractor.d.ts +69 -0
  31. package/dist/rules/RuleExtractor.d.ts.map +1 -0
  32. package/dist/rules/RuleExtractor.js +290 -0
  33. package/dist/rules/RuleExtractor.js.map +1 -0
  34. package/dist/rules/RuleLibrary.d.ts +55 -0
  35. package/dist/rules/RuleLibrary.d.ts.map +1 -0
  36. package/dist/rules/RuleLibrary.js +190 -0
  37. package/dist/rules/RuleLibrary.js.map +1 -0
  38. package/dist/rules/index.d.ts +9 -0
  39. package/dist/rules/index.d.ts.map +1 -0
  40. package/dist/rules/index.js +9 -0
  41. package/dist/rules/index.js.map +1 -0
  42. package/dist/synthesis/Enumerator.d.ts +78 -0
  43. package/dist/synthesis/Enumerator.d.ts.map +1 -0
  44. package/dist/synthesis/Enumerator.js +292 -0
  45. package/dist/synthesis/Enumerator.js.map +1 -0
  46. package/dist/synthesis/PBESynthesizer.d.ts +37 -0
  47. package/dist/synthesis/PBESynthesizer.d.ts.map +1 -0
  48. package/dist/synthesis/PBESynthesizer.js +187 -0
  49. package/dist/synthesis/PBESynthesizer.js.map +1 -0
  50. package/dist/synthesis/VersionSpace.d.ts +50 -0
  51. package/dist/synthesis/VersionSpace.d.ts.map +1 -0
  52. package/dist/synthesis/VersionSpace.js +102 -0
  53. package/dist/synthesis/VersionSpace.js.map +1 -0
  54. package/dist/synthesis/WitnessEngine.d.ts +64 -0
  55. package/dist/synthesis/WitnessEngine.d.ts.map +1 -0
  56. package/dist/synthesis/WitnessEngine.js +217 -0
  57. package/dist/synthesis/WitnessEngine.js.map +1 -0
  58. package/dist/synthesis/index.d.ts +9 -0
  59. package/dist/synthesis/index.d.ts.map +1 -0
  60. package/dist/synthesis/index.js +9 -0
  61. package/dist/synthesis/index.js.map +1 -0
  62. package/dist/types.d.ts +372 -0
  63. package/dist/types.d.ts.map +1 -0
  64. package/dist/types.js +7 -0
  65. package/dist/types.js.map +1 -0
  66. package/package.json +52 -0
@@ -0,0 +1,144 @@
1
+ /**
2
+ * Meta Learner
3
+ * @module @nahisaho/musubix-synthesis
4
+ * @description Continuous rule improvement and suggestions
5
+ * Traces to: REQ-SYN-004 (Rule Learning)
6
+ */
7
+ import { RuleExtractor, resetRuleIdCounter } from './RuleExtractor.js';
8
+ /**
9
+ * Meta learner implementation
10
+ */
11
+ export class MetaLearner {
12
+ library;
13
+ extractor;
14
+ pendingSuggestions;
15
+ totalLearned;
16
+ constructor(library) {
17
+ this.library = library;
18
+ this.extractor = new RuleExtractor();
19
+ this.pendingSuggestions = [];
20
+ this.totalLearned = 0;
21
+ }
22
+ /**
23
+ * Learn from synthesis result
24
+ */
25
+ async learn(result, usedRules) {
26
+ // Update confidence for used rules
27
+ for (const rule of usedRules) {
28
+ await this.library.recordUsage(rule.id, result.success);
29
+ }
30
+ // Extract new rules from successful synthesis
31
+ if (result.success && result.program) {
32
+ const newRules = this.extractor.extract({ examples: [] }, // Simplified - would need actual spec
33
+ result.program);
34
+ for (const rule of newRules) {
35
+ // Check if similar rule exists
36
+ const existing = await this.library.getAll();
37
+ if (!this.hasSimularRule(rule, existing)) {
38
+ this.pendingSuggestions.push(rule);
39
+ }
40
+ }
41
+ this.totalLearned++;
42
+ }
43
+ }
44
+ /**
45
+ * Update confidence for a rule
46
+ */
47
+ async updateConfidence(ruleId, success) {
48
+ await this.library.recordUsage(ruleId, success);
49
+ }
50
+ /**
51
+ * Suggest new rules
52
+ */
53
+ async suggestRules() {
54
+ // Generalize pending suggestions
55
+ if (this.pendingSuggestions.length > 0) {
56
+ const generalized = this.extractor.generalize(this.pendingSuggestions);
57
+ // Filter out low-confidence suggestions
58
+ const suggestions = generalized.filter((r) => r.confidence >= 0.5);
59
+ // Clear pending
60
+ this.pendingSuggestions.length = 0;
61
+ return suggestions;
62
+ }
63
+ // Analyze existing rules for generalization opportunities
64
+ const allRules = await this.library.getAll();
65
+ const opportunities = this.findGeneralizationOpportunities(allRules);
66
+ return opportunities;
67
+ }
68
+ /**
69
+ * Get total learned count
70
+ */
71
+ getTotalLearned() {
72
+ return this.totalLearned;
73
+ }
74
+ /**
75
+ * Reset state (for testing)
76
+ */
77
+ reset() {
78
+ this.pendingSuggestions.length = 0;
79
+ this.totalLearned = 0;
80
+ resetRuleIdCounter();
81
+ }
82
+ /**
83
+ * Check if similar rule exists
84
+ */
85
+ hasSimularRule(rule, existing) {
86
+ for (const r of existing) {
87
+ if (this.rulesAreSimilar(rule, r)) {
88
+ return true;
89
+ }
90
+ }
91
+ return false;
92
+ }
93
+ /**
94
+ * Check rule similarity
95
+ */
96
+ rulesAreSimilar(a, b) {
97
+ // Compare template structure
98
+ const aExpr = a.template.expression;
99
+ const bExpr = b.template.expression;
100
+ if (aExpr.kind !== bExpr.kind)
101
+ return false;
102
+ if (aExpr.kind === 'application' && bExpr.kind === 'application') {
103
+ if (aExpr.operator !== bExpr.operator)
104
+ return false;
105
+ if (aExpr.args.length !== bExpr.args.length)
106
+ return false;
107
+ return true;
108
+ }
109
+ if (aExpr.kind === 'constant' && bExpr.kind === 'constant') {
110
+ return aExpr.name === bExpr.name;
111
+ }
112
+ return false;
113
+ }
114
+ /**
115
+ * Find generalization opportunities
116
+ */
117
+ findGeneralizationOpportunities(rules) {
118
+ const opportunities = [];
119
+ // Group by operator
120
+ const byOperator = new Map();
121
+ for (const rule of rules) {
122
+ const expr = rule.template.expression;
123
+ if (expr.kind === 'application') {
124
+ const group = byOperator.get(expr.operator) ?? [];
125
+ group.push(rule);
126
+ byOperator.set(expr.operator, group);
127
+ }
128
+ }
129
+ // Look for groups with multiple similar rules
130
+ for (const [_operator, group] of byOperator) {
131
+ if (group.length >= 2) {
132
+ // Could potentially merge these
133
+ const avgConfidence = group.reduce((sum, r) => sum + r.confidence, 0) / group.length;
134
+ if (avgConfidence >= 0.7) {
135
+ // Create a generalized rule
136
+ const generalized = this.extractor.generalize(group);
137
+ opportunities.push(...generalized);
138
+ }
139
+ }
140
+ }
141
+ return opportunities;
142
+ }
143
+ }
144
+ //# sourceMappingURL=MetaLearner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MetaLearner.js","sourceRoot":"","sources":["../../src/rules/MetaLearner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Rule Extractor
3
+ * @module @nahisaho/musubix-synthesis
4
+ * @description Extract synthesis rules from successful synthesis
5
+ * Traces to: REQ-SYN-004 (Rule Learning)
6
+ */
7
+ import type { IRuleExtractor, Program, Specification, SynthesisRule } from '../types.js';
8
+ /**
9
+ * Reset rule ID counter (for testing)
10
+ */
11
+ export declare function resetRuleIdCounter(): void;
12
+ /**
13
+ * Rule extractor implementation
14
+ */
15
+ export declare class RuleExtractor implements IRuleExtractor {
16
+ /**
17
+ * Extract rules from successful synthesis
18
+ */
19
+ extract(spec: Specification, program: Program): SynthesisRule[];
20
+ /**
21
+ * Generalize multiple rules
22
+ */
23
+ generalize(rules: SynthesisRule[]): SynthesisRule[];
24
+ /**
25
+ * Extract pattern from specification
26
+ */
27
+ private extractPattern;
28
+ /**
29
+ * Extract template from program
30
+ */
31
+ private extractTemplate;
32
+ /**
33
+ * Convert expression to template with holes
34
+ */
35
+ private templatizeExpression;
36
+ /**
37
+ * Extract sub-rules from nested expressions
38
+ */
39
+ private extractSubRules;
40
+ /**
41
+ * Generate rule name from program
42
+ */
43
+ private generateRuleName;
44
+ /**
45
+ * Find common pattern in values
46
+ */
47
+ private findCommonPattern;
48
+ /**
49
+ * Find common prefix of strings
50
+ */
51
+ private findCommonPrefix;
52
+ /**
53
+ * Find common suffix of strings
54
+ */
55
+ private findCommonSuffix;
56
+ /**
57
+ * Group similar rules
58
+ */
59
+ private groupSimilarRules;
60
+ /**
61
+ * Check if two rules are similar
62
+ */
63
+ private areRulesSimilar;
64
+ /**
65
+ * Merge similar rules
66
+ */
67
+ private mergeRules;
68
+ }
69
+ //# sourceMappingURL=RuleExtractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RuleExtractor.d.ts","sourceRoot":"","sources":["../../src/rules/RuleExtractor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAGV,cAAc,EACd,OAAO,EAGP,aAAa,EACb,aAAa,EACd,MAAM,aAAa,CAAC;AAcrB;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAED;;GAEG;AACH,qBAAa,aAAc,YAAW,cAAc;IAClD;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,GAAG,aAAa,EAAE;IA6B/D;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE;IAkBnD;;OAEG;IACH,OAAO,CAAC,cAAc;IAyBtB;;OAEG;IACH,OAAO,CAAC,eAAe;IAcvB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAoC5B;;OAEG;IACH,OAAO,CAAC,eAAe;IAmBvB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAcxB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAgCzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAWxB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAWxB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAwBzB;;OAEG;IACH,OAAO,CAAC,eAAe;IAcvB;;OAEG;IACH,OAAO,CAAC,UAAU;CA6BnB"}
@@ -0,0 +1,290 @@
1
+ /**
2
+ * Rule Extractor
3
+ * @module @nahisaho/musubix-synthesis
4
+ * @description Extract synthesis rules from successful synthesis
5
+ * Traces to: REQ-SYN-004 (Rule Learning)
6
+ */
7
+ /**
8
+ * Rule ID counter
9
+ */
10
+ let ruleIdCounter = 0;
11
+ /**
12
+ * Generate rule ID
13
+ */
14
+ function generateRuleId() {
15
+ return `RULE-${String(++ruleIdCounter).padStart(3, '0')}`;
16
+ }
17
+ /**
18
+ * Reset rule ID counter (for testing)
19
+ */
20
+ export function resetRuleIdCounter() {
21
+ ruleIdCounter = 0;
22
+ }
23
+ /**
24
+ * Rule extractor implementation
25
+ */
26
+ export class RuleExtractor {
27
+ /**
28
+ * Extract rules from successful synthesis
29
+ */
30
+ extract(spec, program) {
31
+ const rules = [];
32
+ // Extract pattern from spec
33
+ const pattern = this.extractPattern(spec);
34
+ // Extract template from program
35
+ const template = this.extractTemplate(program);
36
+ // Create rule
37
+ const rule = {
38
+ id: generateRuleId(),
39
+ name: this.generateRuleName(program),
40
+ pattern,
41
+ template,
42
+ confidence: 0.5, // Initial confidence (prior)
43
+ usageCount: 0,
44
+ successCount: 0,
45
+ };
46
+ rules.push(rule);
47
+ // Also extract sub-rules from nested expressions
48
+ const subRules = this.extractSubRules(program.expression, spec);
49
+ rules.push(...subRules);
50
+ return rules;
51
+ }
52
+ /**
53
+ * Generalize multiple rules
54
+ */
55
+ generalize(rules) {
56
+ // Group similar rules
57
+ const groups = this.groupSimilarRules(rules);
58
+ const generalized = [];
59
+ for (const group of groups) {
60
+ if (group.length === 1) {
61
+ generalized.push(group[0]);
62
+ }
63
+ else {
64
+ // Merge similar rules
65
+ const merged = this.mergeRules(group);
66
+ generalized.push(merged);
67
+ }
68
+ }
69
+ return generalized;
70
+ }
71
+ /**
72
+ * Extract pattern from specification
73
+ */
74
+ extractPattern(spec) {
75
+ const examples = spec.examples;
76
+ // Try to find common patterns in inputs
77
+ const inputPattern = this.findCommonPattern(examples.map((e) => e.input));
78
+ // Try to find common patterns in outputs
79
+ const outputPattern = this.findCommonPattern(examples.map((e) => e.output));
80
+ // Count input keys from first example
81
+ const firstInput = examples[0]?.input;
82
+ const inputCount = typeof firstInput === 'object' && firstInput !== null
83
+ ? Object.keys(firstInput).length
84
+ : undefined;
85
+ return {
86
+ inputPattern,
87
+ outputPattern,
88
+ typeConstraints: spec.inputType
89
+ ? [spec.inputType, spec.outputType ?? 'any']
90
+ : undefined,
91
+ inputCount,
92
+ };
93
+ }
94
+ /**
95
+ * Extract template from program
96
+ */
97
+ extractTemplate(program) {
98
+ const holes = [];
99
+ const expression = this.templatizeExpression(program.expression, holes, []);
100
+ return {
101
+ expression,
102
+ holes,
103
+ };
104
+ }
105
+ /**
106
+ * Convert expression to template with holes
107
+ */
108
+ templatizeExpression(expr, holes, path) {
109
+ switch (expr.kind) {
110
+ case 'constant':
111
+ // Keep constants as-is
112
+ return expr;
113
+ case 'variable':
114
+ // Keep variables as-is
115
+ return expr;
116
+ case 'application':
117
+ // Recursively templatize arguments
118
+ return {
119
+ kind: 'application',
120
+ operator: expr.operator,
121
+ args: expr.args.map((arg, i) => this.templatizeExpression(arg, holes, [...path, i])),
122
+ };
123
+ case 'lambda':
124
+ // Templatize body
125
+ return {
126
+ ...expr,
127
+ body: this.templatizeExpression(expr.body, holes, [...path, 0]),
128
+ };
129
+ default:
130
+ return expr;
131
+ }
132
+ }
133
+ /**
134
+ * Extract sub-rules from nested expressions
135
+ */
136
+ extractSubRules(expr, _spec) {
137
+ const subRules = [];
138
+ if (expr.kind === 'application') {
139
+ // Create a rule for this operator application
140
+ for (const arg of expr.args) {
141
+ if (arg.kind === 'application') {
142
+ // Recursively extract from nested applications
143
+ subRules.push(...this.extractSubRules(arg, _spec));
144
+ }
145
+ }
146
+ }
147
+ return subRules;
148
+ }
149
+ /**
150
+ * Generate rule name from program
151
+ */
152
+ generateRuleName(program) {
153
+ const expr = program.expression;
154
+ if (expr.kind === 'application') {
155
+ return `${expr.operator}-rule`;
156
+ }
157
+ if (expr.kind === 'constant') {
158
+ return `const-${expr.name}-rule`;
159
+ }
160
+ if (expr.kind === 'variable') {
161
+ return `var-${expr.name}-rule`;
162
+ }
163
+ return 'anonymous-rule';
164
+ }
165
+ /**
166
+ * Find common pattern in values
167
+ */
168
+ findCommonPattern(values) {
169
+ if (values.length === 0)
170
+ return undefined;
171
+ if (values.length === 1)
172
+ return values[0];
173
+ // Check if all values are same type
174
+ const types = values.map((v) => typeof v);
175
+ if (new Set(types).size > 1) {
176
+ return { anyOf: values };
177
+ }
178
+ // For strings, try to find common structure
179
+ if (types[0] === 'string') {
180
+ const strings = values;
181
+ const commonPrefix = this.findCommonPrefix(strings);
182
+ const commonSuffix = this.findCommonSuffix(strings);
183
+ if (commonPrefix || commonSuffix) {
184
+ return { prefix: commonPrefix, suffix: commonSuffix };
185
+ }
186
+ }
187
+ // For arrays, try to find common structure
188
+ if (Array.isArray(values[0])) {
189
+ const arrays = values;
190
+ if (arrays.every((a) => a.length === arrays[0].length)) {
191
+ return { arrayLength: arrays[0].length };
192
+ }
193
+ }
194
+ return { type: types[0] };
195
+ }
196
+ /**
197
+ * Find common prefix of strings
198
+ */
199
+ findCommonPrefix(strings) {
200
+ if (strings.length === 0)
201
+ return '';
202
+ let prefix = strings[0];
203
+ for (const s of strings.slice(1)) {
204
+ while (!s.startsWith(prefix) && prefix.length > 0) {
205
+ prefix = prefix.slice(0, -1);
206
+ }
207
+ }
208
+ return prefix;
209
+ }
210
+ /**
211
+ * Find common suffix of strings
212
+ */
213
+ findCommonSuffix(strings) {
214
+ if (strings.length === 0)
215
+ return '';
216
+ let suffix = strings[0];
217
+ for (const s of strings.slice(1)) {
218
+ while (!s.endsWith(suffix) && suffix.length > 0) {
219
+ suffix = suffix.slice(1);
220
+ }
221
+ }
222
+ return suffix;
223
+ }
224
+ /**
225
+ * Group similar rules
226
+ */
227
+ groupSimilarRules(rules) {
228
+ const groups = [];
229
+ const assigned = new Set();
230
+ for (const rule of rules) {
231
+ if (assigned.has(rule.id))
232
+ continue;
233
+ const group = [rule];
234
+ assigned.add(rule.id);
235
+ for (const other of rules) {
236
+ if (assigned.has(other.id))
237
+ continue;
238
+ if (this.areRulesSimilar(rule, other)) {
239
+ group.push(other);
240
+ assigned.add(other.id);
241
+ }
242
+ }
243
+ groups.push(group);
244
+ }
245
+ return groups;
246
+ }
247
+ /**
248
+ * Check if two rules are similar
249
+ */
250
+ areRulesSimilar(a, b) {
251
+ // Check if templates have same structure
252
+ const aExpr = a.template.expression;
253
+ const bExpr = b.template.expression;
254
+ if (aExpr.kind !== bExpr.kind)
255
+ return false;
256
+ if (aExpr.kind === 'application' && bExpr.kind === 'application') {
257
+ return aExpr.operator === bExpr.operator;
258
+ }
259
+ return false;
260
+ }
261
+ /**
262
+ * Merge similar rules
263
+ */
264
+ mergeRules(rules) {
265
+ // Use the most common template
266
+ const templateCounts = new Map();
267
+ for (const rule of rules) {
268
+ const key = JSON.stringify(rule.template.expression);
269
+ templateCounts.set(key, (templateCounts.get(key) ?? 0) + 1);
270
+ }
271
+ let bestTemplate = rules[0].template;
272
+ let bestCount = 0;
273
+ for (const [key, count] of templateCounts) {
274
+ if (count > bestCount) {
275
+ bestCount = count;
276
+ bestTemplate = rules.find((r) => JSON.stringify(r.template.expression) === key).template;
277
+ }
278
+ }
279
+ return {
280
+ id: generateRuleId(),
281
+ name: `merged-${rules[0].name ?? 'rule'}`,
282
+ pattern: rules[0].pattern, // Use first pattern (could be merged)
283
+ template: bestTemplate,
284
+ confidence: rules.reduce((sum, r) => sum + r.confidence, 0) / rules.length,
285
+ usageCount: rules.reduce((sum, r) => sum + (r.usageCount ?? 0), 0),
286
+ successCount: rules.reduce((sum, r) => sum + (r.successCount ?? 0), 0),
287
+ };
288
+ }
289
+ }
290
+ //# sourceMappingURL=RuleExtractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RuleExtractor.js","sourceRoot":"","sources":["../../src/rules/RuleExtractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Rule Library
3
+ * @module @nahisaho/musubix-synthesis
4
+ * @description Storage and retrieval of synthesis rules
5
+ * Traces to: REQ-SYN-004 (Rule Learning)
6
+ */
7
+ import type { IRuleLibrary, Specification, SynthesisRule } from '../types.js';
8
+ /**
9
+ * Rule library implementation
10
+ */
11
+ export declare class RuleLibrary implements IRuleLibrary {
12
+ private rules;
13
+ constructor();
14
+ /**
15
+ * Add a rule to the library
16
+ */
17
+ add(rule: SynthesisRule): Promise<void>;
18
+ /**
19
+ * Get a rule by ID
20
+ */
21
+ get(id: string): Promise<SynthesisRule | null>;
22
+ /**
23
+ * Match rules against specification
24
+ */
25
+ match(spec: Specification): Promise<SynthesisRule[]>;
26
+ /**
27
+ * Record rule usage
28
+ */
29
+ recordUsage(ruleId: string, success: boolean): Promise<void>;
30
+ /**
31
+ * Calculate confidence from usage statistics
32
+ */
33
+ private calculateConfidence;
34
+ /**
35
+ * Prune low-confidence rules
36
+ */
37
+ prune(threshold: number): Promise<number>;
38
+ /**
39
+ * Get all rules
40
+ */
41
+ getAll(): Promise<SynthesisRule[]>;
42
+ /**
43
+ * Check if rule matches spec
44
+ */
45
+ private ruleMatchesSpec;
46
+ /**
47
+ * Check if value matches pattern
48
+ */
49
+ private valueMatchesPattern;
50
+ /**
51
+ * Value equality
52
+ */
53
+ private valuesEqual;
54
+ }
55
+ //# sourceMappingURL=RuleLibrary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RuleLibrary.d.ts","sourceRoot":"","sources":["../../src/rules/RuleLibrary.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE9E;;GAEG;AACH,qBAAa,WAAY,YAAW,YAAY;IAC9C,OAAO,CAAC,KAAK,CAA6B;;IAM1C;;OAEG;IACG,GAAG,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7C;;OAEG;IACG,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAIpD;;OAEG;IACG,KAAK,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAe1D;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBlE;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAQ3B;;OAEG;IACG,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAsB/C;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAIxC;;OAEG;IACH,OAAO,CAAC,eAAe;IAgDvB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAmC3B;;OAEG;IACH,OAAO,CAAC,WAAW;CAQpB"}