@nahisaho/musubix-pattern-mcp 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/dist/compression/index.d.ts +7 -0
  2. package/dist/compression/index.d.ts.map +1 -0
  3. package/dist/compression/index.js +7 -0
  4. package/dist/compression/index.js.map +1 -0
  5. package/dist/compression/pattern-compressor.d.ts +111 -0
  6. package/dist/compression/pattern-compressor.d.ts.map +1 -0
  7. package/dist/compression/pattern-compressor.js +307 -0
  8. package/dist/compression/pattern-compressor.js.map +1 -0
  9. package/dist/compression/quality-evaluator.d.ts +97 -0
  10. package/dist/compression/quality-evaluator.d.ts.map +1 -0
  11. package/dist/compression/quality-evaluator.js +210 -0
  12. package/dist/compression/quality-evaluator.js.map +1 -0
  13. package/dist/extractor/anti-unifier.d.ts +63 -0
  14. package/dist/extractor/anti-unifier.d.ts.map +1 -0
  15. package/dist/extractor/anti-unifier.js +167 -0
  16. package/dist/extractor/anti-unifier.js.map +1 -0
  17. package/dist/extractor/index.d.ts +9 -0
  18. package/dist/extractor/index.d.ts.map +1 -0
  19. package/dist/extractor/index.js +9 -0
  20. package/dist/extractor/index.js.map +1 -0
  21. package/dist/extractor/pattern-extractor.d.ts +58 -0
  22. package/dist/extractor/pattern-extractor.d.ts.map +1 -0
  23. package/dist/extractor/pattern-extractor.js +201 -0
  24. package/dist/extractor/pattern-extractor.js.map +1 -0
  25. package/dist/extractor/subtree-finder.d.ts +81 -0
  26. package/dist/extractor/subtree-finder.d.ts.map +1 -0
  27. package/dist/extractor/subtree-finder.js +155 -0
  28. package/dist/extractor/subtree-finder.js.map +1 -0
  29. package/dist/extractor/typescript-parser.d.ts +91 -0
  30. package/dist/extractor/typescript-parser.d.ts.map +1 -0
  31. package/dist/extractor/typescript-parser.js +219 -0
  32. package/dist/extractor/typescript-parser.js.map +1 -0
  33. package/dist/index.d.ts +13 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js +19 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/learning/index.d.ts +6 -0
  38. package/dist/learning/index.d.ts.map +1 -0
  39. package/dist/learning/index.js +6 -0
  40. package/dist/learning/index.js.map +1 -0
  41. package/dist/learning/wake-sleep.d.ts +144 -0
  42. package/dist/learning/wake-sleep.d.ts.map +1 -0
  43. package/dist/learning/wake-sleep.js +312 -0
  44. package/dist/learning/wake-sleep.js.map +1 -0
  45. package/dist/library/index.d.ts +6 -0
  46. package/dist/library/index.d.ts.map +1 -0
  47. package/dist/library/index.js +6 -0
  48. package/dist/library/index.js.map +1 -0
  49. package/dist/library/pattern-library.d.ts +59 -0
  50. package/dist/library/pattern-library.d.ts.map +1 -0
  51. package/dist/library/pattern-library.js +139 -0
  52. package/dist/library/pattern-library.js.map +1 -0
  53. package/dist/privacy/index.d.ts +6 -0
  54. package/dist/privacy/index.d.ts.map +1 -0
  55. package/dist/privacy/index.js +6 -0
  56. package/dist/privacy/index.js.map +1 -0
  57. package/dist/privacy/privacy-filter.d.ts +46 -0
  58. package/dist/privacy/privacy-filter.d.ts.map +1 -0
  59. package/dist/privacy/privacy-filter.js +105 -0
  60. package/dist/privacy/privacy-filter.js.map +1 -0
  61. package/dist/types.d.ts +89 -0
  62. package/dist/types.d.ts.map +1 -0
  63. package/dist/types.js +6 -0
  64. package/dist/types.js.map +1 -0
  65. package/package.json +47 -0
@@ -0,0 +1,312 @@
1
+ /**
2
+ * @fileoverview Wake-Sleep Cycle Learning System
3
+ * @traceability TSK-WAKE-002, REQ-PATTERN-003
4
+ *
5
+ * Implements DreamCoder-style wake-sleep learning:
6
+ * - Wake Phase: Extract patterns from observed code
7
+ * - Sleep Phase: Compress and optimize pattern library
8
+ */
9
+ import { PatternCompressor } from '../compression/pattern-compressor.js';
10
+ import { PatternQualityEvaluator } from '../compression/quality-evaluator.js';
11
+ /**
12
+ * Wake-Sleep Cycle Learning System
13
+ *
14
+ * Implements alternating wake and sleep phases for continuous learning:
15
+ *
16
+ * Wake Phase:
17
+ * - Observe new code/patterns
18
+ * - Extract potential patterns
19
+ * - Add to candidate pool
20
+ *
21
+ * Sleep Phase:
22
+ * - Compress pattern library using MDL
23
+ * - Remove low-quality patterns
24
+ * - Merge similar patterns
25
+ * - Optimize for generality/utility balance
26
+ */
27
+ export class WakeSleepCycle {
28
+ config;
29
+ compressor;
30
+ evaluator;
31
+ library = new Map();
32
+ wakeBuffer = [];
33
+ stats;
34
+ constructor(config) {
35
+ this.config = {
36
+ minQualityThreshold: config?.minQualityThreshold ?? 0.3,
37
+ maxLibrarySize: config?.maxLibrarySize ?? 1000,
38
+ compressionIterations: config?.compressionIterations ?? 3,
39
+ autoSleep: config?.autoSleep ?? true,
40
+ wakeThreshold: config?.wakeThreshold ?? 100,
41
+ };
42
+ this.compressor = new PatternCompressor({
43
+ minCompressionRatio: 1.1,
44
+ });
45
+ this.evaluator = new PatternQualityEvaluator({
46
+ minFrequency: 2,
47
+ maxHoles: 5,
48
+ idealDepthRange: [3, 8],
49
+ });
50
+ this.stats = {
51
+ totalWakeObservations: 0,
52
+ totalSleepCycles: 0,
53
+ currentLibrarySize: 0,
54
+ averagePatternQuality: 0,
55
+ totalPatternsExtracted: 0,
56
+ totalPatternsRemoved: 0,
57
+ };
58
+ }
59
+ /**
60
+ * Wake Phase: Observe new code and extract patterns
61
+ */
62
+ wake(observation) {
63
+ this.wakeBuffer.push(observation);
64
+ this.stats.totalWakeObservations++;
65
+ // Simple pattern extraction from observation
66
+ const patterns = this.extractPatternsFromAST(observation);
67
+ // Add to library candidates
68
+ for (const pattern of patterns) {
69
+ this.addToLibrary(pattern);
70
+ }
71
+ // Auto-trigger sleep if threshold reached
72
+ if (this.config.autoSleep && this.wakeBuffer.length >= this.config.wakeThreshold) {
73
+ this.sleep();
74
+ }
75
+ return patterns;
76
+ }
77
+ /**
78
+ * Sleep Phase: Consolidate and optimize pattern library
79
+ */
80
+ sleep() {
81
+ const startTime = Date.now();
82
+ const initialSize = this.library.size;
83
+ let patternsRemoved = 0;
84
+ // Get all patterns
85
+ const patterns = Array.from(this.library.values());
86
+ // Calculate initial MDL
87
+ const allAsts = this.wakeBuffer.map(o => o.ast);
88
+ const initialMDLResult = allAsts.length > 0
89
+ ? this.compressor.calculateMDL(patterns, allAsts)
90
+ : null;
91
+ const initialMDL = initialMDLResult?.total ?? this.estimateLibraryMDL(patterns);
92
+ // Phase 1: Quality filtering
93
+ const qualityFiltered = this.evaluator.filterByQuality(patterns, this.config.minQualityThreshold);
94
+ patternsRemoved += patterns.length - qualityFiltered.length;
95
+ // Phase 2: MDL-based compression
96
+ let compressed = qualityFiltered;
97
+ for (let i = 0; i < this.config.compressionIterations; i++) {
98
+ const beforeCompression = compressed.length;
99
+ compressed = this.compressor.compressLibrary(compressed);
100
+ if (compressed.length >= beforeCompression)
101
+ break; // No improvement
102
+ }
103
+ patternsRemoved += qualityFiltered.length - compressed.length;
104
+ // Phase 3: Size limiting
105
+ if (compressed.length > this.config.maxLibrarySize) {
106
+ const ranked = this.evaluator.rankPatterns(compressed);
107
+ compressed = ranked.slice(0, this.config.maxLibrarySize).map(r => r.pattern);
108
+ patternsRemoved += ranked.length - this.config.maxLibrarySize;
109
+ }
110
+ // Update library
111
+ this.library.clear();
112
+ for (const pattern of compressed) {
113
+ const enhanced = pattern;
114
+ enhanced.quality = this.evaluator.evaluate(pattern);
115
+ enhanced.lastUsed = new Date().toISOString();
116
+ this.library.set(pattern.id, enhanced);
117
+ }
118
+ // Calculate final MDL
119
+ const finalMDLResult = allAsts.length > 0
120
+ ? this.compressor.calculateMDL(compressed, allAsts)
121
+ : null;
122
+ const finalMDL = finalMDLResult?.total ?? this.estimateLibraryMDL(compressed);
123
+ // Update stats
124
+ this.stats.totalSleepCycles++;
125
+ this.stats.currentLibrarySize = this.library.size;
126
+ this.stats.totalPatternsRemoved += patternsRemoved;
127
+ this.updateAverageQuality();
128
+ // Clear wake buffer
129
+ this.wakeBuffer = [];
130
+ return {
131
+ patternsConsolidated: initialSize - patternsRemoved,
132
+ patternsRemoved,
133
+ compressionRatio: initialSize > 0 ? this.library.size / initialSize : 1,
134
+ mdlImprovement: initialMDL > 0 ? (initialMDL - finalMDL) / initialMDL : 0,
135
+ cycleTimeMs: Date.now() - startTime,
136
+ };
137
+ }
138
+ /**
139
+ * Extract patterns from AST
140
+ */
141
+ extractPatternsFromAST(observation) {
142
+ const patterns = [];
143
+ const seen = new Set();
144
+ // Traverse AST and extract subtrees as pattern candidates
145
+ const traverse = (node, depth) => {
146
+ // Only extract patterns of reasonable depth
147
+ if (depth >= 2 && depth <= 6) {
148
+ const key = this.getPatternKey(node);
149
+ if (!seen.has(key)) {
150
+ seen.add(key);
151
+ const pattern = {
152
+ id: `WP-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,
153
+ name: `${node.type}_pattern`,
154
+ language: observation.context.language,
155
+ ast: node,
156
+ holes: [],
157
+ frequency: 1,
158
+ createdAt: observation.timestamp,
159
+ updatedAt: observation.timestamp,
160
+ };
161
+ patterns.push(pattern);
162
+ this.stats.totalPatternsExtracted++;
163
+ }
164
+ }
165
+ // Recurse into children
166
+ for (const child of node.children) {
167
+ traverse(child, depth + 1);
168
+ }
169
+ };
170
+ traverse(observation.ast, 0);
171
+ return patterns;
172
+ }
173
+ /**
174
+ * Add pattern to library (or update existing)
175
+ */
176
+ addToLibrary(pattern) {
177
+ const key = this.getPatternKey(pattern.ast);
178
+ const existing = this.findSimilarPattern(key);
179
+ if (existing) {
180
+ // Update existing pattern
181
+ existing.frequency = (existing.frequency ?? 0) + 1;
182
+ existing.lastUsed = new Date().toISOString();
183
+ existing.updatedAt = new Date().toISOString();
184
+ }
185
+ else {
186
+ // Add new pattern
187
+ const enhanced = {
188
+ ...pattern,
189
+ lastUsed: new Date().toISOString(),
190
+ };
191
+ this.library.set(pattern.id, enhanced);
192
+ }
193
+ }
194
+ /**
195
+ * Find similar pattern in library
196
+ */
197
+ findSimilarPattern(key) {
198
+ for (const pattern of this.library.values()) {
199
+ if (this.getPatternKey(pattern.ast) === key) {
200
+ return pattern;
201
+ }
202
+ }
203
+ return undefined;
204
+ }
205
+ /**
206
+ * Generate key for pattern deduplication
207
+ */
208
+ getPatternKey(ast) {
209
+ const parts = [];
210
+ const traverse = (node) => {
211
+ parts.push(node.type);
212
+ if (node.type === 'Hole') {
213
+ parts.push('?');
214
+ }
215
+ else if (node.value) {
216
+ parts.push(node.value.slice(0, 20));
217
+ }
218
+ for (const child of node.children) {
219
+ traverse(child);
220
+ }
221
+ };
222
+ traverse(ast);
223
+ return parts.join('|');
224
+ }
225
+ /**
226
+ * Estimate MDL for library without data
227
+ */
228
+ estimateLibraryMDL(patterns) {
229
+ return patterns.reduce((sum, p) => {
230
+ return sum + this.countNodes(p.ast) + p.holes.length * 2;
231
+ }, 0);
232
+ }
233
+ /**
234
+ * Count nodes in AST
235
+ */
236
+ countNodes(ast) {
237
+ return 1 + ast.children.reduce((sum, child) => sum + this.countNodes(child), 0);
238
+ }
239
+ /**
240
+ * Update average quality statistic
241
+ */
242
+ updateAverageQuality() {
243
+ const patterns = Array.from(this.library.values());
244
+ if (patterns.length === 0) {
245
+ this.stats.averagePatternQuality = 0;
246
+ return;
247
+ }
248
+ const totalQuality = patterns.reduce((sum, p) => {
249
+ return sum + (p.quality?.score ?? 0);
250
+ }, 0);
251
+ this.stats.averagePatternQuality = totalQuality / patterns.length;
252
+ }
253
+ /**
254
+ * Get current pattern library
255
+ */
256
+ getLibrary() {
257
+ return Array.from(this.library.values());
258
+ }
259
+ /**
260
+ * Get learning statistics
261
+ */
262
+ getStats() {
263
+ return { ...this.stats };
264
+ }
265
+ /**
266
+ * Get pattern by ID
267
+ */
268
+ getPattern(id) {
269
+ return this.library.get(id);
270
+ }
271
+ /**
272
+ * Clear library and reset stats
273
+ */
274
+ reset() {
275
+ this.library.clear();
276
+ this.wakeBuffer = [];
277
+ this.stats = {
278
+ totalWakeObservations: 0,
279
+ totalSleepCycles: 0,
280
+ currentLibrarySize: 0,
281
+ averagePatternQuality: 0,
282
+ totalPatternsExtracted: 0,
283
+ totalPatternsRemoved: 0,
284
+ };
285
+ }
286
+ /**
287
+ * Export library to JSON
288
+ */
289
+ exportLibrary() {
290
+ return JSON.stringify({
291
+ patterns: Array.from(this.library.values()),
292
+ stats: this.stats,
293
+ exportedAt: new Date().toISOString(),
294
+ }, null, 2);
295
+ }
296
+ /**
297
+ * Import library from JSON
298
+ */
299
+ importLibrary(json) {
300
+ const data = JSON.parse(json);
301
+ let imported = 0;
302
+ for (const pattern of data.patterns ?? []) {
303
+ if (pattern.id && pattern.ast) {
304
+ this.library.set(pattern.id, pattern);
305
+ imported++;
306
+ }
307
+ }
308
+ this.stats.currentLibrarySize = this.library.size;
309
+ return imported;
310
+ }
311
+ }
312
+ //# sourceMappingURL=wake-sleep.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wake-sleep.js","sourceRoot":"","sources":["../../src/learning/wake-sleep.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @fileoverview Pattern library management module
3
+ * @traceability TSK-PATTERN-005
4
+ */
5
+ export { PatternLibrary } from './pattern-library.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/library/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @fileoverview Pattern library management module
3
+ * @traceability TSK-PATTERN-005
4
+ */
5
+ export { PatternLibrary } from './pattern-library.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/library/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * @fileoverview Pattern library with local persistence
3
+ * @traceability TSK-PATTERN-005, REQ-PATTERN-001-F005
4
+ */
5
+ import type { Pattern, PatternLibraryConfig } from '../types.js';
6
+ /**
7
+ * Pattern library manager with JSON persistence
8
+ *
9
+ * @description
10
+ * Manages pattern storage locally (no external communication).
11
+ * Supports CRUD operations and import/export.
12
+ */
13
+ export declare class PatternLibrary {
14
+ private patterns;
15
+ private config;
16
+ private dirty;
17
+ constructor(config?: Partial<PatternLibraryConfig>);
18
+ /**
19
+ * Load library from disk
20
+ */
21
+ load(): Promise<void>;
22
+ /**
23
+ * Save library to disk
24
+ */
25
+ save(): Promise<void>;
26
+ /**
27
+ * Add pattern to library
28
+ */
29
+ add(pattern: Pattern): boolean;
30
+ /**
31
+ * Get pattern by ID
32
+ */
33
+ get(id: string): Pattern | undefined;
34
+ /**
35
+ * Update existing pattern
36
+ */
37
+ update(id: string, updates: Partial<Pattern>): boolean;
38
+ /**
39
+ * Delete pattern
40
+ */
41
+ delete(id: string): boolean;
42
+ /**
43
+ * List all patterns
44
+ */
45
+ list(): Pattern[];
46
+ /**
47
+ * Get pattern count
48
+ */
49
+ get size(): number;
50
+ /**
51
+ * Export library to JSON string
52
+ */
53
+ export(): string;
54
+ /**
55
+ * Import patterns from JSON string
56
+ */
57
+ import(json: string): number;
58
+ }
59
+ //# sourceMappingURL=pattern-library.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern-library.d.ts","sourceRoot":"","sources":["../../src/library/pattern-library.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEjE;;;;;;GAMG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,KAAK,CAAS;gBAEV,MAAM,GAAE,OAAO,CAAC,oBAAoB,CAAM;IAQtD;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAe3B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB3B;;OAEG;IACH,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO;IAS9B;;OAEG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAIpC;;OAEG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO;IAetD;;OAEG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAQ3B;;OAEG;IACH,IAAI,IAAI,OAAO,EAAE;IAIjB;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACH,MAAM,IAAI,MAAM;IAQhB;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAU7B"}
@@ -0,0 +1,139 @@
1
+ /**
2
+ * @fileoverview Pattern library with local persistence
3
+ * @traceability TSK-PATTERN-005, REQ-PATTERN-001-F005
4
+ */
5
+ import { readFile, writeFile, mkdir } from 'node:fs/promises';
6
+ import { dirname } from 'node:path';
7
+ /**
8
+ * Pattern library manager with JSON persistence
9
+ *
10
+ * @description
11
+ * Manages pattern storage locally (no external communication).
12
+ * Supports CRUD operations and import/export.
13
+ */
14
+ export class PatternLibrary {
15
+ patterns = new Map();
16
+ config;
17
+ dirty = false;
18
+ constructor(config = {}) {
19
+ this.config = {
20
+ storagePath: config.storagePath ?? './storage/patterns/library.json',
21
+ maxPatterns: config.maxPatterns ?? 10000,
22
+ enablePrivacyFilter: config.enablePrivacyFilter ?? true,
23
+ };
24
+ }
25
+ /**
26
+ * Load library from disk
27
+ */
28
+ async load() {
29
+ try {
30
+ const data = await readFile(this.config.storagePath, 'utf-8');
31
+ const parsed = JSON.parse(data);
32
+ this.patterns.clear();
33
+ for (const pattern of parsed.patterns) {
34
+ this.patterns.set(pattern.id, pattern);
35
+ }
36
+ this.dirty = false;
37
+ }
38
+ catch {
39
+ // File doesn't exist yet - start with empty library
40
+ this.patterns.clear();
41
+ }
42
+ }
43
+ /**
44
+ * Save library to disk
45
+ */
46
+ async save() {
47
+ if (!this.dirty)
48
+ return;
49
+ const dir = dirname(this.config.storagePath);
50
+ await mkdir(dir, { recursive: true });
51
+ const data = {
52
+ version: '1.0.0',
53
+ updatedAt: new Date().toISOString(),
54
+ patterns: Array.from(this.patterns.values()),
55
+ };
56
+ await writeFile(this.config.storagePath, JSON.stringify(data, null, 2), 'utf-8');
57
+ this.dirty = false;
58
+ }
59
+ /**
60
+ * Add pattern to library
61
+ */
62
+ add(pattern) {
63
+ if (this.patterns.size >= this.config.maxPatterns) {
64
+ return false;
65
+ }
66
+ this.patterns.set(pattern.id, pattern);
67
+ this.dirty = true;
68
+ return true;
69
+ }
70
+ /**
71
+ * Get pattern by ID
72
+ */
73
+ get(id) {
74
+ return this.patterns.get(id);
75
+ }
76
+ /**
77
+ * Update existing pattern
78
+ */
79
+ update(id, updates) {
80
+ const existing = this.patterns.get(id);
81
+ if (!existing)
82
+ return false;
83
+ const updated = {
84
+ ...existing,
85
+ ...updates,
86
+ id: existing.id, // ID cannot be changed
87
+ updatedAt: new Date().toISOString(),
88
+ };
89
+ this.patterns.set(id, updated);
90
+ this.dirty = true;
91
+ return true;
92
+ }
93
+ /**
94
+ * Delete pattern
95
+ */
96
+ delete(id) {
97
+ const deleted = this.patterns.delete(id);
98
+ if (deleted) {
99
+ this.dirty = true;
100
+ }
101
+ return deleted;
102
+ }
103
+ /**
104
+ * List all patterns
105
+ */
106
+ list() {
107
+ return Array.from(this.patterns.values());
108
+ }
109
+ /**
110
+ * Get pattern count
111
+ */
112
+ get size() {
113
+ return this.patterns.size;
114
+ }
115
+ /**
116
+ * Export library to JSON string
117
+ */
118
+ export() {
119
+ return JSON.stringify({
120
+ version: '1.0.0',
121
+ exportedAt: new Date().toISOString(),
122
+ patterns: Array.from(this.patterns.values()),
123
+ }, null, 2);
124
+ }
125
+ /**
126
+ * Import patterns from JSON string
127
+ */
128
+ import(json) {
129
+ const data = JSON.parse(json);
130
+ let imported = 0;
131
+ for (const pattern of data.patterns) {
132
+ if (this.add(pattern)) {
133
+ imported++;
134
+ }
135
+ }
136
+ return imported;
137
+ }
138
+ }
139
+ //# sourceMappingURL=pattern-library.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern-library.js","sourceRoot":"","sources":["../../src/library/pattern-library.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @fileoverview Privacy protection module
3
+ * @traceability TSK-PATTERN-007
4
+ */
5
+ export { PrivacyFilter } from './privacy-filter.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/privacy/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @fileoverview Privacy protection module
3
+ * @traceability TSK-PATTERN-007
4
+ */
5
+ export { PrivacyFilter } from './privacy-filter.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/privacy/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * @fileoverview Privacy filter for pattern library
3
+ * @traceability TSK-PATTERN-007, REQ-PATTERN-001-F007
4
+ */
5
+ import type { Pattern, PrivacyFilterResult } from '../types.js';
6
+ /**
7
+ * Privacy filter configuration
8
+ */
9
+ export interface PrivacyFilterConfig {
10
+ /** Patterns for sensitive data (regex strings) */
11
+ sensitivePatterns: string[];
12
+ /** Whether to block external network calls */
13
+ blockExternalCommunication: boolean;
14
+ }
15
+ /**
16
+ * Privacy filter to prevent sensitive data leakage
17
+ *
18
+ * @description
19
+ * - Filters patterns containing sensitive information
20
+ * - Blocks all external network communication
21
+ * - All data stays local (Article: privacy protection)
22
+ */
23
+ export declare class PrivacyFilter {
24
+ private config;
25
+ private sensitiveRegexes;
26
+ constructor(config?: Partial<PrivacyFilterConfig>);
27
+ /**
28
+ * Check if pattern contains sensitive data
29
+ */
30
+ filter(pattern: Pattern): PrivacyFilterResult;
31
+ /**
32
+ * Recursively check AST for sensitive values
33
+ * @internal
34
+ */
35
+ private findSensitiveValue;
36
+ /**
37
+ * Assert no external communication is allowed
38
+ * @throws Error if external communication is attempted
39
+ */
40
+ assertNoExternalCommunication(): void;
41
+ /**
42
+ * Check if external communication is blocked
43
+ */
44
+ isExternalCommunicationBlocked(): boolean;
45
+ }
46
+ //# sourceMappingURL=privacy-filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"privacy-filter.d.ts","sourceRoot":"","sources":["../../src/privacy/privacy-filter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEhE;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,kDAAkD;IAClD,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,8CAA8C;IAC9C,0BAA0B,EAAE,OAAO,CAAC;CACrC;AAwBD;;;;;;;GAOG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,gBAAgB,CAAW;gBAEvB,MAAM,GAAE,OAAO,CAAC,mBAAmB,CAAM;IAWrD;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,mBAAmB;IAuB7C;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAuB1B;;;OAGG;IACH,6BAA6B,IAAI,IAAI;IAOrC;;OAEG;IACH,8BAA8B,IAAI,OAAO;CAG1C"}