@nahisaho/musubix-library-learner 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.
- package/README.md +117 -0
- package/dist/LibraryLearner.d.ts +36 -0
- package/dist/LibraryLearner.d.ts.map +1 -0
- package/dist/LibraryLearner.js +217 -0
- package/dist/LibraryLearner.js.map +1 -0
- package/dist/abstraction/Abstractor.d.ts +29 -0
- package/dist/abstraction/Abstractor.d.ts.map +1 -0
- package/dist/abstraction/Abstractor.js +290 -0
- package/dist/abstraction/Abstractor.js.map +1 -0
- package/dist/abstraction/PatternMiner.d.ts +23 -0
- package/dist/abstraction/PatternMiner.d.ts.map +1 -0
- package/dist/abstraction/PatternMiner.js +263 -0
- package/dist/abstraction/PatternMiner.js.map +1 -0
- package/dist/abstraction/TypeAnalyzer.d.ts +27 -0
- package/dist/abstraction/TypeAnalyzer.d.ts.map +1 -0
- package/dist/abstraction/TypeAnalyzer.js +239 -0
- package/dist/abstraction/TypeAnalyzer.js.map +1 -0
- package/dist/abstraction/index.d.ts +10 -0
- package/dist/abstraction/index.d.ts.map +1 -0
- package/dist/abstraction/index.js +7 -0
- package/dist/abstraction/index.js.map +1 -0
- package/dist/egraph/EGraph.d.ts +29 -0
- package/dist/egraph/EGraph.d.ts.map +1 -0
- package/dist/egraph/EGraph.js +86 -0
- package/dist/egraph/EGraph.js.map +1 -0
- package/dist/egraph/EGraphBuilder.d.ts +24 -0
- package/dist/egraph/EGraphBuilder.d.ts.map +1 -0
- package/dist/egraph/EGraphBuilder.js +37 -0
- package/dist/egraph/EGraphBuilder.js.map +1 -0
- package/dist/egraph/Extractor.d.ts +24 -0
- package/dist/egraph/Extractor.d.ts.map +1 -0
- package/dist/egraph/Extractor.js +61 -0
- package/dist/egraph/Extractor.js.map +1 -0
- package/dist/egraph/index.d.ts +10 -0
- package/dist/egraph/index.d.ts.map +1 -0
- package/dist/egraph/index.js +7 -0
- package/dist/egraph/index.js.map +1 -0
- package/dist/errors.d.ts +66 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +99 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +48 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -0
- package/dist/library/Consolidator.d.ts +26 -0
- package/dist/library/Consolidator.d.ts.map +1 -0
- package/dist/library/Consolidator.js +54 -0
- package/dist/library/Consolidator.js.map +1 -0
- package/dist/library/LibraryStore.d.ts +33 -0
- package/dist/library/LibraryStore.d.ts.map +1 -0
- package/dist/library/LibraryStore.js +61 -0
- package/dist/library/LibraryStore.js.map +1 -0
- package/dist/library/Pruner.d.ts +24 -0
- package/dist/library/Pruner.d.ts.map +1 -0
- package/dist/library/Pruner.js +41 -0
- package/dist/library/Pruner.js.map +1 -0
- package/dist/library/index.d.ts +10 -0
- package/dist/library/index.d.ts.map +1 -0
- package/dist/library/index.js +7 -0
- package/dist/library/index.js.map +1 -0
- package/dist/types.d.ts +365 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +10 -0
- package/dist/types.js.map +1 -0
- package/package.json +66 -0
package/README.md
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# @nahisaho/musubix-library-learner
|
|
2
|
+
|
|
3
|
+
DreamCoder-style hierarchical abstraction and library learning for MUSUBIX.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
This package provides pattern mining, hierarchical abstraction, type-directed search, and E-graph optimization capabilities for the MUSUBIX neuro-symbolic AI integration system.
|
|
8
|
+
|
|
9
|
+
## Features
|
|
10
|
+
|
|
11
|
+
- **Pattern Mining**: Extract recurring patterns from code corpora
|
|
12
|
+
- **Hierarchical Abstraction**: Three-level abstraction (concrete → templates → concepts)
|
|
13
|
+
- **Type-Directed Search**: Filter and score patterns by type compatibility
|
|
14
|
+
- **E-Graph Optimization**: Equality saturation for optimal expression extraction
|
|
15
|
+
- **Library Management**: Store, consolidate, and prune learned patterns
|
|
16
|
+
|
|
17
|
+
## Installation
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npm install @nahisaho/musubix-library-learner
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Quick Start
|
|
24
|
+
|
|
25
|
+
```typescript
|
|
26
|
+
import { createLibraryLearner } from '@nahisaho/musubix-library-learner';
|
|
27
|
+
|
|
28
|
+
// Create a library learner
|
|
29
|
+
const learner = createLibraryLearner({
|
|
30
|
+
abstractionLevels: 3,
|
|
31
|
+
minOccurrences: 2,
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
// Learn from a code corpus
|
|
35
|
+
const corpus = {
|
|
36
|
+
id: 'my-corpus',
|
|
37
|
+
files: [
|
|
38
|
+
{ path: 'file1.ts', content: '...', language: 'typescript' },
|
|
39
|
+
{ path: 'file2.ts', content: '...', language: 'typescript' },
|
|
40
|
+
],
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
const result = await learner.learnFromCorpus(corpus);
|
|
44
|
+
console.log(`Extracted ${result.patternsExtracted} patterns`);
|
|
45
|
+
|
|
46
|
+
// Synthesize using learned patterns
|
|
47
|
+
const synthesis = await learner.synthesize({
|
|
48
|
+
type: { kind: 'function', paramTypes: [], returnType: { kind: 'primitive', name: 'number' } },
|
|
49
|
+
description: 'A function that returns a number',
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
if (synthesis.success) {
|
|
53
|
+
console.log('Synthesized program:', synthesis.program);
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## API
|
|
58
|
+
|
|
59
|
+
### LibraryLearner
|
|
60
|
+
|
|
61
|
+
High-level API for library learning.
|
|
62
|
+
|
|
63
|
+
```typescript
|
|
64
|
+
interface LibraryLearner {
|
|
65
|
+
learnFromCorpus(corpus: CodeCorpus): Promise<LearnResult>;
|
|
66
|
+
learnIncremental(code: string): Promise<void>;
|
|
67
|
+
synthesize(spec: Specification, options?: SynthesizeOptions): Promise<SynthesisResult>;
|
|
68
|
+
getLibrary(): LibraryStore;
|
|
69
|
+
getStats(): Promise<LibraryStats>;
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### PatternMiner
|
|
74
|
+
|
|
75
|
+
Extract patterns from code.
|
|
76
|
+
|
|
77
|
+
```typescript
|
|
78
|
+
interface PatternMiner {
|
|
79
|
+
mine(corpus: CodeCorpus): Promise<PatternCandidate[]>;
|
|
80
|
+
setMinOccurrences(count: number): void;
|
|
81
|
+
}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Abstractor
|
|
85
|
+
|
|
86
|
+
Hierarchical abstraction of patterns.
|
|
87
|
+
|
|
88
|
+
```typescript
|
|
89
|
+
interface Abstractor {
|
|
90
|
+
extractConcretePatterns(candidates: PatternCandidate[]): ConcretePattern[];
|
|
91
|
+
parameterize(patterns: ConcretePattern[]): ParameterizedTemplate[];
|
|
92
|
+
generalize(templates: ParameterizedTemplate[]): AbstractConcept[];
|
|
93
|
+
}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### TypeAnalyzer
|
|
97
|
+
|
|
98
|
+
Type-directed search and analysis.
|
|
99
|
+
|
|
100
|
+
```typescript
|
|
101
|
+
interface TypeAnalyzer {
|
|
102
|
+
isCompatible(source: TypeSignature, target: TypeSignature): boolean;
|
|
103
|
+
filterByType(candidates: PatternCandidate[], expectedType: TypeSignature): PatternCandidate[];
|
|
104
|
+
scoreByTypeMatch(candidate: PatternCandidate, context: TypeContext): number;
|
|
105
|
+
}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## Requirements
|
|
109
|
+
|
|
110
|
+
- REQ-LL-001: 階層的抽象化 (3+ levels)
|
|
111
|
+
- REQ-LL-002: ライブラリ成長 (auto-expand)
|
|
112
|
+
- REQ-LL-003: 型指向探索 (type-directed search)
|
|
113
|
+
- REQ-LL-004: E-graph最適化
|
|
114
|
+
|
|
115
|
+
## License
|
|
116
|
+
|
|
117
|
+
MIT
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LibraryLearner - High-level API for library learning
|
|
3
|
+
*
|
|
4
|
+
* REQ-LL-001: 階層的抽象化
|
|
5
|
+
* REQ-LL-002: ライブラリ成長
|
|
6
|
+
* REQ-LL-003: 型指向探索
|
|
7
|
+
* REQ-LL-004: E-graph最適化
|
|
8
|
+
*
|
|
9
|
+
* DES-PHASE2-001: High-level API
|
|
10
|
+
*/
|
|
11
|
+
import type { CodeCorpus, LearnResult, Specification, SynthesizeOptions, SynthesisResult, LibraryStats, LibraryLearnerConfig, LearnedPattern } from './types.js';
|
|
12
|
+
import { type LibraryStore } from './library/LibraryStore.js';
|
|
13
|
+
/**
|
|
14
|
+
* LibraryLearner interface
|
|
15
|
+
*/
|
|
16
|
+
export interface LibraryLearner {
|
|
17
|
+
/** Learn patterns from a code corpus */
|
|
18
|
+
learnFromCorpus(corpus: CodeCorpus): Promise<LearnResult>;
|
|
19
|
+
/** Incremental learning from single code snippet */
|
|
20
|
+
learnIncremental(code: string): Promise<void>;
|
|
21
|
+
/** Synthesize code using learned library */
|
|
22
|
+
synthesize(spec: Specification, options?: SynthesizeOptions): Promise<SynthesisResult>;
|
|
23
|
+
/** Get the pattern library */
|
|
24
|
+
getLibrary(): LibraryStore;
|
|
25
|
+
/** Get library statistics */
|
|
26
|
+
getStats(): Promise<LibraryStats>;
|
|
27
|
+
/** Export library data */
|
|
28
|
+
exportLibrary(): Promise<LearnedPattern[]>;
|
|
29
|
+
/** Import library data */
|
|
30
|
+
importLibrary(patterns: LearnedPattern[]): Promise<void>;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Factory function to create a LibraryLearner
|
|
34
|
+
*/
|
|
35
|
+
export declare function createLibraryLearner(config?: LibraryLearnerConfig): LibraryLearner;
|
|
36
|
+
//# sourceMappingURL=LibraryLearner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LibraryLearner.d.ts","sourceRoot":"","sources":["../src/LibraryLearner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,oBAAoB,EACpB,cAAc,EAEf,MAAM,YAAY,CAAC;AAKpB,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAMlF;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,wCAAwC;IACxC,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAE1D,oDAAoD;IACpD,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9C,4CAA4C;IAC5C,UAAU,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAEvF,8BAA8B;IAC9B,UAAU,IAAI,YAAY,CAAC;IAE3B,6BAA6B;IAC7B,QAAQ,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC;IAElC,0BAA0B;IAC1B,aAAa,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAE3C,0BAA0B;IAC1B,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1D;AAoOD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,CAAC,EAAE,oBAAoB,GAAG,cAAc,CAElF"}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LibraryLearner - High-level API for library learning
|
|
3
|
+
*
|
|
4
|
+
* REQ-LL-001: 階層的抽象化
|
|
5
|
+
* REQ-LL-002: ライブラリ成長
|
|
6
|
+
* REQ-LL-003: 型指向探索
|
|
7
|
+
* REQ-LL-004: E-graph最適化
|
|
8
|
+
*
|
|
9
|
+
* DES-PHASE2-001: High-level API
|
|
10
|
+
*/
|
|
11
|
+
import { createPatternMiner } from './abstraction/PatternMiner.js';
|
|
12
|
+
import { createAbstractor } from './abstraction/Abstractor.js';
|
|
13
|
+
import { createTypeAnalyzer } from './abstraction/TypeAnalyzer.js';
|
|
14
|
+
import { createLibraryStore } from './library/LibraryStore.js';
|
|
15
|
+
import { createConsolidator } from './library/Consolidator.js';
|
|
16
|
+
import { createPruner } from './library/Pruner.js';
|
|
17
|
+
import { createEGraphBuilder } from './egraph/EGraphBuilder.js';
|
|
18
|
+
import { createExtractor } from './egraph/Extractor.js';
|
|
19
|
+
/**
|
|
20
|
+
* Default LibraryLearner implementation
|
|
21
|
+
*/
|
|
22
|
+
class LibraryLearnerImpl {
|
|
23
|
+
config;
|
|
24
|
+
patternMiner;
|
|
25
|
+
abstractor;
|
|
26
|
+
// @ts-expect-error - Will be used in type-directed synthesis
|
|
27
|
+
typeAnalyzer;
|
|
28
|
+
libraryStore;
|
|
29
|
+
consolidator;
|
|
30
|
+
// @ts-expect-error - Will be used in maintenance operations
|
|
31
|
+
pruner;
|
|
32
|
+
egraphBuilder;
|
|
33
|
+
extractor;
|
|
34
|
+
constructor(config = {}) {
|
|
35
|
+
this.config = {
|
|
36
|
+
abstractionLevels: config.abstractionLevels ?? 3,
|
|
37
|
+
minOccurrences: config.minOccurrences ?? 2,
|
|
38
|
+
decayRate: config.decayRate ?? 0.95,
|
|
39
|
+
pruneThreshold: config.pruneThreshold ?? 0.1,
|
|
40
|
+
useEGraph: config.useEGraph ?? true,
|
|
41
|
+
storagePath: config.storagePath ?? '.musubix/library',
|
|
42
|
+
};
|
|
43
|
+
// Initialize components
|
|
44
|
+
this.patternMiner = createPatternMiner({
|
|
45
|
+
minOccurrences: this.config.minOccurrences,
|
|
46
|
+
});
|
|
47
|
+
this.abstractor = createAbstractor();
|
|
48
|
+
this.typeAnalyzer = createTypeAnalyzer();
|
|
49
|
+
this.libraryStore = createLibraryStore();
|
|
50
|
+
this.consolidator = createConsolidator();
|
|
51
|
+
this.pruner = createPruner();
|
|
52
|
+
this.egraphBuilder = createEGraphBuilder();
|
|
53
|
+
this.extractor = createExtractor();
|
|
54
|
+
}
|
|
55
|
+
async learnFromCorpus(corpus) {
|
|
56
|
+
const startTime = Date.now();
|
|
57
|
+
// Step 1: Mine patterns
|
|
58
|
+
const candidates = await this.patternMiner.mine(corpus);
|
|
59
|
+
// Step 2: Hierarchical abstraction
|
|
60
|
+
const { concrete, templates, concepts } = this.abstractor.abstract(candidates);
|
|
61
|
+
// Step 3: Store patterns in library
|
|
62
|
+
let patternsAdded = 0;
|
|
63
|
+
// Add level 1 patterns (concrete)
|
|
64
|
+
for (const pattern of concrete) {
|
|
65
|
+
await this.libraryStore.add(this.createLearnedPattern(pattern, 1));
|
|
66
|
+
patternsAdded++;
|
|
67
|
+
}
|
|
68
|
+
// Add level 2 patterns (templates) if configured
|
|
69
|
+
if (this.config.abstractionLevels >= 2) {
|
|
70
|
+
for (const template of templates) {
|
|
71
|
+
await this.libraryStore.add({
|
|
72
|
+
id: template.id,
|
|
73
|
+
name: `Template: ${template.id}`,
|
|
74
|
+
level: 2,
|
|
75
|
+
content: template,
|
|
76
|
+
usageCount: 0,
|
|
77
|
+
confidence: 0.7,
|
|
78
|
+
createdAt: new Date(),
|
|
79
|
+
lastUsedAt: new Date(),
|
|
80
|
+
tags: ['template'],
|
|
81
|
+
});
|
|
82
|
+
patternsAdded++;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// Add level 3 patterns (concepts) if configured
|
|
86
|
+
if (this.config.abstractionLevels >= 3) {
|
|
87
|
+
for (const concept of concepts) {
|
|
88
|
+
await this.libraryStore.add({
|
|
89
|
+
id: concept.id,
|
|
90
|
+
name: concept.name,
|
|
91
|
+
level: 3,
|
|
92
|
+
content: concept,
|
|
93
|
+
usageCount: 0,
|
|
94
|
+
confidence: 0.6,
|
|
95
|
+
createdAt: new Date(),
|
|
96
|
+
lastUsedAt: new Date(),
|
|
97
|
+
tags: ['concept', concept.category],
|
|
98
|
+
});
|
|
99
|
+
patternsAdded++;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// Step 4: Consolidate similar patterns
|
|
103
|
+
const consolidationReport = await this.consolidator.consolidateLibrary(this.libraryStore);
|
|
104
|
+
return {
|
|
105
|
+
patternsExtracted: candidates.length,
|
|
106
|
+
patternsAdded,
|
|
107
|
+
patternsConsolidated: consolidationReport.patternsMerged,
|
|
108
|
+
duration: Date.now() - startTime,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
async learnIncremental(code) {
|
|
112
|
+
const corpus = {
|
|
113
|
+
id: `incremental-${Date.now()}`,
|
|
114
|
+
files: [
|
|
115
|
+
{
|
|
116
|
+
path: 'incremental.ts',
|
|
117
|
+
content: code,
|
|
118
|
+
language: 'typescript',
|
|
119
|
+
},
|
|
120
|
+
],
|
|
121
|
+
};
|
|
122
|
+
await this.learnFromCorpus(corpus);
|
|
123
|
+
}
|
|
124
|
+
async synthesize(spec, options = {}) {
|
|
125
|
+
const startTime = Date.now();
|
|
126
|
+
const patternsUsed = [];
|
|
127
|
+
// Get all patterns from library
|
|
128
|
+
const patterns = await this.libraryStore.getAll();
|
|
129
|
+
// Filter patterns by type if specified
|
|
130
|
+
let candidates = patterns;
|
|
131
|
+
if (spec.type && options.useTypeDirected !== false) {
|
|
132
|
+
// Use type analyzer to filter
|
|
133
|
+
// Note: This is simplified - full implementation would need pattern type inference
|
|
134
|
+
candidates = patterns.filter((p) => p.confidence > 0.5);
|
|
135
|
+
}
|
|
136
|
+
// Build e-graph if enabled
|
|
137
|
+
if (this.config.useEGraph && options.useEGraph !== false) {
|
|
138
|
+
const graph = this.egraphBuilder.build(candidates);
|
|
139
|
+
const optimal = this.extractor.extract(graph, (_node, childCosts) => {
|
|
140
|
+
// Simple cost function: prefer smaller expressions
|
|
141
|
+
return 1 + childCosts.reduce((a, b) => a + b, 0);
|
|
142
|
+
});
|
|
143
|
+
if (optimal.cost < Infinity) {
|
|
144
|
+
patternsUsed.push(...candidates.slice(0, 1).map((p) => p.id));
|
|
145
|
+
return {
|
|
146
|
+
success: true,
|
|
147
|
+
program: optimal.ast,
|
|
148
|
+
candidates: [optimal.ast],
|
|
149
|
+
duration: Date.now() - startTime,
|
|
150
|
+
searchNodes: candidates.length,
|
|
151
|
+
patternsUsed,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
// Fallback: no synthesis possible
|
|
156
|
+
return {
|
|
157
|
+
success: false,
|
|
158
|
+
duration: Date.now() - startTime,
|
|
159
|
+
searchNodes: candidates.length,
|
|
160
|
+
patternsUsed,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
getLibrary() {
|
|
164
|
+
return this.libraryStore;
|
|
165
|
+
}
|
|
166
|
+
async getStats() {
|
|
167
|
+
const patterns = await this.libraryStore.getAll();
|
|
168
|
+
const patternsByLevel = { 1: 0, 2: 0, 3: 0 };
|
|
169
|
+
let totalConfidence = 0;
|
|
170
|
+
let totalUsageCount = 0;
|
|
171
|
+
for (const pattern of patterns) {
|
|
172
|
+
patternsByLevel[pattern.level]++;
|
|
173
|
+
totalConfidence += pattern.confidence;
|
|
174
|
+
totalUsageCount += pattern.usageCount;
|
|
175
|
+
}
|
|
176
|
+
const sortedByUsage = [...patterns].sort((a, b) => b.usageCount - a.usageCount);
|
|
177
|
+
return {
|
|
178
|
+
totalPatterns: patterns.length,
|
|
179
|
+
patternsByLevel,
|
|
180
|
+
averageConfidence: patterns.length > 0 ? totalConfidence / patterns.length : 0,
|
|
181
|
+
averageUsageCount: patterns.length > 0 ? totalUsageCount / patterns.length : 0,
|
|
182
|
+
mostUsed: sortedByUsage.slice(0, 5).map((p) => p.id),
|
|
183
|
+
leastUsed: sortedByUsage.slice(-5).map((p) => p.id),
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
async exportLibrary() {
|
|
187
|
+
return this.libraryStore.getAll();
|
|
188
|
+
}
|
|
189
|
+
async importLibrary(patterns) {
|
|
190
|
+
for (const pattern of patterns) {
|
|
191
|
+
await this.libraryStore.add(pattern);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
// =========================================================================
|
|
195
|
+
// Private methods
|
|
196
|
+
// =========================================================================
|
|
197
|
+
createLearnedPattern(concrete, level) {
|
|
198
|
+
return {
|
|
199
|
+
id: concrete.id,
|
|
200
|
+
name: `Pattern: ${concrete.ast.type}`,
|
|
201
|
+
level,
|
|
202
|
+
content: concrete,
|
|
203
|
+
usageCount: 0,
|
|
204
|
+
confidence: Math.min(0.5 + concrete.occurrenceCount * 0.1, 1.0),
|
|
205
|
+
createdAt: new Date(),
|
|
206
|
+
lastUsedAt: new Date(),
|
|
207
|
+
tags: [concrete.ast.type.toLowerCase()],
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Factory function to create a LibraryLearner
|
|
213
|
+
*/
|
|
214
|
+
export function createLibraryLearner(config) {
|
|
215
|
+
return new LibraryLearnerImpl(config);
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=LibraryLearner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LibraryLearner.js","sourceRoot":"","sources":["../src/LibraryLearner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Abstractor - Hierarchical abstraction of patterns
|
|
3
|
+
*
|
|
4
|
+
* REQ-LL-001: 階層的抽象化
|
|
5
|
+
* DES-PHASE2-001: Abstraction Engine / Abstractor
|
|
6
|
+
*/
|
|
7
|
+
import type { PatternCandidate, ConcretePattern, ParameterizedTemplate, AbstractConcept } from '../types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Abstractor interface
|
|
10
|
+
*/
|
|
11
|
+
export interface Abstractor {
|
|
12
|
+
/** Level 1: Extract concrete patterns */
|
|
13
|
+
extractConcretePatterns(candidates: PatternCandidate[]): ConcretePattern[];
|
|
14
|
+
/** Level 2: Parameterize patterns into templates */
|
|
15
|
+
parameterize(patterns: ConcretePattern[]): ParameterizedTemplate[];
|
|
16
|
+
/** Level 3: Generalize templates into abstract concepts */
|
|
17
|
+
generalize(templates: ParameterizedTemplate[]): AbstractConcept[];
|
|
18
|
+
/** Full abstraction pipeline */
|
|
19
|
+
abstract(candidates: PatternCandidate[]): {
|
|
20
|
+
concrete: ConcretePattern[];
|
|
21
|
+
templates: ParameterizedTemplate[];
|
|
22
|
+
concepts: AbstractConcept[];
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Factory function to create an Abstractor
|
|
27
|
+
*/
|
|
28
|
+
export declare function createAbstractor(): Abstractor;
|
|
29
|
+
//# sourceMappingURL=Abstractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Abstractor.d.ts","sourceRoot":"","sources":["../../src/abstraction/Abstractor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,qBAAqB,EACrB,eAAe,EAIhB,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,yCAAyC;IACzC,uBAAuB,CAAC,UAAU,EAAE,gBAAgB,EAAE,GAAG,eAAe,EAAE,CAAC;IAE3E,oDAAoD;IACpD,YAAY,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,qBAAqB,EAAE,CAAC;IAEnE,2DAA2D;IAC3D,UAAU,CAAC,SAAS,EAAE,qBAAqB,EAAE,GAAG,eAAe,EAAE,CAAC;IAElE,gCAAgC;IAChC,QAAQ,CAAC,UAAU,EAAE,gBAAgB,EAAE,GAAG;QACxC,QAAQ,EAAE,eAAe,EAAE,CAAC;QAC5B,SAAS,EAAE,qBAAqB,EAAE,CAAC;QACnC,QAAQ,EAAE,eAAe,EAAE,CAAC;KAC7B,CAAC;CACH;AAoVD;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,UAAU,CAE7C"}
|