@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,367 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IterativeCompressor - Iterative Pattern Compression
|
|
3
|
+
* @module @nahisaho/musubix-library-learner
|
|
4
|
+
* @see TSK-LL-103
|
|
5
|
+
* @see DES-LL-103
|
|
6
|
+
* @see REQ-LL-103 30%+ size reduction, 95% coverage retention
|
|
7
|
+
*/
|
|
8
|
+
// ============================================================================
|
|
9
|
+
// Default Implementation
|
|
10
|
+
// ============================================================================
|
|
11
|
+
/**
|
|
12
|
+
* Default IterativeCompressor implementation
|
|
13
|
+
*/
|
|
14
|
+
export class DefaultIterativeCompressor {
|
|
15
|
+
config;
|
|
16
|
+
statistics;
|
|
17
|
+
constructor(config) {
|
|
18
|
+
this.config = {
|
|
19
|
+
similarityThreshold: config?.similarityThreshold ?? 0.75,
|
|
20
|
+
minPatterns: config?.minPatterns ?? 100,
|
|
21
|
+
targetReduction: config?.targetReduction ?? 0.3,
|
|
22
|
+
maxIterations: config?.maxIterations ?? 10,
|
|
23
|
+
};
|
|
24
|
+
this.statistics = {
|
|
25
|
+
totalCompressions: 0,
|
|
26
|
+
averageReduction: 0,
|
|
27
|
+
lastCompressionTime: null,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Check if compression should be triggered
|
|
32
|
+
*/
|
|
33
|
+
shouldCompress(patterns) {
|
|
34
|
+
return patterns.length >= this.config.minPatterns;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Compress patterns using iterative merging
|
|
38
|
+
*/
|
|
39
|
+
async compress(patterns) {
|
|
40
|
+
if (patterns.length === 0) {
|
|
41
|
+
return {
|
|
42
|
+
originalCount: 0,
|
|
43
|
+
compressedCount: 0,
|
|
44
|
+
mergedGroups: [],
|
|
45
|
+
coverageRetained: 1.0,
|
|
46
|
+
compressionRatio: 0,
|
|
47
|
+
compressedPatterns: [],
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
const originalCount = patterns.length;
|
|
51
|
+
const mergedGroups = [];
|
|
52
|
+
let currentPatterns = [...patterns];
|
|
53
|
+
// Iterative compression until target reached or convergence
|
|
54
|
+
for (let iteration = 0; iteration < this.config.maxIterations; iteration++) {
|
|
55
|
+
const { merged, groups } = await this.compressIteration(currentPatterns);
|
|
56
|
+
if (groups.length === 0) {
|
|
57
|
+
// No more merges possible
|
|
58
|
+
break;
|
|
59
|
+
}
|
|
60
|
+
mergedGroups.push(...groups);
|
|
61
|
+
currentPatterns = merged;
|
|
62
|
+
// Check if target reduction achieved
|
|
63
|
+
const currentReduction = 1 - currentPatterns.length / originalCount;
|
|
64
|
+
if (currentReduction >= this.config.targetReduction) {
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// Calculate coverage (based on usage counts)
|
|
69
|
+
const originalUsage = patterns.reduce((sum, p) => sum + p.usageCount, 0);
|
|
70
|
+
const compressedUsage = currentPatterns.reduce((sum, p) => sum + p.usageCount, 0);
|
|
71
|
+
const coverageRetained = originalUsage > 0 ? compressedUsage / originalUsage : 1.0;
|
|
72
|
+
const compressionRatio = 1 - currentPatterns.length / originalCount;
|
|
73
|
+
// Update statistics
|
|
74
|
+
this.updateStatistics(compressionRatio);
|
|
75
|
+
return {
|
|
76
|
+
originalCount,
|
|
77
|
+
compressedCount: currentPatterns.length,
|
|
78
|
+
mergedGroups,
|
|
79
|
+
coverageRetained: Math.min(coverageRetained, 1.0),
|
|
80
|
+
compressionRatio,
|
|
81
|
+
compressedPatterns: currentPatterns,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Single compression iteration
|
|
86
|
+
*/
|
|
87
|
+
async compressIteration(patterns) {
|
|
88
|
+
const clusters = this.findSimilarClusters(patterns);
|
|
89
|
+
const groups = [];
|
|
90
|
+
const merged = [];
|
|
91
|
+
const mergedIds = new Set();
|
|
92
|
+
// Merge each cluster
|
|
93
|
+
for (const cluster of clusters) {
|
|
94
|
+
if (cluster.length > 1) {
|
|
95
|
+
const mergedPattern = await this.mergePatterns(cluster);
|
|
96
|
+
merged.push(mergedPattern);
|
|
97
|
+
groups.push({
|
|
98
|
+
mergedId: mergedPattern.id,
|
|
99
|
+
sourceIds: cluster.map((p) => p.id),
|
|
100
|
+
similarityScore: this.calculateClusterSimilarity(cluster),
|
|
101
|
+
});
|
|
102
|
+
cluster.forEach((p) => mergedIds.add(p.id));
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// Add patterns that weren't merged
|
|
106
|
+
for (const pattern of patterns) {
|
|
107
|
+
if (!mergedIds.has(pattern.id)) {
|
|
108
|
+
merged.push(pattern);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return { merged, groups };
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Find clusters of similar patterns
|
|
115
|
+
*/
|
|
116
|
+
findSimilarClusters(patterns) {
|
|
117
|
+
const clusters = [];
|
|
118
|
+
const used = new Set();
|
|
119
|
+
for (const pattern of patterns) {
|
|
120
|
+
if (used.has(pattern.id))
|
|
121
|
+
continue;
|
|
122
|
+
const cluster = [pattern];
|
|
123
|
+
used.add(pattern.id);
|
|
124
|
+
for (const other of patterns) {
|
|
125
|
+
if (used.has(other.id))
|
|
126
|
+
continue;
|
|
127
|
+
const similarity = this.calculateSimilarity(pattern, other);
|
|
128
|
+
if (similarity >= this.config.similarityThreshold) {
|
|
129
|
+
cluster.push(other);
|
|
130
|
+
used.add(other.id);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
if (cluster.length > 1) {
|
|
134
|
+
clusters.push(cluster);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return clusters;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Calculate similarity between two patterns
|
|
141
|
+
*/
|
|
142
|
+
calculateSimilarity(p1, p2) {
|
|
143
|
+
if (p1.id === p2.id)
|
|
144
|
+
return 1.0;
|
|
145
|
+
let similarity = 0;
|
|
146
|
+
let factors = 0;
|
|
147
|
+
// Name similarity (Jaccard on words)
|
|
148
|
+
const words1 = this.tokenizeName(p1.name);
|
|
149
|
+
const words2 = this.tokenizeName(p2.name);
|
|
150
|
+
const nameSimilarity = this.jaccardSimilarity(words1, words2);
|
|
151
|
+
similarity += nameSimilarity * 0.3;
|
|
152
|
+
factors += 0.3;
|
|
153
|
+
// Tag similarity
|
|
154
|
+
const tagSimilarity = this.jaccardSimilarity(new Set(p1.tags), new Set(p2.tags));
|
|
155
|
+
similarity += tagSimilarity * 0.2;
|
|
156
|
+
factors += 0.2;
|
|
157
|
+
// Level match bonus
|
|
158
|
+
if (p1.level === p2.level) {
|
|
159
|
+
similarity += 0.1;
|
|
160
|
+
}
|
|
161
|
+
factors += 0.1;
|
|
162
|
+
// AST structure similarity (simplified)
|
|
163
|
+
const astSimilarity = this.calculateASTSimilarity(p1, p2);
|
|
164
|
+
similarity += astSimilarity * 0.4;
|
|
165
|
+
factors += 0.4;
|
|
166
|
+
return factors > 0 ? similarity / factors : 0;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Tokenize pattern name into words
|
|
170
|
+
*/
|
|
171
|
+
tokenizeName(name) {
|
|
172
|
+
// Split on camelCase, PascalCase, snake_case, kebab-case
|
|
173
|
+
const words = name
|
|
174
|
+
.replace(/([a-z])([A-Z])/g, '$1 $2')
|
|
175
|
+
.replace(/[_-]/g, ' ')
|
|
176
|
+
.toLowerCase()
|
|
177
|
+
.split(/\s+/)
|
|
178
|
+
.filter((w) => w.length > 0);
|
|
179
|
+
return new Set(words);
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Jaccard similarity between two sets
|
|
183
|
+
*/
|
|
184
|
+
jaccardSimilarity(set1, set2) {
|
|
185
|
+
const intersection = new Set([...set1].filter((x) => set2.has(x)));
|
|
186
|
+
const union = new Set([...set1, ...set2]);
|
|
187
|
+
if (union.size === 0)
|
|
188
|
+
return 0;
|
|
189
|
+
return intersection.size / union.size;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Calculate AST structure similarity
|
|
193
|
+
*/
|
|
194
|
+
calculateASTSimilarity(p1, p2) {
|
|
195
|
+
const content1 = p1.content;
|
|
196
|
+
const content2 = p2.content;
|
|
197
|
+
if (!content1?.ast || !content2?.ast)
|
|
198
|
+
return 0;
|
|
199
|
+
// Simplified: compare AST type
|
|
200
|
+
if (content1.ast.type === content2.ast.type) {
|
|
201
|
+
return 0.8;
|
|
202
|
+
}
|
|
203
|
+
return 0.2;
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Calculate average similarity within a cluster
|
|
207
|
+
*/
|
|
208
|
+
calculateClusterSimilarity(cluster) {
|
|
209
|
+
if (cluster.length < 2)
|
|
210
|
+
return 1.0;
|
|
211
|
+
let totalSimilarity = 0;
|
|
212
|
+
let count = 0;
|
|
213
|
+
for (let i = 0; i < cluster.length; i++) {
|
|
214
|
+
for (let j = i + 1; j < cluster.length; j++) {
|
|
215
|
+
totalSimilarity += this.calculateSimilarity(cluster[i], cluster[j]);
|
|
216
|
+
count++;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
return count > 0 ? totalSimilarity / count : 0;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Merge similar patterns into one
|
|
223
|
+
*/
|
|
224
|
+
async mergePatterns(patterns) {
|
|
225
|
+
if (patterns.length === 0) {
|
|
226
|
+
throw new Error('Cannot merge empty pattern array');
|
|
227
|
+
}
|
|
228
|
+
if (patterns.length === 1) {
|
|
229
|
+
return patterns[0];
|
|
230
|
+
}
|
|
231
|
+
// Use the most confident pattern as base
|
|
232
|
+
const sortedByConfidence = [...patterns].sort((a, b) => b.confidence - a.confidence);
|
|
233
|
+
const base = sortedByConfidence[0];
|
|
234
|
+
// Aggregate usage counts
|
|
235
|
+
const totalUsage = patterns.reduce((sum, p) => sum + p.usageCount, 0);
|
|
236
|
+
// Combine tags
|
|
237
|
+
const allTags = new Set();
|
|
238
|
+
patterns.forEach((p) => p.tags.forEach((t) => allTags.add(t)));
|
|
239
|
+
// Create merged pattern
|
|
240
|
+
const merged = {
|
|
241
|
+
id: `MERGED-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,
|
|
242
|
+
name: this.generateMergedName(patterns),
|
|
243
|
+
level: base.level,
|
|
244
|
+
content: base.content,
|
|
245
|
+
usageCount: totalUsage,
|
|
246
|
+
confidence: base.confidence, // Keep highest confidence
|
|
247
|
+
createdAt: new Date(),
|
|
248
|
+
lastUsedAt: new Date(),
|
|
249
|
+
tags: Array.from(allTags),
|
|
250
|
+
};
|
|
251
|
+
return merged;
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Generate a name for merged pattern
|
|
255
|
+
*/
|
|
256
|
+
generateMergedName(patterns) {
|
|
257
|
+
// Find common prefix
|
|
258
|
+
const names = patterns.map((p) => p.name);
|
|
259
|
+
const prefix = this.findCommonPrefix(names);
|
|
260
|
+
if (prefix.length >= 3) {
|
|
261
|
+
return `${prefix}*`;
|
|
262
|
+
}
|
|
263
|
+
return `Merged(${patterns.length})`;
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Find common prefix among strings
|
|
267
|
+
*/
|
|
268
|
+
findCommonPrefix(strings) {
|
|
269
|
+
if (strings.length === 0)
|
|
270
|
+
return '';
|
|
271
|
+
if (strings.length === 1)
|
|
272
|
+
return strings[0];
|
|
273
|
+
let prefix = '';
|
|
274
|
+
const first = strings[0];
|
|
275
|
+
for (let i = 0; i < first.length; i++) {
|
|
276
|
+
const char = first[i];
|
|
277
|
+
if (strings.every((s) => s[i] === char)) {
|
|
278
|
+
prefix += char;
|
|
279
|
+
}
|
|
280
|
+
else {
|
|
281
|
+
break;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
return prefix;
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Update statistics after compression
|
|
288
|
+
*/
|
|
289
|
+
updateStatistics(compressionRatio) {
|
|
290
|
+
const prevTotal = this.statistics.totalCompressions;
|
|
291
|
+
const prevAvg = this.statistics.averageReduction;
|
|
292
|
+
this.statistics.totalCompressions++;
|
|
293
|
+
this.statistics.averageReduction =
|
|
294
|
+
(prevAvg * prevTotal + compressionRatio) / (prevTotal + 1);
|
|
295
|
+
this.statistics.lastCompressionTime = new Date();
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Get compression statistics
|
|
299
|
+
*/
|
|
300
|
+
getStatistics() {
|
|
301
|
+
return { ...this.statistics };
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Reset statistics
|
|
305
|
+
*/
|
|
306
|
+
resetStatistics() {
|
|
307
|
+
this.statistics = {
|
|
308
|
+
totalCompressions: 0,
|
|
309
|
+
averageReduction: 0,
|
|
310
|
+
lastCompressionTime: null,
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Get current configuration
|
|
315
|
+
*/
|
|
316
|
+
getConfig() {
|
|
317
|
+
return { ...this.config };
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Update configuration
|
|
321
|
+
*/
|
|
322
|
+
updateConfig(config) {
|
|
323
|
+
this.config = { ...this.config, ...config };
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Serialize to JSON
|
|
327
|
+
*/
|
|
328
|
+
toJSON() {
|
|
329
|
+
return JSON.stringify({
|
|
330
|
+
config: this.config,
|
|
331
|
+
statistics: {
|
|
332
|
+
...this.statistics,
|
|
333
|
+
lastCompressionTime: this.statistics.lastCompressionTime?.toISOString(),
|
|
334
|
+
},
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Deserialize from JSON
|
|
339
|
+
*/
|
|
340
|
+
fromJSON(json) {
|
|
341
|
+
const data = JSON.parse(json);
|
|
342
|
+
if (data.config) {
|
|
343
|
+
this.config = { ...this.config, ...data.config };
|
|
344
|
+
}
|
|
345
|
+
if (data.statistics) {
|
|
346
|
+
this.statistics = {
|
|
347
|
+
totalCompressions: data.statistics.totalCompressions ?? 0,
|
|
348
|
+
averageReduction: data.statistics.averageReduction ?? 0,
|
|
349
|
+
lastCompressionTime: data.statistics.lastCompressionTime
|
|
350
|
+
? new Date(data.statistics.lastCompressionTime)
|
|
351
|
+
: null,
|
|
352
|
+
};
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
// ============================================================================
|
|
357
|
+
// Factory Function
|
|
358
|
+
// ============================================================================
|
|
359
|
+
/**
|
|
360
|
+
* Create an IterativeCompressor instance
|
|
361
|
+
* @param config - Optional configuration
|
|
362
|
+
* @returns IterativeCompressor instance
|
|
363
|
+
*/
|
|
364
|
+
export function createIterativeCompressor(config) {
|
|
365
|
+
return new DefaultIterativeCompressor(config);
|
|
366
|
+
}
|
|
367
|
+
//# sourceMappingURL=IterativeCompressor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IterativeCompressor.js","sourceRoot":"","sources":["../../src/library/IterativeCompressor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PatternVersionManager - Pattern Version History Management
|
|
3
|
+
* @module @nahisaho/musubix-library-learner
|
|
4
|
+
* @see TSK-LL-105
|
|
5
|
+
* @see DES-LL-105
|
|
6
|
+
* @see REQ-LL-105 Pattern versioning with rollback capability
|
|
7
|
+
*/
|
|
8
|
+
import type { LearnedPattern } from '../types.js';
|
|
9
|
+
/**
|
|
10
|
+
* PatternVersionManager configuration
|
|
11
|
+
*/
|
|
12
|
+
export interface PatternVersionManagerConfig {
|
|
13
|
+
/** Maximum versions to keep per pattern (default: 50) */
|
|
14
|
+
maxVersionsPerPattern: number;
|
|
15
|
+
/** Auto cleanup old versions when limit exceeded */
|
|
16
|
+
autoCleanup: boolean;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Version metadata
|
|
20
|
+
*/
|
|
21
|
+
export interface VersionMetadata {
|
|
22
|
+
/** Reason for the change */
|
|
23
|
+
reason?: string;
|
|
24
|
+
/** Author of the change */
|
|
25
|
+
author?: string;
|
|
26
|
+
/** Additional metadata */
|
|
27
|
+
[key: string]: unknown;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Version history entry
|
|
31
|
+
*/
|
|
32
|
+
export interface VersionEntry {
|
|
33
|
+
/** Version identifier */
|
|
34
|
+
versionId: string;
|
|
35
|
+
/** Version number (sequential) */
|
|
36
|
+
versionNumber: number;
|
|
37
|
+
/** Timestamp of version creation */
|
|
38
|
+
timestamp: Date;
|
|
39
|
+
/** Pattern snapshot */
|
|
40
|
+
snapshot: LearnedPattern;
|
|
41
|
+
/** Version metadata */
|
|
42
|
+
metadata?: VersionMetadata;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Version comparison result
|
|
46
|
+
*/
|
|
47
|
+
export interface VersionDiff {
|
|
48
|
+
/** From version */
|
|
49
|
+
fromVersion: string;
|
|
50
|
+
/** To version */
|
|
51
|
+
toVersion: string;
|
|
52
|
+
/** List of changes */
|
|
53
|
+
changes: VersionChange[];
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Individual change in a version diff
|
|
57
|
+
*/
|
|
58
|
+
export interface VersionChange {
|
|
59
|
+
/** Field that changed */
|
|
60
|
+
field: string;
|
|
61
|
+
/** Old value */
|
|
62
|
+
oldValue: unknown;
|
|
63
|
+
/** New value */
|
|
64
|
+
newValue: unknown;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Version statistics
|
|
68
|
+
*/
|
|
69
|
+
export interface VersionStatistics {
|
|
70
|
+
/** Total versions across all patterns */
|
|
71
|
+
totalVersions: number;
|
|
72
|
+
/** Total patterns with versions */
|
|
73
|
+
totalPatterns: number;
|
|
74
|
+
/** Average versions per pattern */
|
|
75
|
+
averageVersionsPerPattern: number;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* PatternVersionManager interface
|
|
79
|
+
*/
|
|
80
|
+
export interface PatternVersionManager {
|
|
81
|
+
/**
|
|
82
|
+
* Record a new version of a pattern
|
|
83
|
+
*/
|
|
84
|
+
recordVersion(pattern: LearnedPattern, metadata?: VersionMetadata): string;
|
|
85
|
+
/**
|
|
86
|
+
* Get version history for a pattern
|
|
87
|
+
*/
|
|
88
|
+
getHistory(patternId: string): VersionEntry[];
|
|
89
|
+
/**
|
|
90
|
+
* Get specific version
|
|
91
|
+
*/
|
|
92
|
+
getVersion(patternId: string, versionId: string): LearnedPattern | undefined;
|
|
93
|
+
/**
|
|
94
|
+
* Get latest version
|
|
95
|
+
*/
|
|
96
|
+
getLatestVersion(patternId: string): LearnedPattern | undefined;
|
|
97
|
+
/**
|
|
98
|
+
* Rollback to specific version
|
|
99
|
+
*/
|
|
100
|
+
rollback(patternId: string, versionId: string): Promise<LearnedPattern>;
|
|
101
|
+
/**
|
|
102
|
+
* Compare two versions
|
|
103
|
+
*/
|
|
104
|
+
compareVersions(patternId: string, versionId1: string, versionId2: string): VersionDiff;
|
|
105
|
+
/**
|
|
106
|
+
* Get statistics
|
|
107
|
+
*/
|
|
108
|
+
getStatistics(): VersionStatistics;
|
|
109
|
+
/**
|
|
110
|
+
* Serialize to JSON
|
|
111
|
+
*/
|
|
112
|
+
toJSON(): string;
|
|
113
|
+
/**
|
|
114
|
+
* Deserialize from JSON
|
|
115
|
+
*/
|
|
116
|
+
fromJSON(json: string): void;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Default PatternVersionManager implementation
|
|
120
|
+
*/
|
|
121
|
+
export declare class DefaultPatternVersionManager implements PatternVersionManager {
|
|
122
|
+
private config;
|
|
123
|
+
private versions;
|
|
124
|
+
private versionCounter;
|
|
125
|
+
constructor(config?: Partial<PatternVersionManagerConfig>);
|
|
126
|
+
/**
|
|
127
|
+
* Record a new version of a pattern
|
|
128
|
+
*/
|
|
129
|
+
recordVersion(pattern: LearnedPattern, metadata?: VersionMetadata): string;
|
|
130
|
+
/**
|
|
131
|
+
* Get version history for a pattern
|
|
132
|
+
*/
|
|
133
|
+
getHistory(patternId: string): VersionEntry[];
|
|
134
|
+
/**
|
|
135
|
+
* Get specific version
|
|
136
|
+
*/
|
|
137
|
+
getVersion(patternId: string, versionId: string): LearnedPattern | undefined;
|
|
138
|
+
/**
|
|
139
|
+
* Get latest version
|
|
140
|
+
*/
|
|
141
|
+
getLatestVersion(patternId: string): LearnedPattern | undefined;
|
|
142
|
+
/**
|
|
143
|
+
* Rollback to specific version
|
|
144
|
+
*/
|
|
145
|
+
rollback(patternId: string, versionId: string): Promise<LearnedPattern>;
|
|
146
|
+
/**
|
|
147
|
+
* Compare two versions
|
|
148
|
+
*/
|
|
149
|
+
compareVersions(patternId: string, versionId1: string, versionId2: string): VersionDiff;
|
|
150
|
+
/**
|
|
151
|
+
* Get statistics
|
|
152
|
+
*/
|
|
153
|
+
getStatistics(): VersionStatistics;
|
|
154
|
+
/**
|
|
155
|
+
* Cleanup old versions for a pattern
|
|
156
|
+
*/
|
|
157
|
+
private cleanupOldVersions;
|
|
158
|
+
/**
|
|
159
|
+
* Deep clone an object
|
|
160
|
+
*/
|
|
161
|
+
private deepClone;
|
|
162
|
+
/**
|
|
163
|
+
* Serialize to JSON
|
|
164
|
+
*/
|
|
165
|
+
toJSON(): string;
|
|
166
|
+
/**
|
|
167
|
+
* Deserialize from JSON
|
|
168
|
+
*/
|
|
169
|
+
fromJSON(json: string): void;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Create a PatternVersionManager instance
|
|
173
|
+
* @param config - Optional configuration
|
|
174
|
+
* @returns PatternVersionManager instance
|
|
175
|
+
*/
|
|
176
|
+
export declare function createPatternVersionManager(config?: Partial<PatternVersionManagerConfig>): PatternVersionManager;
|
|
177
|
+
//# sourceMappingURL=PatternVersionManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PatternVersionManager.d.ts","sourceRoot":"","sources":["../../src/library/PatternVersionManager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAMlD;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,yDAAyD;IACzD,qBAAqB,EAAE,MAAM,CAAC;IAC9B,oDAAoD;IACpD,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,4BAA4B;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2BAA2B;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0BAA0B;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,kCAAkC;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,oCAAoC;IACpC,SAAS,EAAE,IAAI,CAAC;IAChB,uBAAuB;IACvB,QAAQ,EAAE,cAAc,CAAC;IACzB,uBAAuB;IACvB,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,sBAAsB;IACtB,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,yBAAyB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,gBAAgB;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,yCAAyC;IACzC,aAAa,EAAE,MAAM,CAAC;IACtB,mCAAmC;IACnC,aAAa,EAAE,MAAM,CAAC;IACtB,mCAAmC;IACnC,yBAAyB,EAAE,MAAM,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,CAAC,EAAE,eAAe,GAAG,MAAM,CAAC;IAE3E;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,EAAE,CAAC;IAE9C;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAAC;IAE7E;;OAEG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAAC;IAEhE;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAExE;;OAEG;IACH,eAAe,CACb,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,WAAW,CAAC;IAEf;;OAEG;IACH,aAAa,IAAI,iBAAiB,CAAC;IAEnC;;OAEG;IACH,MAAM,IAAI,MAAM,CAAC;IAEjB;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAMD;;GAEG;AACH,qBAAa,4BAA6B,YAAW,qBAAqB;IACxE,OAAO,CAAC,MAAM,CAA8B;IAC5C,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,cAAc,CAAsB;gBAEhC,MAAM,CAAC,EAAE,OAAO,CAAC,2BAA2B,CAAC;IAUzD;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,CAAC,EAAE,eAAe,GAAG,MAAM;IAqC1E;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,EAAE;IAI7C;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAQ5E;;OAEG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAO/D;;OAEG;IACG,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAwB7E;;OAEG;IACH,eAAe,CACb,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,WAAW;IAiCd;;OAEG;IACH,aAAa,IAAI,iBAAiB;IAgBlC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAY1B;;OAEG;IACH,OAAO,CAAC,SAAS;IAIjB;;OAEG;IACH,MAAM,IAAI,MAAM;IAiBhB;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;CAyB7B;AAMD;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,CAAC,EAAE,OAAO,CAAC,2BAA2B,CAAC,GAC5C,qBAAqB,CAEvB"}
|