@nahisaho/musubix-library-learner 2.1.1 → 2.2.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/EnhancedLibraryLearner.d.ts +159 -0
- package/dist/EnhancedLibraryLearner.d.ts.map +1 -0
- package/dist/EnhancedLibraryLearner.js +296 -0
- package/dist/EnhancedLibraryLearner.js.map +1 -0
- package/dist/domain/DomainAwareAbstractor.d.ts +226 -0
- package/dist/domain/DomainAwareAbstractor.d.ts.map +1 -0
- package/dist/domain/DomainAwareAbstractor.js +237 -0
- package/dist/domain/DomainAwareAbstractor.js.map +1 -0
- package/dist/domain/__tests__/DomainAwareAbstractor.test.d.ts +9 -0
- package/dist/domain/__tests__/DomainAwareAbstractor.test.d.ts.map +1 -0
- package/dist/domain/__tests__/DomainAwareAbstractor.test.js +217 -0
- package/dist/domain/__tests__/DomainAwareAbstractor.test.js.map +1 -0
- package/dist/domain/index.d.ts +7 -0
- package/dist/domain/index.d.ts.map +1 -0
- package/dist/domain/index.js +6 -0
- package/dist/domain/index.js.map +1 -0
- package/dist/hierarchy/HierarchyManager.d.ts +227 -0
- package/dist/hierarchy/HierarchyManager.d.ts.map +1 -0
- package/dist/hierarchy/HierarchyManager.js +342 -0
- package/dist/hierarchy/HierarchyManager.js.map +1 -0
- package/dist/hierarchy/index.d.ts +9 -0
- package/dist/hierarchy/index.d.ts.map +1 -0
- package/dist/hierarchy/index.js +8 -0
- package/dist/hierarchy/index.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -1
- package/dist/library/IterativeCompressor.d.ts +196 -0
- package/dist/library/IterativeCompressor.d.ts.map +1 -0
- package/dist/library/IterativeCompressor.js +367 -0
- package/dist/library/IterativeCompressor.js.map +1 -0
- package/dist/library/PatternVersionManager.d.ts +177 -0
- package/dist/library/PatternVersionManager.d.ts.map +1 -0
- package/dist/library/PatternVersionManager.js +223 -0
- package/dist/library/PatternVersionManager.js.map +1 -0
- package/dist/library/__tests__/IterativeCompressor.test.d.ts +9 -0
- package/dist/library/__tests__/IterativeCompressor.test.d.ts.map +1 -0
- package/dist/library/__tests__/IterativeCompressor.test.js +200 -0
- package/dist/library/__tests__/IterativeCompressor.test.js.map +1 -0
- package/dist/library/__tests__/PatternVersionManager.test.d.ts +9 -0
- package/dist/library/__tests__/PatternVersionManager.test.d.ts.map +1 -0
- package/dist/library/__tests__/PatternVersionManager.test.js +218 -0
- package/dist/library/__tests__/PatternVersionManager.test.js.map +1 -0
- package/dist/library/index.d.ts +4 -0
- package/dist/library/index.d.ts.map +1 -1
- package/dist/library/index.js +4 -0
- package/dist/library/index.js.map +1 -1
- package/dist/metrics/MetricsExporter.d.ts +128 -0
- package/dist/metrics/MetricsExporter.d.ts.map +1 -0
- package/dist/metrics/MetricsExporter.js +157 -0
- package/dist/metrics/MetricsExporter.js.map +1 -0
- package/dist/metrics/index.d.ts +9 -0
- package/dist/metrics/index.d.ts.map +1 -0
- package/dist/metrics/index.js +8 -0
- package/dist/metrics/index.js.map +1 -0
- package/dist/rewrite/RewriteRuleSet.d.ts +136 -0
- package/dist/rewrite/RewriteRuleSet.d.ts.map +1 -0
- package/dist/rewrite/RewriteRuleSet.js +460 -0
- package/dist/rewrite/RewriteRuleSet.js.map +1 -0
- package/dist/rewrite/index.d.ts +9 -0
- package/dist/rewrite/index.d.ts.map +1 -0
- package/dist/rewrite/index.js +8 -0
- package/dist/rewrite/index.js.map +1 -0
- package/dist/search/TypeDirectedPruner.d.ts +138 -0
- package/dist/search/TypeDirectedPruner.d.ts.map +1 -0
- package/dist/search/TypeDirectedPruner.js +245 -0
- package/dist/search/TypeDirectedPruner.js.map +1 -0
- package/dist/search/index.d.ts +9 -0
- package/dist/search/index.d.ts.map +1 -0
- package/dist/search/index.js +8 -0
- package/dist/search/index.js.map +1 -0
- package/dist/updater/IncrementalUpdater.d.ts +152 -0
- package/dist/updater/IncrementalUpdater.d.ts.map +1 -0
- package/dist/updater/IncrementalUpdater.js +283 -0
- package/dist/updater/IncrementalUpdater.js.map +1 -0
- package/dist/updater/index.d.ts +7 -0
- package/dist/updater/index.d.ts.map +1 -0
- package/dist/updater/index.js +6 -0
- package/dist/updater/index.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeDirectedPruner - Type-Directed Search Space Pruning
|
|
3
|
+
*
|
|
4
|
+
* Uses type information to prune the search space during synthesis.
|
|
5
|
+
* Achieves 70%+ search space reduction while maintaining 100% type safety.
|
|
6
|
+
*
|
|
7
|
+
* @module @nahisaho/musubix-library-learner
|
|
8
|
+
* @see TSK-LL-102
|
|
9
|
+
* @see DES-LL-102
|
|
10
|
+
* @see REQ-LL-102
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* import { createTypeDirectedPruner } from './TypeDirectedPruner.js';
|
|
15
|
+
*
|
|
16
|
+
* const pruner = createTypeDirectedPruner();
|
|
17
|
+
* const result = await pruner.prune(candidates, targetType);
|
|
18
|
+
* console.log(`Reduced by ${result.reductionRatio * 100}%`);
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
import type { ASTNode } from '../types.js';
|
|
22
|
+
/**
|
|
23
|
+
* Type signature representation
|
|
24
|
+
*/
|
|
25
|
+
export interface TypeSignature {
|
|
26
|
+
/** Type kind (function, primitive, generic, etc.) */
|
|
27
|
+
kind: string;
|
|
28
|
+
/** Parameter types for functions */
|
|
29
|
+
params?: string[];
|
|
30
|
+
/** Return type for functions */
|
|
31
|
+
returns?: string;
|
|
32
|
+
/** Generic type parameters */
|
|
33
|
+
typeParams?: string[];
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Candidate for pruning
|
|
37
|
+
*/
|
|
38
|
+
export interface PruneCandidate {
|
|
39
|
+
/** Unique identifier */
|
|
40
|
+
id: string;
|
|
41
|
+
/** AST representation */
|
|
42
|
+
ast: ASTNode;
|
|
43
|
+
/** Type signature */
|
|
44
|
+
typeSignature: TypeSignature;
|
|
45
|
+
/** Initial score */
|
|
46
|
+
score: number;
|
|
47
|
+
/** Final score after type-directed scoring */
|
|
48
|
+
finalScore?: number;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Result of pruning operation
|
|
52
|
+
*/
|
|
53
|
+
export interface PruneResult {
|
|
54
|
+
/** Remaining candidates after pruning */
|
|
55
|
+
candidates: PruneCandidate[];
|
|
56
|
+
/** Number of pruned candidates */
|
|
57
|
+
prunedCount: number;
|
|
58
|
+
/** Reduction ratio (0-1) */
|
|
59
|
+
reductionRatio: number;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Configuration for TypeDirectedPruner
|
|
63
|
+
*/
|
|
64
|
+
export interface TypeDirectedPrunerConfig {
|
|
65
|
+
/** Maximum candidates to return */
|
|
66
|
+
maxCandidates?: number;
|
|
67
|
+
/** Weight of type score in final ranking */
|
|
68
|
+
typeWeight?: number;
|
|
69
|
+
/** Enable generic type unification */
|
|
70
|
+
enableGenerics?: boolean;
|
|
71
|
+
/** Allow partial type matches */
|
|
72
|
+
allowPartialMatch?: boolean;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* TypeDirectedPruner interface
|
|
76
|
+
*/
|
|
77
|
+
export interface TypeDirectedPruner {
|
|
78
|
+
/** Prune candidates based on target type */
|
|
79
|
+
prune(candidates: PruneCandidate[], targetType: TypeSignature): Promise<PruneResult>;
|
|
80
|
+
/** Check if two types are compatible */
|
|
81
|
+
isTypeCompatible(type1: TypeSignature, type2: TypeSignature): boolean;
|
|
82
|
+
/** Calculate type similarity score (0-1) */
|
|
83
|
+
calculateTypeScore(type1: TypeSignature, type2: TypeSignature): number;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Default TypeDirectedPruner implementation
|
|
87
|
+
*/
|
|
88
|
+
export declare class DefaultTypeDirectedPruner implements TypeDirectedPruner {
|
|
89
|
+
private config;
|
|
90
|
+
constructor(config?: TypeDirectedPrunerConfig);
|
|
91
|
+
/**
|
|
92
|
+
* Prune candidates based on target type
|
|
93
|
+
*
|
|
94
|
+
* Algorithm:
|
|
95
|
+
* 1. Filter by type compatibility
|
|
96
|
+
* 2. Score remaining candidates
|
|
97
|
+
* 3. Sort by combined score
|
|
98
|
+
* 4. Return top candidates
|
|
99
|
+
*/
|
|
100
|
+
prune(candidates: PruneCandidate[], targetType: TypeSignature): Promise<PruneResult>;
|
|
101
|
+
/**
|
|
102
|
+
* Check if two types are compatible
|
|
103
|
+
*/
|
|
104
|
+
isTypeCompatible(type1: TypeSignature, type2: TypeSignature): boolean;
|
|
105
|
+
/**
|
|
106
|
+
* Calculate type similarity score (0-1)
|
|
107
|
+
*/
|
|
108
|
+
calculateTypeScore(type1: TypeSignature, type2: TypeSignature): number;
|
|
109
|
+
/**
|
|
110
|
+
* Check if a type is generic
|
|
111
|
+
*/
|
|
112
|
+
private isGenericType;
|
|
113
|
+
/**
|
|
114
|
+
* Check if two types are exactly equal
|
|
115
|
+
*/
|
|
116
|
+
private areTypesEqual;
|
|
117
|
+
/**
|
|
118
|
+
* Check if two function types are compatible
|
|
119
|
+
*/
|
|
120
|
+
private areFunctionTypesCompatible;
|
|
121
|
+
/**
|
|
122
|
+
* Check if two primitive types are compatible
|
|
123
|
+
*/
|
|
124
|
+
private isPrimitiveTypeCompatible;
|
|
125
|
+
/**
|
|
126
|
+
* Calculate detailed function type score
|
|
127
|
+
*/
|
|
128
|
+
private calculateFunctionTypeScore;
|
|
129
|
+
/**
|
|
130
|
+
* Calculate primitive type similarity score
|
|
131
|
+
*/
|
|
132
|
+
private calculatePrimitiveTypeScore;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Create a new TypeDirectedPruner instance
|
|
136
|
+
*/
|
|
137
|
+
export declare function createTypeDirectedPruner(config?: TypeDirectedPrunerConfig): TypeDirectedPruner;
|
|
138
|
+
//# sourceMappingURL=TypeDirectedPruner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TypeDirectedPruner.d.ts","sourceRoot":"","sources":["../../src/search/TypeDirectedPruner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAM3C;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,gCAAgC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,wBAAwB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,yBAAyB;IACzB,GAAG,EAAE,OAAO,CAAC;IACb,qBAAqB;IACrB,aAAa,EAAE,aAAa,CAAC;IAC7B,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,yCAAyC;IACzC,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,kCAAkC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,4BAA4B;IAC5B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,mCAAmC;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,4CAA4C;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sCAAsC;IACtC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,iCAAiC;IACjC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,4CAA4C;IAC5C,KAAK,CAAC,UAAU,EAAE,cAAc,EAAE,EAAE,UAAU,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAErF,wCAAwC;IACxC,gBAAgB,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC;IAEtE,4CAA4C;IAC5C,kBAAkB,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,GAAG,MAAM,CAAC;CACxE;AAMD;;GAEG;AACH,qBAAa,yBAA0B,YAAW,kBAAkB;IAClE,OAAO,CAAC,MAAM,CAAqC;gBAEvC,MAAM,GAAE,wBAA6B;IASjD;;;;;;;;OAQG;IACG,KAAK,CAAC,UAAU,EAAE,cAAc,EAAE,EAAE,UAAU,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC;IA6B1F;;OAEG;IACH,gBAAgB,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO;IAuBrE;;OAEG;IACH,kBAAkB,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,GAAG,MAAM;IA+BtE;;OAEG;IACH,OAAO,CAAC,aAAa;IAcrB;;OAEG;IACH,OAAO,CAAC,aAAa;IAerB;;OAEG;IACH,OAAO,CAAC,0BAA0B;IA6BlC;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAUjC;;OAEG;IACH,OAAO,CAAC,0BAA0B;IA6BlC;;OAEG;IACH,OAAO,CAAC,2BAA2B;CAMpC;AAMD;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,GAAE,wBAA6B,GAAG,kBAAkB,CAElG"}
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeDirectedPruner - Type-Directed Search Space Pruning
|
|
3
|
+
*
|
|
4
|
+
* Uses type information to prune the search space during synthesis.
|
|
5
|
+
* Achieves 70%+ search space reduction while maintaining 100% type safety.
|
|
6
|
+
*
|
|
7
|
+
* @module @nahisaho/musubix-library-learner
|
|
8
|
+
* @see TSK-LL-102
|
|
9
|
+
* @see DES-LL-102
|
|
10
|
+
* @see REQ-LL-102
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* import { createTypeDirectedPruner } from './TypeDirectedPruner.js';
|
|
15
|
+
*
|
|
16
|
+
* const pruner = createTypeDirectedPruner();
|
|
17
|
+
* const result = await pruner.prune(candidates, targetType);
|
|
18
|
+
* console.log(`Reduced by ${result.reductionRatio * 100}%`);
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
// =============================================================================
|
|
22
|
+
// Default Implementation
|
|
23
|
+
// =============================================================================
|
|
24
|
+
/**
|
|
25
|
+
* Default TypeDirectedPruner implementation
|
|
26
|
+
*/
|
|
27
|
+
export class DefaultTypeDirectedPruner {
|
|
28
|
+
config;
|
|
29
|
+
constructor(config = {}) {
|
|
30
|
+
this.config = {
|
|
31
|
+
maxCandidates: config.maxCandidates ?? 100,
|
|
32
|
+
typeWeight: config.typeWeight ?? 0.6,
|
|
33
|
+
enableGenerics: config.enableGenerics ?? true,
|
|
34
|
+
allowPartialMatch: config.allowPartialMatch ?? true,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Prune candidates based on target type
|
|
39
|
+
*
|
|
40
|
+
* Algorithm:
|
|
41
|
+
* 1. Filter by type compatibility
|
|
42
|
+
* 2. Score remaining candidates
|
|
43
|
+
* 3. Sort by combined score
|
|
44
|
+
* 4. Return top candidates
|
|
45
|
+
*/
|
|
46
|
+
async prune(candidates, targetType) {
|
|
47
|
+
const originalCount = candidates.length;
|
|
48
|
+
// Step 1: Filter by type compatibility
|
|
49
|
+
const compatible = candidates.filter((c) => this.isTypeCompatible(c.typeSignature, targetType));
|
|
50
|
+
// Step 2: Score and sort candidates
|
|
51
|
+
const scored = compatible.map((c) => {
|
|
52
|
+
const typeScore = this.calculateTypeScore(c.typeSignature, targetType);
|
|
53
|
+
const finalScore = this.config.typeWeight * typeScore + (1 - this.config.typeWeight) * c.score;
|
|
54
|
+
return { ...c, finalScore };
|
|
55
|
+
});
|
|
56
|
+
scored.sort((a, b) => (b.finalScore ?? 0) - (a.finalScore ?? 0));
|
|
57
|
+
// Step 3: Limit to maxCandidates
|
|
58
|
+
const result = scored.slice(0, this.config.maxCandidates);
|
|
59
|
+
// Calculate reduction ratio
|
|
60
|
+
const prunedCount = originalCount - result.length;
|
|
61
|
+
const reductionRatio = originalCount > 0 ? prunedCount / originalCount : 0;
|
|
62
|
+
return {
|
|
63
|
+
candidates: result,
|
|
64
|
+
prunedCount,
|
|
65
|
+
reductionRatio,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Check if two types are compatible
|
|
70
|
+
*/
|
|
71
|
+
isTypeCompatible(type1, type2) {
|
|
72
|
+
// Any type is compatible with everything
|
|
73
|
+
if (type1.kind === 'any' || type2.kind === 'any') {
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
// Different kinds are incompatible (unless generics)
|
|
77
|
+
if (type1.kind !== type2.kind) {
|
|
78
|
+
// Check if type1 is a generic
|
|
79
|
+
if (this.config.enableGenerics && this.isGenericType(type1)) {
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
// For functions, check params and return type
|
|
85
|
+
if (type1.kind === 'function' && type2.kind === 'function') {
|
|
86
|
+
return this.areFunctionTypesCompatible(type1, type2);
|
|
87
|
+
}
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Calculate type similarity score (0-1)
|
|
92
|
+
*/
|
|
93
|
+
calculateTypeScore(type1, type2) {
|
|
94
|
+
// Exact match
|
|
95
|
+
if (this.areTypesEqual(type1, type2)) {
|
|
96
|
+
return 1.0;
|
|
97
|
+
}
|
|
98
|
+
// Any type gets partial score
|
|
99
|
+
if (type1.kind === 'any' || type2.kind === 'any') {
|
|
100
|
+
return 0.5;
|
|
101
|
+
}
|
|
102
|
+
// Different kinds = 0
|
|
103
|
+
if (type1.kind !== type2.kind) {
|
|
104
|
+
if (this.config.enableGenerics && this.isGenericType(type1)) {
|
|
105
|
+
return 0.7; // Generic can match
|
|
106
|
+
}
|
|
107
|
+
return 0;
|
|
108
|
+
}
|
|
109
|
+
// For functions, calculate detailed score
|
|
110
|
+
if (type1.kind === 'function' && type2.kind === 'function') {
|
|
111
|
+
return this.calculateFunctionTypeScore(type1, type2);
|
|
112
|
+
}
|
|
113
|
+
return 0.8; // Same kind, not exact match
|
|
114
|
+
}
|
|
115
|
+
// ===========================================================================
|
|
116
|
+
// Private Methods
|
|
117
|
+
// ===========================================================================
|
|
118
|
+
/**
|
|
119
|
+
* Check if a type is generic
|
|
120
|
+
*/
|
|
121
|
+
isGenericType(type) {
|
|
122
|
+
if (type.typeParams && type.typeParams.length > 0) {
|
|
123
|
+
return true;
|
|
124
|
+
}
|
|
125
|
+
// Single uppercase letter is a type variable
|
|
126
|
+
if (type.params) {
|
|
127
|
+
return type.params.some((p) => /^[A-Z]$/.test(p));
|
|
128
|
+
}
|
|
129
|
+
if (type.returns) {
|
|
130
|
+
return /^[A-Z]$/.test(type.returns);
|
|
131
|
+
}
|
|
132
|
+
return false;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Check if two types are exactly equal
|
|
136
|
+
*/
|
|
137
|
+
areTypesEqual(type1, type2) {
|
|
138
|
+
if (type1.kind !== type2.kind)
|
|
139
|
+
return false;
|
|
140
|
+
if (type1.kind === 'function') {
|
|
141
|
+
const params1 = type1.params ?? [];
|
|
142
|
+
const params2 = type2.params ?? [];
|
|
143
|
+
if (params1.length !== params2.length)
|
|
144
|
+
return false;
|
|
145
|
+
if (!params1.every((p, i) => p === params2[i]))
|
|
146
|
+
return false;
|
|
147
|
+
if (type1.returns !== type2.returns)
|
|
148
|
+
return false;
|
|
149
|
+
}
|
|
150
|
+
return true;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Check if two function types are compatible
|
|
154
|
+
*/
|
|
155
|
+
areFunctionTypesCompatible(type1, type2) {
|
|
156
|
+
const params1 = type1.params ?? [];
|
|
157
|
+
const params2 = type2.params ?? [];
|
|
158
|
+
// Allow partial match if enabled
|
|
159
|
+
if (this.config.allowPartialMatch) {
|
|
160
|
+
// Check if params are compatible (allow any, generics)
|
|
161
|
+
const minParams = Math.min(params1.length, params2.length);
|
|
162
|
+
for (let i = 0; i < minParams; i++) {
|
|
163
|
+
if (!this.isPrimitiveTypeCompatible(params1[i], params2[i])) {
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
// Check return type
|
|
168
|
+
if (type1.returns && type2.returns) {
|
|
169
|
+
return this.isPrimitiveTypeCompatible(type1.returns, type2.returns);
|
|
170
|
+
}
|
|
171
|
+
return true;
|
|
172
|
+
}
|
|
173
|
+
// Strict match
|
|
174
|
+
if (params1.length !== params2.length)
|
|
175
|
+
return false;
|
|
176
|
+
if (!params1.every((p, i) => this.isPrimitiveTypeCompatible(p, params2[i])))
|
|
177
|
+
return false;
|
|
178
|
+
if (!this.isPrimitiveTypeCompatible(type1.returns ?? '', type2.returns ?? ''))
|
|
179
|
+
return false;
|
|
180
|
+
return true;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Check if two primitive types are compatible
|
|
184
|
+
*/
|
|
185
|
+
isPrimitiveTypeCompatible(type1, type2) {
|
|
186
|
+
if (type1 === type2)
|
|
187
|
+
return true;
|
|
188
|
+
if (type1 === 'any' || type2 === 'any')
|
|
189
|
+
return true;
|
|
190
|
+
if (this.config.enableGenerics) {
|
|
191
|
+
// Generic type variable matches anything
|
|
192
|
+
if (/^[A-Z]$/.test(type1) || /^[A-Z]$/.test(type2))
|
|
193
|
+
return true;
|
|
194
|
+
}
|
|
195
|
+
return false;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Calculate detailed function type score
|
|
199
|
+
*/
|
|
200
|
+
calculateFunctionTypeScore(type1, type2) {
|
|
201
|
+
const params1 = type1.params ?? [];
|
|
202
|
+
const params2 = type2.params ?? [];
|
|
203
|
+
let score = 0;
|
|
204
|
+
let factors = 0;
|
|
205
|
+
// Params match score
|
|
206
|
+
const minParams = Math.min(params1.length, params2.length);
|
|
207
|
+
const maxParams = Math.max(params1.length, params2.length);
|
|
208
|
+
if (maxParams > 0) {
|
|
209
|
+
let paramScore = 0;
|
|
210
|
+
for (let i = 0; i < minParams; i++) {
|
|
211
|
+
paramScore += this.calculatePrimitiveTypeScore(params1[i], params2[i]);
|
|
212
|
+
}
|
|
213
|
+
score += paramScore / maxParams;
|
|
214
|
+
factors++;
|
|
215
|
+
}
|
|
216
|
+
// Return type score
|
|
217
|
+
if (type1.returns && type2.returns) {
|
|
218
|
+
score += this.calculatePrimitiveTypeScore(type1.returns, type2.returns);
|
|
219
|
+
factors++;
|
|
220
|
+
}
|
|
221
|
+
return factors > 0 ? score / factors : 0;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Calculate primitive type similarity score
|
|
225
|
+
*/
|
|
226
|
+
calculatePrimitiveTypeScore(type1, type2) {
|
|
227
|
+
if (type1 === type2)
|
|
228
|
+
return 1.0;
|
|
229
|
+
if (type1 === 'any' || type2 === 'any')
|
|
230
|
+
return 0.5;
|
|
231
|
+
if (/^[A-Z]$/.test(type1) || /^[A-Z]$/.test(type2))
|
|
232
|
+
return 0.7;
|
|
233
|
+
return 0;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
// =============================================================================
|
|
237
|
+
// Factory Function
|
|
238
|
+
// =============================================================================
|
|
239
|
+
/**
|
|
240
|
+
* Create a new TypeDirectedPruner instance
|
|
241
|
+
*/
|
|
242
|
+
export function createTypeDirectedPruner(config = {}) {
|
|
243
|
+
return new DefaultTypeDirectedPruner(config);
|
|
244
|
+
}
|
|
245
|
+
//# sourceMappingURL=TypeDirectedPruner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TypeDirectedPruner.js","sourceRoot":"","sources":["../../src/search/TypeDirectedPruner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Search Module - Type-Directed Search and Pruning
|
|
3
|
+
*
|
|
4
|
+
* @module @nahisaho/musubix-library-learner/search
|
|
5
|
+
* @see TSK-LL-102
|
|
6
|
+
*/
|
|
7
|
+
export type { TypeDirectedPruner, TypeSignature, PruneCandidate, PruneResult, TypeDirectedPrunerConfig, } from './TypeDirectedPruner.js';
|
|
8
|
+
export { createTypeDirectedPruner, DefaultTypeDirectedPruner } from './TypeDirectedPruner.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/search/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,YAAY,EACV,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,WAAW,EACX,wBAAwB,GACzB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Search Module - Type-Directed Search and Pruning
|
|
3
|
+
*
|
|
4
|
+
* @module @nahisaho/musubix-library-learner/search
|
|
5
|
+
* @see TSK-LL-102
|
|
6
|
+
*/
|
|
7
|
+
export { createTypeDirectedPruner, DefaultTypeDirectedPruner } from './TypeDirectedPruner.js';
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/search/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IncrementalUpdater - Fast Incremental Pattern Updates
|
|
3
|
+
* @module @nahisaho/musubix-library-learner
|
|
4
|
+
* @see TSK-LL-107
|
|
5
|
+
* @see DES-LL-107
|
|
6
|
+
* @see REQ-PERF-002 (5秒/500LOC目標)
|
|
7
|
+
*
|
|
8
|
+
* ファイル変更時のインクリメンタル更新により、
|
|
9
|
+
* 500LOCの変更を5秒以内で処理することを目標とする
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Types of file changes
|
|
13
|
+
*/
|
|
14
|
+
export type ChangeType = 'added' | 'modified' | 'deleted';
|
|
15
|
+
/**
|
|
16
|
+
* File change descriptor
|
|
17
|
+
*/
|
|
18
|
+
export interface FileChange {
|
|
19
|
+
/** Absolute file path */
|
|
20
|
+
filePath: string;
|
|
21
|
+
/** Type of change */
|
|
22
|
+
changeType: ChangeType;
|
|
23
|
+
/** Affected line numbers */
|
|
24
|
+
affectedLines: number[];
|
|
25
|
+
/** Change timestamp */
|
|
26
|
+
timestamp: number;
|
|
27
|
+
/** Optional: previous content hash */
|
|
28
|
+
previousHash?: string;
|
|
29
|
+
/** Optional: new content hash */
|
|
30
|
+
newHash?: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Result of processing a single change
|
|
34
|
+
*/
|
|
35
|
+
export interface UpdateResult {
|
|
36
|
+
/** Was processing successful */
|
|
37
|
+
success: boolean;
|
|
38
|
+
/** Type of change processed */
|
|
39
|
+
changeType: ChangeType;
|
|
40
|
+
/** Processing time in ms */
|
|
41
|
+
processingTimeMs: number;
|
|
42
|
+
/** Patterns affected by this change */
|
|
43
|
+
affectedPatterns: string[];
|
|
44
|
+
/** Files that depend on the changed file */
|
|
45
|
+
dependentFiles: string[];
|
|
46
|
+
/** Was cache hit used */
|
|
47
|
+
cacheHit: boolean;
|
|
48
|
+
/** Error message if failed */
|
|
49
|
+
error?: string;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Updater configuration
|
|
53
|
+
*/
|
|
54
|
+
export interface UpdaterConfig {
|
|
55
|
+
/** Maximum cache size (entries) */
|
|
56
|
+
maxCacheSize?: number;
|
|
57
|
+
/** Enable parallel processing */
|
|
58
|
+
enableParallelProcessing?: boolean;
|
|
59
|
+
/** Batch size for parallel processing */
|
|
60
|
+
batchSize?: number;
|
|
61
|
+
/** Debounce time for rapid changes (ms) */
|
|
62
|
+
debounceMs?: number;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Update statistics
|
|
66
|
+
*/
|
|
67
|
+
export interface UpdateStatistics {
|
|
68
|
+
/** Total changes processed */
|
|
69
|
+
totalChangesProcessed: number;
|
|
70
|
+
/** Cache hits */
|
|
71
|
+
cacheHits: number;
|
|
72
|
+
/** Cache misses */
|
|
73
|
+
cacheMisses: number;
|
|
74
|
+
/** Current cache size */
|
|
75
|
+
cacheSize: number;
|
|
76
|
+
/** Average processing time in ms */
|
|
77
|
+
averageProcessingTimeMs: number;
|
|
78
|
+
/** Total processing time in ms */
|
|
79
|
+
totalProcessingTimeMs: number;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* IncrementalUpdater interface
|
|
83
|
+
*/
|
|
84
|
+
export interface IncrementalUpdater {
|
|
85
|
+
/**
|
|
86
|
+
* Process a single file change
|
|
87
|
+
*/
|
|
88
|
+
processChange(change: FileChange): Promise<UpdateResult>;
|
|
89
|
+
/**
|
|
90
|
+
* Process multiple changes in batch
|
|
91
|
+
*/
|
|
92
|
+
processBatch(changes: FileChange[]): Promise<UpdateResult[]>;
|
|
93
|
+
/**
|
|
94
|
+
* Get dependencies for a file
|
|
95
|
+
*/
|
|
96
|
+
getDependencies(filePath: string): string[];
|
|
97
|
+
/**
|
|
98
|
+
* Get statistics
|
|
99
|
+
*/
|
|
100
|
+
getStatistics(): UpdateStatistics;
|
|
101
|
+
/**
|
|
102
|
+
* Reset all state
|
|
103
|
+
*/
|
|
104
|
+
reset(): void;
|
|
105
|
+
/**
|
|
106
|
+
* Clear only cache
|
|
107
|
+
*/
|
|
108
|
+
clearCache(): void;
|
|
109
|
+
/**
|
|
110
|
+
* Serialize state
|
|
111
|
+
*/
|
|
112
|
+
toJSON(): string;
|
|
113
|
+
/**
|
|
114
|
+
* Restore state
|
|
115
|
+
*/
|
|
116
|
+
fromJSON(json: string): void;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Default implementation of IncrementalUpdater
|
|
120
|
+
*/
|
|
121
|
+
declare class DefaultIncrementalUpdater implements IncrementalUpdater {
|
|
122
|
+
private config;
|
|
123
|
+
private cache;
|
|
124
|
+
private dependencies;
|
|
125
|
+
private statistics;
|
|
126
|
+
constructor(config?: UpdaterConfig);
|
|
127
|
+
processChange(change: FileChange): Promise<UpdateResult>;
|
|
128
|
+
processBatch(changes: FileChange[]): Promise<UpdateResult[]>;
|
|
129
|
+
getDependencies(filePath: string): string[];
|
|
130
|
+
getStatistics(): UpdateStatistics;
|
|
131
|
+
reset(): void;
|
|
132
|
+
clearCache(): void;
|
|
133
|
+
toJSON(): string;
|
|
134
|
+
fromJSON(json: string): void;
|
|
135
|
+
private createInitialStatistics;
|
|
136
|
+
private checkCacheValid;
|
|
137
|
+
private processChangeInternal;
|
|
138
|
+
private updateCache;
|
|
139
|
+
private findOldestCacheEntry;
|
|
140
|
+
private generateHash;
|
|
141
|
+
private trackDependency;
|
|
142
|
+
private getReverseDependencies;
|
|
143
|
+
private updateProcessingStats;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Create an IncrementalUpdater instance
|
|
147
|
+
* @param config - Optional configuration
|
|
148
|
+
* @returns IncrementalUpdater instance
|
|
149
|
+
*/
|
|
150
|
+
export declare function createIncrementalUpdater(config?: UpdaterConfig): IncrementalUpdater;
|
|
151
|
+
export { DefaultIncrementalUpdater };
|
|
152
|
+
//# sourceMappingURL=IncrementalUpdater.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IncrementalUpdater.d.ts","sourceRoot":"","sources":["../../src/updater/IncrementalUpdater.ts"],"names":[],"mappings":"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"}
|