@nahisaho/musubix-pattern-mcp 3.4.5 → 3.7.3

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 nahisaho
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @fileoverview Integration layer exports for pattern-mcp
3
+ * @traceability TSK-INT-002
4
+ */
5
+ export * from './types.js';
6
+ export * from './skill-pattern-bridge.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/integration/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,2BAA2B,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @fileoverview Integration layer exports for pattern-mcp
3
+ * @traceability TSK-INT-002
4
+ */
5
+ export * from './types.js';
6
+ export * from './skill-pattern-bridge.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/integration/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,2BAA2B,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @fileoverview Skill-Pattern Bridge Implementation
3
+ * Integrates learning-hooks skill with pattern-mcp
4
+ *
5
+ * @traceability TSK-INT-002, DES-v3.7.0 Section 9.4
6
+ */
7
+ import type { SkillPatternBridge, SkillPatternBridgeConfig, LearnedPattern, LearnedPatternCategory, PatternMatchResult } from './types.js';
8
+ /**
9
+ * Create a Skill-Pattern Bridge instance
10
+ */
11
+ export declare function createSkillPatternBridge(config?: Partial<SkillPatternBridgeConfig>): SkillPatternBridge;
12
+ /**
13
+ * Create learned pattern from session data
14
+ */
15
+ export declare function createLearnedPatternFromSession(category: LearnedPatternCategory, problem: string, solution: string, options?: {
16
+ name?: string;
17
+ context?: string;
18
+ example?: string;
19
+ triggerConditions?: string[];
20
+ sourceSession?: string;
21
+ confidence?: number;
22
+ }): LearnedPattern;
23
+ /**
24
+ * Format pattern match results as markdown
25
+ */
26
+ export declare function formatPatternMatchesAsMarkdown(matches: PatternMatchResult[]): string;
27
+ //# sourceMappingURL=skill-pattern-bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-pattern-bridge.d.ts","sourceRoot":"","sources":["../../src/integration/skill-pattern-bridge.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EACV,kBAAkB,EAClB,wBAAwB,EACxB,cAAc,EACd,sBAAsB,EAEtB,kBAAkB,EAInB,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,GAAE,OAAO,CAAC,wBAAwB,CAAM,GAC7C,kBAAkB,CAiWpB;AAED;;GAEG;AACH,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,sBAAsB,EAChC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;IACP,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CAChB,GACL,cAAc,CAkBhB;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,kBAAkB,EAAE,GAAG,MAAM,CAoCpF"}
@@ -0,0 +1,363 @@
1
+ /**
2
+ * @fileoverview Skill-Pattern Bridge Implementation
3
+ * Integrates learning-hooks skill with pattern-mcp
4
+ *
5
+ * @traceability TSK-INT-002, DES-v3.7.0 Section 9.4
6
+ */
7
+ import { DEFAULT_SKILL_PATTERN_BRIDGE_CONFIG, } from './types.js';
8
+ /**
9
+ * Create a Skill-Pattern Bridge instance
10
+ */
11
+ export function createSkillPatternBridge(config = {}) {
12
+ const fullConfig = {
13
+ ...DEFAULT_SKILL_PATTERN_BRIDGE_CONFIG,
14
+ ...config,
15
+ };
16
+ // In-memory storage for patterns (would be file-based in production)
17
+ const patterns = new Map();
18
+ /**
19
+ * Calculate text similarity using simple word overlap
20
+ */
21
+ function calculateSimilarity(text1, text2) {
22
+ const words1 = new Set(text1.toLowerCase().split(/\s+/));
23
+ const words2 = new Set(text2.toLowerCase().split(/\s+/));
24
+ const intersection = new Set([...words1].filter(w => words2.has(w)));
25
+ const union = new Set([...words1, ...words2]);
26
+ return union.size > 0 ? intersection.size / union.size : 0;
27
+ }
28
+ /**
29
+ * Find similar patterns
30
+ */
31
+ function findSimilarPatterns(pattern) {
32
+ const similar = [];
33
+ for (const existing of patterns.values()) {
34
+ if (existing.id === pattern.id)
35
+ continue;
36
+ if (existing.category !== pattern.category)
37
+ continue;
38
+ const similarity = calculateSimilarity(`${existing.problem} ${existing.solution}`, `${pattern.problem} ${pattern.solution}`);
39
+ if (similarity >= fullConfig.consolidationThreshold) {
40
+ similar.push(existing);
41
+ }
42
+ }
43
+ return similar;
44
+ }
45
+ /**
46
+ * Apply privacy filter to pattern content
47
+ */
48
+ function applyPrivacyFilter(text) {
49
+ if (!fullConfig.enablePrivacyFilter)
50
+ return text;
51
+ // Simple patterns for sensitive data
52
+ const sensitivePatterns = [
53
+ /api[_-]?key["\s:=]+([a-zA-Z0-9_-]{20,})/gi,
54
+ /password["\s:=]+([^\s"']+)/gi,
55
+ /secret["\s:=]+([a-zA-Z0-9_-]{20,})/gi,
56
+ /token["\s:=]+([a-zA-Z0-9_.-]{20,})/gi,
57
+ /AKIA[0-9A-Z]{16}/gi,
58
+ ];
59
+ let filtered = text;
60
+ for (const pattern of sensitivePatterns) {
61
+ filtered = filtered.replace(pattern, '[REDACTED]');
62
+ }
63
+ return filtered;
64
+ }
65
+ /**
66
+ * Generate unique pattern ID
67
+ */
68
+ function generatePatternId() {
69
+ const timestamp = Date.now().toString(36);
70
+ const random = Math.random().toString(36).substring(2, 8);
71
+ return `LP-${timestamp}-${random}`;
72
+ }
73
+ return {
74
+ async storeLearnedPattern(pattern) {
75
+ try {
76
+ // Validate confidence
77
+ if (pattern.confidence < fullConfig.minConfidence) {
78
+ return {
79
+ success: false,
80
+ consolidated: false,
81
+ error: `Confidence ${pattern.confidence} is below minimum ${fullConfig.minConfidence}`,
82
+ };
83
+ }
84
+ // Apply privacy filter
85
+ const filteredPattern = {
86
+ ...pattern,
87
+ problem: applyPrivacyFilter(pattern.problem),
88
+ solution: applyPrivacyFilter(pattern.solution),
89
+ example: pattern.example ? applyPrivacyFilter(pattern.example) : undefined,
90
+ };
91
+ // Check for consolidation
92
+ if (fullConfig.autoConsolidate) {
93
+ const similar = findSimilarPatterns(filteredPattern);
94
+ if (similar.length > 0) {
95
+ const mostSimilar = similar[0];
96
+ // Merge: update usage count and confidence
97
+ mostSimilar.usageCount += 1;
98
+ mostSimilar.confidence = Math.min(1, (mostSimilar.confidence + filteredPattern.confidence) / 2);
99
+ patterns.set(mostSimilar.id, mostSimilar);
100
+ return {
101
+ success: true,
102
+ patternId: mostSimilar.id,
103
+ consolidated: true,
104
+ consolidatedWith: mostSimilar.id,
105
+ };
106
+ }
107
+ }
108
+ // Check max patterns limit
109
+ if (patterns.size >= fullConfig.maxPatterns) {
110
+ // Remove least used pattern
111
+ let leastUsed = null;
112
+ for (const p of patterns.values()) {
113
+ if (!leastUsed || p.usageCount < leastUsed.usageCount) {
114
+ leastUsed = p;
115
+ }
116
+ }
117
+ if (leastUsed) {
118
+ patterns.delete(leastUsed.id);
119
+ }
120
+ }
121
+ // Store new pattern
122
+ const patternId = filteredPattern.id || generatePatternId();
123
+ filteredPattern.id = patternId;
124
+ patterns.set(patternId, filteredPattern);
125
+ return {
126
+ success: true,
127
+ patternId,
128
+ consolidated: false,
129
+ };
130
+ }
131
+ catch (error) {
132
+ return {
133
+ success: false,
134
+ consolidated: false,
135
+ error: error instanceof Error ? error.message : 'Unknown error',
136
+ };
137
+ }
138
+ },
139
+ async queryPatterns(context) {
140
+ const results = [];
141
+ const maxResults = context.maxResults ?? 10;
142
+ for (const pattern of patterns.values()) {
143
+ let relevance = 0;
144
+ let matchReason = '';
145
+ // Match by error message
146
+ if (context.errorMessage) {
147
+ const errorSimilarity = calculateSimilarity(context.errorMessage, pattern.problem);
148
+ if (errorSimilarity > 0.3) {
149
+ relevance = Math.max(relevance, errorSimilarity);
150
+ matchReason = 'Error message similarity';
151
+ }
152
+ }
153
+ // Match by keywords
154
+ if (context.keywords && context.keywords.length > 0) {
155
+ const patternText = `${pattern.name} ${pattern.problem} ${pattern.solution}`.toLowerCase();
156
+ const matchedKeywords = context.keywords.filter(k => patternText.includes(k.toLowerCase()));
157
+ if (matchedKeywords.length > 0) {
158
+ const keywordRelevance = matchedKeywords.length / context.keywords.length;
159
+ if (keywordRelevance > relevance) {
160
+ relevance = keywordRelevance;
161
+ matchReason = `Matched keywords: ${matchedKeywords.join(', ')}`;
162
+ }
163
+ }
164
+ }
165
+ // Match by language
166
+ if (context.language) {
167
+ const languageMatch = pattern.triggerConditions.some(tc => tc.toLowerCase().includes(context.language.toLowerCase()));
168
+ if (languageMatch) {
169
+ relevance = Math.max(relevance, 0.5);
170
+ if (!matchReason)
171
+ matchReason = 'Language match';
172
+ }
173
+ }
174
+ // Boost by confidence and usage
175
+ if (relevance > 0) {
176
+ relevance *= (0.7 + 0.3 * pattern.confidence);
177
+ relevance *= (1 + Math.log10(1 + pattern.usageCount) * 0.1);
178
+ results.push({
179
+ pattern,
180
+ relevance: Math.min(1, relevance),
181
+ matchReason,
182
+ });
183
+ }
184
+ }
185
+ // Sort by relevance and limit
186
+ return results
187
+ .sort((a, b) => b.relevance - a.relevance)
188
+ .slice(0, maxResults);
189
+ },
190
+ convertToPattern(learned) {
191
+ // Create a simple AST representation
192
+ const ast = {
193
+ type: 'learned_pattern',
194
+ children: [],
195
+ value: learned.solution,
196
+ startPosition: { row: 0, column: 0 },
197
+ endPosition: { row: 0, column: 0 },
198
+ };
199
+ // Create holes for variable parts (simplified)
200
+ const holes = [];
201
+ const placeholderPattern = /\[([A-Z_]+)\]/g;
202
+ let match;
203
+ let holeIndex = 0;
204
+ while ((match = placeholderPattern.exec(learned.solution)) !== null) {
205
+ holes.push({
206
+ id: `hole-${holeIndex++}`,
207
+ type: match[1],
208
+ });
209
+ }
210
+ return {
211
+ id: learned.id,
212
+ name: learned.name,
213
+ language: 'typescript', // Default, could be extracted from context
214
+ ast,
215
+ holes,
216
+ frequency: learned.usageCount,
217
+ createdAt: learned.extractedAt,
218
+ updatedAt: new Date().toISOString(),
219
+ };
220
+ },
221
+ convertFromPattern(pattern) {
222
+ return {
223
+ id: pattern.id,
224
+ name: pattern.name,
225
+ category: 'project_specific',
226
+ extractedAt: pattern.createdAt,
227
+ context: `Language: ${pattern.language}`,
228
+ problem: `Pattern with ${pattern.holes.length} variable parts`,
229
+ solution: pattern.ast.value ?? '',
230
+ triggerConditions: [`language:${pattern.language}`],
231
+ confidence: Math.min(1, pattern.frequency / 10),
232
+ usageCount: pattern.frequency,
233
+ };
234
+ },
235
+ async getStatistics() {
236
+ const byCategory = {
237
+ error_resolution: 0,
238
+ user_corrections: 0,
239
+ workarounds: 0,
240
+ debugging_techniques: 0,
241
+ project_specific: 0,
242
+ performance_optimization: 0,
243
+ refactoring: 0,
244
+ };
245
+ let totalConfidence = 0;
246
+ let totalUsageCount = 0;
247
+ let mostUsed;
248
+ let recentlyAdded = 0;
249
+ const sevenDaysAgo = new Date();
250
+ sevenDaysAgo.setDate(sevenDaysAgo.getDate() - 7);
251
+ for (const pattern of patterns.values()) {
252
+ byCategory[pattern.category]++;
253
+ totalConfidence += pattern.confidence;
254
+ totalUsageCount += pattern.usageCount;
255
+ if (!mostUsed || pattern.usageCount > mostUsed.usageCount) {
256
+ mostUsed = pattern;
257
+ }
258
+ if (new Date(pattern.extractedAt) >= sevenDaysAgo) {
259
+ recentlyAdded++;
260
+ }
261
+ }
262
+ return {
263
+ totalPatterns: patterns.size,
264
+ byCategory,
265
+ averageConfidence: patterns.size > 0 ? totalConfidence / patterns.size : 0,
266
+ totalUsageCount,
267
+ mostUsed,
268
+ recentlyAdded,
269
+ };
270
+ },
271
+ async consolidatePatterns() {
272
+ const merges = [];
273
+ const processed = new Set();
274
+ const patternList = Array.from(patterns.values());
275
+ for (let i = 0; i < patternList.length; i++) {
276
+ const pattern = patternList[i];
277
+ if (processed.has(pattern.id))
278
+ continue;
279
+ for (let j = i + 1; j < patternList.length; j++) {
280
+ const other = patternList[j];
281
+ if (processed.has(other.id))
282
+ continue;
283
+ if (pattern.category !== other.category)
284
+ continue;
285
+ const similarity = calculateSimilarity(`${pattern.problem} ${pattern.solution}`, `${other.problem} ${other.solution}`);
286
+ if (similarity >= fullConfig.consolidationThreshold) {
287
+ // Merge other into pattern
288
+ pattern.usageCount += other.usageCount;
289
+ pattern.confidence = (pattern.confidence + other.confidence) / 2;
290
+ patterns.delete(other.id);
291
+ processed.add(other.id);
292
+ merges.push({
293
+ sourceId: other.id,
294
+ targetId: pattern.id,
295
+ similarity,
296
+ });
297
+ }
298
+ }
299
+ }
300
+ return {
301
+ mergedCount: merges.length,
302
+ remainingCount: patterns.size,
303
+ merges,
304
+ };
305
+ },
306
+ };
307
+ }
308
+ /**
309
+ * Create learned pattern from session data
310
+ */
311
+ export function createLearnedPatternFromSession(category, problem, solution, options = {}) {
312
+ const now = new Date().toISOString();
313
+ const id = `LP-${Date.now().toString(36)}-${Math.random().toString(36).substring(2, 8)}`;
314
+ return {
315
+ id,
316
+ name: options.name ?? `Pattern: ${problem.substring(0, 50)}...`,
317
+ category,
318
+ extractedAt: now,
319
+ context: options.context ?? '',
320
+ problem,
321
+ solution,
322
+ example: options.example,
323
+ triggerConditions: options.triggerConditions ?? [],
324
+ sourceSession: options.sourceSession,
325
+ confidence: options.confidence ?? 0.7,
326
+ usageCount: 1,
327
+ };
328
+ }
329
+ /**
330
+ * Format pattern match results as markdown
331
+ */
332
+ export function formatPatternMatchesAsMarkdown(matches) {
333
+ if (matches.length === 0) {
334
+ return '📝 No relevant patterns found.\n';
335
+ }
336
+ const lines = ['# 📚 Relevant Patterns\n'];
337
+ for (let i = 0; i < matches.length; i++) {
338
+ const { pattern, relevance, matchReason } = matches[i];
339
+ lines.push(`## ${i + 1}. ${pattern.name}`);
340
+ lines.push('');
341
+ lines.push(`**Relevance**: ${(relevance * 100).toFixed(1)}%`);
342
+ lines.push(`**Reason**: ${matchReason}`);
343
+ lines.push(`**Category**: ${pattern.category}`);
344
+ lines.push('');
345
+ lines.push('### Problem');
346
+ lines.push(pattern.problem);
347
+ lines.push('');
348
+ lines.push('### Solution');
349
+ lines.push(pattern.solution);
350
+ if (pattern.example) {
351
+ lines.push('');
352
+ lines.push('### Example');
353
+ lines.push('```');
354
+ lines.push(pattern.example);
355
+ lines.push('```');
356
+ }
357
+ lines.push('');
358
+ lines.push('---');
359
+ lines.push('');
360
+ }
361
+ return lines.join('\n');
362
+ }
363
+ //# sourceMappingURL=skill-pattern-bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-pattern-bridge.js","sourceRoot":"","sources":["../../src/integration/skill-pattern-bridge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,164 @@
1
+ /**
2
+ * @fileoverview Skill-Pattern Bridge Types
3
+ * Integrates learning-hooks skill with pattern-mcp
4
+ *
5
+ * @traceability TSK-INT-002, DES-v3.7.0 Section 9.4
6
+ */
7
+ import type { Pattern } from '../types.js';
8
+ /**
9
+ * Learned pattern from learning-hooks skill
10
+ */
11
+ export interface LearnedPattern {
12
+ /** Unique identifier */
13
+ id: string;
14
+ /** Descriptive name */
15
+ name: string;
16
+ /** Pattern category */
17
+ category: LearnedPatternCategory;
18
+ /** When this pattern was extracted */
19
+ extractedAt: string;
20
+ /** Context where this pattern applies */
21
+ context: string;
22
+ /** Problem this pattern solves */
23
+ problem: string;
24
+ /** Solution/technique */
25
+ solution: string;
26
+ /** Code example if applicable */
27
+ example?: string;
28
+ /** Trigger conditions for using this pattern */
29
+ triggerConditions: string[];
30
+ /** Source session ID */
31
+ sourceSession?: string;
32
+ /** Confidence score (0-1) */
33
+ confidence: number;
34
+ /** Usage count */
35
+ usageCount: number;
36
+ }
37
+ /**
38
+ * Categories for learned patterns
39
+ */
40
+ export type LearnedPatternCategory = 'error_resolution' | 'user_corrections' | 'workarounds' | 'debugging_techniques' | 'project_specific' | 'performance_optimization' | 'refactoring';
41
+ /**
42
+ * Configuration for pattern bridge
43
+ */
44
+ export interface SkillPatternBridgeConfig {
45
+ /** Storage path for learned patterns */
46
+ storagePath: string;
47
+ /** Minimum confidence to store */
48
+ minConfidence: number;
49
+ /** Maximum patterns to keep */
50
+ maxPatterns: number;
51
+ /** Enable privacy filtering */
52
+ enablePrivacyFilter: boolean;
53
+ /** Auto-consolidate similar patterns */
54
+ autoConsolidate: boolean;
55
+ /** Consolidation similarity threshold */
56
+ consolidationThreshold: number;
57
+ }
58
+ /**
59
+ * Default configuration
60
+ */
61
+ export declare const DEFAULT_SKILL_PATTERN_BRIDGE_CONFIG: SkillPatternBridgeConfig;
62
+ /**
63
+ * Pattern query context for retrieving relevant patterns
64
+ */
65
+ export interface PatternQueryContext {
66
+ /** Current error message if any */
67
+ errorMessage?: string;
68
+ /** Current file path */
69
+ filePath?: string;
70
+ /** Current language */
71
+ language?: string;
72
+ /** Keywords from user query */
73
+ keywords?: string[];
74
+ /** Maximum results to return */
75
+ maxResults?: number;
76
+ }
77
+ /**
78
+ * Pattern match result
79
+ */
80
+ export interface PatternMatchResult {
81
+ /** Matched pattern */
82
+ pattern: LearnedPattern;
83
+ /** Relevance score (0-1) */
84
+ relevance: number;
85
+ /** Match reason */
86
+ matchReason: string;
87
+ }
88
+ /**
89
+ * Pattern storage result
90
+ */
91
+ export interface PatternStorageResult {
92
+ /** Success flag */
93
+ success: boolean;
94
+ /** Stored pattern ID */
95
+ patternId?: string;
96
+ /** Was consolidated with existing */
97
+ consolidated: boolean;
98
+ /** Consolidated with pattern ID */
99
+ consolidatedWith?: string;
100
+ /** Error message if failed */
101
+ error?: string;
102
+ }
103
+ /**
104
+ * Interface for Skill-Pattern Bridge
105
+ */
106
+ export interface SkillPatternBridge {
107
+ /**
108
+ * Store a learned pattern from learning-hooks
109
+ */
110
+ storeLearnedPattern(pattern: LearnedPattern): Promise<PatternStorageResult>;
111
+ /**
112
+ * Query patterns relevant to the given context
113
+ */
114
+ queryPatterns(context: PatternQueryContext): Promise<PatternMatchResult[]>;
115
+ /**
116
+ * Convert learned pattern to pattern-mcp format
117
+ */
118
+ convertToPattern(learned: LearnedPattern): Pattern;
119
+ /**
120
+ * Convert pattern-mcp format to learned pattern
121
+ */
122
+ convertFromPattern(pattern: Pattern): LearnedPattern;
123
+ /**
124
+ * Get pattern statistics
125
+ */
126
+ getStatistics(): Promise<PatternStatistics>;
127
+ /**
128
+ * Consolidate similar patterns
129
+ */
130
+ consolidatePatterns(): Promise<ConsolidationResult>;
131
+ }
132
+ /**
133
+ * Pattern statistics
134
+ */
135
+ export interface PatternStatistics {
136
+ /** Total pattern count */
137
+ totalPatterns: number;
138
+ /** Patterns by category */
139
+ byCategory: Record<LearnedPatternCategory, number>;
140
+ /** Average confidence */
141
+ averageConfidence: number;
142
+ /** Total usage count */
143
+ totalUsageCount: number;
144
+ /** Most used pattern */
145
+ mostUsed?: LearnedPattern;
146
+ /** Recently added count (last 7 days) */
147
+ recentlyAdded: number;
148
+ }
149
+ /**
150
+ * Consolidation result
151
+ */
152
+ export interface ConsolidationResult {
153
+ /** Patterns merged */
154
+ mergedCount: number;
155
+ /** Patterns remaining */
156
+ remainingCount: number;
157
+ /** Merge details */
158
+ merges: Array<{
159
+ sourceId: string;
160
+ targetId: string;
161
+ similarity: number;
162
+ }>;
163
+ }
164
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/integration/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @fileoverview Skill-Pattern Bridge Types
3
+ * Integrates learning-hooks skill with pattern-mcp
4
+ *
5
+ * @traceability TSK-INT-002, DES-v3.7.0 Section 9.4
6
+ */
7
+ /**
8
+ * Default configuration
9
+ */
10
+ export const DEFAULT_SKILL_PATTERN_BRIDGE_CONFIG = {
11
+ storagePath: '~/.musubix/skills/learned',
12
+ minConfidence: 0.6,
13
+ maxPatterns: 500,
14
+ enablePrivacyFilter: true,
15
+ autoConsolidate: true,
16
+ consolidationThreshold: 0.8,
17
+ };
18
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/integration/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgEH;;GAEG;AACH,MAAM,CAAC,MAAM,mCAAmC,GAA6B;IAC3E,WAAW,EAAE,2BAA2B;IACxC,aAAa,EAAE,GAAG;IAClB,WAAW,EAAE,GAAG;IAChB,mBAAmB,EAAE,IAAI;IACzB,eAAe,EAAE,IAAI;IACrB,sBAAsB,EAAE,GAAG;CAC5B,CAAC"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * PatternLearningDB - パターン学習データベース
3
+ *
4
+ * @description
5
+ * 学習済みパターンの永続化・検索・管理を提供する。
6
+ * GLOBALレイヤーでメトリクス連携し、パターン適用の追跡を行う。
7
+ *
8
+ * @see DES-PATTERN-001 - パターン学習システム
9
+ * @see TSK-FR-038 - PatternLearningDBインターフェース定義
10
+ * @see TSK-FR-039 - add/get/update実装
11
+ * @see TSK-FR-040 - query実装
12
+ * @see TSK-FR-041 - recordUsage実装
13
+ * @trace REQ-FR-004 - 継続的学習
14
+ */
15
+ import type { LearnedPattern, LearnedPatternInput, PatternQuery, PatternLearningStats, PatternLearningDBConfig } from './db-types.js';
16
+ /**
17
+ * PatternLearningDBインターフェース
18
+ *
19
+ * @trace DES-PATTERN-001
20
+ */
21
+ export interface IPatternLearningDB {
22
+ /**
23
+ * パターンを追加
24
+ */
25
+ add(input: LearnedPatternInput): Promise<LearnedPattern>;
26
+ /**
27
+ * IDでパターンを取得
28
+ */
29
+ get(id: string): Promise<LearnedPattern | null>;
30
+ /**
31
+ * パターンを更新
32
+ */
33
+ update(id: string, updates: Partial<Pick<LearnedPattern, 'status' | 'confidence' | 'metadata'>>): Promise<LearnedPattern | null>;
34
+ /**
35
+ * パターンを削除
36
+ */
37
+ delete(id: string): Promise<boolean>;
38
+ /**
39
+ * パターンを検索
40
+ */
41
+ query(query: PatternQuery): Promise<readonly LearnedPattern[]>;
42
+ /**
43
+ * 全パターンを取得
44
+ */
45
+ list(): Promise<readonly LearnedPattern[]>;
46
+ /**
47
+ * パターン使用を記録
48
+ */
49
+ recordUsage(id: string): Promise<void>;
50
+ /**
51
+ * 統計を取得
52
+ */
53
+ getStats(): Promise<PatternLearningStats>;
54
+ /**
55
+ * 全パターンをクリア
56
+ */
57
+ clear(): Promise<void>;
58
+ }
59
+ /**
60
+ * PatternLearningDB実装
61
+ *
62
+ * @trace DES-PATTERN-001
63
+ */
64
+ export declare class PatternLearningDB implements IPatternLearningDB {
65
+ private readonly patterns;
66
+ private readonly config;
67
+ constructor(config?: PatternLearningDBConfig);
68
+ /**
69
+ * @trace TSK-FR-039
70
+ */
71
+ add(input: LearnedPatternInput): Promise<LearnedPattern>;
72
+ /**
73
+ * @trace TSK-FR-039
74
+ */
75
+ get(id: string): Promise<LearnedPattern | null>;
76
+ /**
77
+ * @trace TSK-FR-039
78
+ */
79
+ update(id: string, updates: Partial<Pick<LearnedPattern, 'status' | 'confidence' | 'metadata'>>): Promise<LearnedPattern | null>;
80
+ delete(id: string): Promise<boolean>;
81
+ /**
82
+ * @trace TSK-FR-040
83
+ */
84
+ query(query: PatternQuery): Promise<readonly LearnedPattern[]>;
85
+ list(): Promise<readonly LearnedPattern[]>;
86
+ /**
87
+ * @trace TSK-FR-041
88
+ */
89
+ recordUsage(id: string): Promise<void>;
90
+ getStats(): Promise<PatternLearningStats>;
91
+ clear(): Promise<void>;
92
+ private findOldestPattern;
93
+ }
94
+ /**
95
+ * ファクトリ関数
96
+ *
97
+ * @trace TSK-FR-038
98
+ */
99
+ export declare function createPatternLearningDB(config?: PatternLearningDBConfig): IPatternLearningDB;
100
+ //# sourceMappingURL=PatternLearningDB.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PatternLearningDB.d.ts","sourceRoot":"","sources":["../../src/learning/PatternLearningDB.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,mBAAmB,EACnB,YAAY,EACZ,oBAAoB,EACpB,uBAAuB,EACxB,MAAM,eAAe,CAAC;AAQvB;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAEzD;;OAEG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAEhD;;OAEG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,GAAG,YAAY,GAAG,UAAU,CAAC,CAAC,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAEjI;;OAEG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAErC;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,cAAc,EAAE,CAAC,CAAC;IAE/D;;OAEG;IACH,IAAI,IAAI,OAAO,CAAC,SAAS,cAAc,EAAE,CAAC,CAAC;IAE3C;;OAEG;IACH,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvC;;OAEG;IACH,QAAQ,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAE1C;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED;;;;GAIG;AACH,qBAAa,iBAAkB,YAAW,kBAAkB;IAC1D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA0C;IACnE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0B;gBAErC,MAAM,GAAE,uBAAyD;IAI7E;;OAEG;IACG,GAAG,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,cAAc,CAAC;IAc9D;;OAEG;IACG,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAIrD;;OAEG;IACG,MAAM,CACV,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,GAAG,YAAY,GAAG,UAAU,CAAC,CAAC,GAC3E,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAgB3B,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI1C;;OAEG;IACG,KAAK,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,cAAc,EAAE,CAAC;IA4D9D,IAAI,IAAI,OAAO,CAAC,SAAS,cAAc,EAAE,CAAC;IAIhD;;OAEG;IACG,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBtC,QAAQ,IAAI,OAAO,CAAC,oBAAoB,CAAC;IAIzC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,OAAO,CAAC,iBAAiB;CAS1B;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,CAAC,EAAE,uBAAuB,GAAG,kBAAkB,CAE5F"}
@@ -0,0 +1,164 @@
1
+ /**
2
+ * PatternLearningDB - パターン学習データベース
3
+ *
4
+ * @description
5
+ * 学習済みパターンの永続化・検索・管理を提供する。
6
+ * GLOBALレイヤーでメトリクス連携し、パターン適用の追跡を行う。
7
+ *
8
+ * @see DES-PATTERN-001 - パターン学習システム
9
+ * @see TSK-FR-038 - PatternLearningDBインターフェース定義
10
+ * @see TSK-FR-039 - add/get/update実装
11
+ * @see TSK-FR-040 - query実装
12
+ * @see TSK-FR-041 - recordUsage実装
13
+ * @trace REQ-FR-004 - 継続的学習
14
+ */
15
+ import { createLearnedPattern, calculatePatternStats, DEFAULT_PATTERN_LEARNING_CONFIG, } from './db-types.js';
16
+ /**
17
+ * PatternLearningDB実装
18
+ *
19
+ * @trace DES-PATTERN-001
20
+ */
21
+ export class PatternLearningDB {
22
+ patterns = new Map();
23
+ config;
24
+ constructor(config = DEFAULT_PATTERN_LEARNING_CONFIG) {
25
+ this.config = config;
26
+ }
27
+ /**
28
+ * @trace TSK-FR-039
29
+ */
30
+ async add(input) {
31
+ // 最大パターン数を超えた場合、最も古いものを削除
32
+ while (this.patterns.size >= this.config.maxPatterns) {
33
+ const oldest = this.findOldestPattern();
34
+ if (oldest) {
35
+ this.patterns.delete(oldest.id);
36
+ }
37
+ }
38
+ const learned = createLearnedPattern(input);
39
+ this.patterns.set(learned.id, learned);
40
+ return learned;
41
+ }
42
+ /**
43
+ * @trace TSK-FR-039
44
+ */
45
+ async get(id) {
46
+ return this.patterns.get(id) ?? null;
47
+ }
48
+ /**
49
+ * @trace TSK-FR-039
50
+ */
51
+ async update(id, updates) {
52
+ const existing = this.patterns.get(id);
53
+ if (!existing) {
54
+ return null;
55
+ }
56
+ const updated = Object.freeze({
57
+ ...existing,
58
+ ...updates,
59
+ updatedAt: Date.now(),
60
+ });
61
+ this.patterns.set(id, updated);
62
+ return updated;
63
+ }
64
+ async delete(id) {
65
+ return this.patterns.delete(id);
66
+ }
67
+ /**
68
+ * @trace TSK-FR-040
69
+ */
70
+ async query(query) {
71
+ let results = Array.from(this.patterns.values());
72
+ // ステータスフィルター
73
+ if (query.status) {
74
+ const statuses = Array.isArray(query.status) ? query.status : [query.status];
75
+ results = results.filter(p => statuses.includes(p.status));
76
+ }
77
+ // ソースフィルター
78
+ if (query.source) {
79
+ const sources = Array.isArray(query.source) ? query.source : [query.source];
80
+ results = results.filter(p => sources.includes(p.source));
81
+ }
82
+ // 信頼度フィルター
83
+ if (query.minConfidence !== undefined) {
84
+ results = results.filter(p => p.confidence >= query.minConfidence);
85
+ }
86
+ if (query.maxConfidence !== undefined) {
87
+ results = results.filter(p => p.confidence <= query.maxConfidence);
88
+ }
89
+ // カテゴリフィルター(DesignPatternの場合)
90
+ if (query.category) {
91
+ results = results.filter(p => {
92
+ const pattern = p.pattern;
93
+ return pattern.category === query.category;
94
+ });
95
+ }
96
+ // ドメインフィルター(DesignPatternの場合)
97
+ if (query.domain) {
98
+ results = results.filter(p => {
99
+ const pattern = p.pattern;
100
+ return pattern.domain?.includes(query.domain);
101
+ });
102
+ }
103
+ // ソート
104
+ if (query.sortBy) {
105
+ const order = query.sortOrder === 'desc' ? -1 : 1;
106
+ results.sort((a, b) => {
107
+ const aVal = a[query.sortBy];
108
+ const bVal = b[query.sortBy];
109
+ if (typeof aVal === 'number' && typeof bVal === 'number') {
110
+ return (aVal - bVal) * order;
111
+ }
112
+ return 0;
113
+ });
114
+ }
115
+ // ページネーション
116
+ const offset = query.offset ?? 0;
117
+ const limit = query.limit ?? results.length;
118
+ results = results.slice(offset, offset + limit);
119
+ return Object.freeze(results);
120
+ }
121
+ async list() {
122
+ return Object.freeze(Array.from(this.patterns.values()));
123
+ }
124
+ /**
125
+ * @trace TSK-FR-041
126
+ */
127
+ async recordUsage(id) {
128
+ const existing = this.patterns.get(id);
129
+ if (!existing) {
130
+ return;
131
+ }
132
+ const updated = Object.freeze({
133
+ ...existing,
134
+ usageCount: existing.usageCount + 1,
135
+ lastUsedAt: Date.now(),
136
+ updatedAt: Date.now(),
137
+ });
138
+ this.patterns.set(id, updated);
139
+ }
140
+ async getStats() {
141
+ return calculatePatternStats(Array.from(this.patterns.values()));
142
+ }
143
+ async clear() {
144
+ this.patterns.clear();
145
+ }
146
+ findOldestPattern() {
147
+ let oldest = null;
148
+ for (const pattern of this.patterns.values()) {
149
+ if (!oldest || pattern.createdAt < oldest.createdAt) {
150
+ oldest = pattern;
151
+ }
152
+ }
153
+ return oldest;
154
+ }
155
+ }
156
+ /**
157
+ * ファクトリ関数
158
+ *
159
+ * @trace TSK-FR-038
160
+ */
161
+ export function createPatternLearningDB(config) {
162
+ return new PatternLearningDB(config);
163
+ }
164
+ //# sourceMappingURL=PatternLearningDB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PatternLearningDB.js","sourceRoot":"","sources":["../../src/learning/PatternLearningDB.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAUH,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,+BAA+B,GAChC,MAAM,eAAe,CAAC;AAsDvB;;;;GAIG;AACH,MAAM,OAAO,iBAAiB;IACX,QAAQ,GAAgC,IAAI,GAAG,EAAE,CAAC;IAClD,MAAM,CAA0B;IAEjD,YAAY,SAAkC,+BAA+B;QAC3E,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CAAC,KAA0B;QAClC,0BAA0B;QAC1B,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YACrD,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACxC,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAC5C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACvC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CAAC,EAAU;QAClB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CACV,EAAU,EACV,OAA4E;QAE5E,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACvC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,OAAO,GAAmB,MAAM,CAAC,MAAM,CAAC;YAC5C,GAAG,QAAQ;YACX,GAAG,OAAO;YACV,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAC/B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU;QACrB,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CAAC,KAAmB;QAC7B,IAAI,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAEjD,aAAa;QACb,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC7E,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QAC7D,CAAC;QAED,WAAW;QACX,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC5E,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5D,CAAC;QAED,WAAW;QACX,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACtC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,IAAI,KAAK,CAAC,aAAc,CAAC,CAAC;QACtE,CAAC;QACD,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACtC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,IAAI,KAAK,CAAC,aAAc,CAAC,CAAC;QACtE,CAAC;QAED,8BAA8B;QAC9B,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;gBAC3B,MAAM,OAAO,GAAG,CAAC,CAAC,OAAc,CAAC;gBACjC,OAAO,OAAO,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ,CAAC;YAC7C,CAAC,CAAC,CAAC;QACL,CAAC;QAED,8BAA8B;QAC9B,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;gBAC3B,MAAM,OAAO,GAAG,CAAC,CAAC,OAAc,CAAC;gBACjC,OAAO,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAChD,CAAC,CAAC,CAAC;QACL,CAAC;QAED,MAAM;QACN,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACpB,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,MAAO,CAAC,CAAC;gBAC9B,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,MAAO,CAAC,CAAC;gBAC9B,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACzD,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC;gBAC/B,CAAC;gBACD,OAAO,CAAC,CAAC;YACX,CAAC,CAAC,CAAC;QACL,CAAC;QAED,WAAW;QACX,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;QACjC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;QAC5C,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC;QAEhD,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,IAAI;QACR,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,EAAU;QAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACvC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAmB,MAAM,CAAC,MAAM,CAAC;YAC5C,GAAG,QAAQ;YACX,UAAU,EAAE,QAAQ,CAAC,UAAU,GAAG,CAAC;YACnC,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE;YACtB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,OAAO,qBAAqB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;IAEO,iBAAiB;QACvB,IAAI,MAAM,GAA0B,IAAI,CAAC;QACzC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YAC7C,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;gBACpD,MAAM,GAAG,OAAO,CAAC;YACnB,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAgC;IACtE,OAAO,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC;AACvC,CAAC"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * PatternLearningDB Types
3
+ *
4
+ * @description
5
+ * パターン学習データベースの型定義
6
+ *
7
+ * @see TSK-FR-038 - PatternLearningDB型定義
8
+ * @see REQ-FR-036〜040 - PatternLearningDB
9
+ * @trace DES-MUSUBIX-FR-001 DES-PATTERN-001
10
+ */
11
+ import type { Pattern, DesignPattern, PatternExample } from '../types.js';
12
+ /**
13
+ * 学習済みパターンの状態
14
+ */
15
+ export type PatternStatus = 'candidate' | 'verified' | 'deprecated' | 'archived';
16
+ /**
17
+ * パターン学習のソース
18
+ */
19
+ export type LearningSource = 'code-observation' | 'feedback' | 'manual' | 'imported';
20
+ /**
21
+ * 学習済みパターンエントリ
22
+ */
23
+ export interface LearnedPattern {
24
+ readonly id: string;
25
+ readonly pattern: Pattern | DesignPattern;
26
+ readonly source: LearningSource;
27
+ readonly status: PatternStatus;
28
+ readonly confidence: number;
29
+ readonly usageCount: number;
30
+ readonly lastUsedAt: number | null;
31
+ readonly createdAt: number;
32
+ readonly updatedAt: number;
33
+ readonly examples: readonly PatternExample[];
34
+ readonly metadata?: Readonly<Record<string, unknown>>;
35
+ }
36
+ /**
37
+ * パターン学習入力
38
+ */
39
+ export interface LearnedPatternInput {
40
+ readonly pattern: Pattern | DesignPattern;
41
+ readonly source: LearningSource;
42
+ readonly confidence?: number;
43
+ readonly examples?: readonly PatternExample[];
44
+ readonly metadata?: Record<string, unknown>;
45
+ }
46
+ /**
47
+ * パターン検索クエリ
48
+ */
49
+ export interface PatternQuery {
50
+ readonly status?: PatternStatus | readonly PatternStatus[];
51
+ readonly source?: LearningSource | readonly LearningSource[];
52
+ readonly minConfidence?: number;
53
+ readonly maxConfidence?: number;
54
+ readonly category?: string;
55
+ readonly domain?: string;
56
+ readonly limit?: number;
57
+ readonly offset?: number;
58
+ readonly sortBy?: 'confidence' | 'usageCount' | 'createdAt' | 'updatedAt';
59
+ readonly sortOrder?: 'asc' | 'desc';
60
+ }
61
+ /**
62
+ * パターン学習統計
63
+ */
64
+ export interface PatternLearningStats {
65
+ readonly totalPatterns: number;
66
+ readonly byStatus: Readonly<Record<PatternStatus, number>>;
67
+ readonly bySource: Readonly<Record<LearningSource, number>>;
68
+ readonly avgConfidence: number;
69
+ readonly totalUsage: number;
70
+ readonly healthStatus: 'healthy' | 'warning' | 'critical';
71
+ }
72
+ /**
73
+ * パターン学習DBの設定
74
+ */
75
+ export interface PatternLearningDBConfig {
76
+ readonly maxPatterns: number;
77
+ readonly minConfidenceThreshold: number;
78
+ readonly autoDeprecateAfterDays: number;
79
+ readonly enableAutoCleanup: boolean;
80
+ }
81
+ /**
82
+ * デフォルト設定
83
+ */
84
+ export declare const DEFAULT_PATTERN_LEARNING_CONFIG: PatternLearningDBConfig;
85
+ /**
86
+ * IDカウンターをリセット(テスト用)
87
+ */
88
+ export declare function resetPatternIdCounter(): void;
89
+ /**
90
+ * LearnedPatternを作成
91
+ */
92
+ export declare function createLearnedPattern(input: LearnedPatternInput): LearnedPattern;
93
+ /**
94
+ * パターン学習統計を計算
95
+ */
96
+ export declare function calculatePatternStats(patterns: readonly LearnedPattern[]): PatternLearningStats;
97
+ //# sourceMappingURL=db-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-types.d.ts","sourceRoot":"","sources":["../../src/learning/db-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * PatternLearningDB Types
3
+ *
4
+ * @description
5
+ * パターン学習データベースの型定義
6
+ *
7
+ * @see TSK-FR-038 - PatternLearningDB型定義
8
+ * @see REQ-FR-036〜040 - PatternLearningDB
9
+ * @trace DES-MUSUBIX-FR-001 DES-PATTERN-001
10
+ */
11
+ /**
12
+ * デフォルト設定
13
+ */
14
+ export const DEFAULT_PATTERN_LEARNING_CONFIG = Object.freeze({
15
+ maxPatterns: 10000,
16
+ minConfidenceThreshold: 0.3,
17
+ autoDeprecateAfterDays: 90,
18
+ enableAutoCleanup: true,
19
+ });
20
+ // IDカウンター
21
+ let patternIdCounter = 0;
22
+ /**
23
+ * IDカウンターをリセット(テスト用)
24
+ */
25
+ export function resetPatternIdCounter() {
26
+ patternIdCounter = 0;
27
+ }
28
+ /**
29
+ * LearnedPatternを作成
30
+ */
31
+ export function createLearnedPattern(input) {
32
+ patternIdCounter++;
33
+ const id = `LP-${String(patternIdCounter).padStart(5, '0')}`;
34
+ const now = Date.now();
35
+ return Object.freeze({
36
+ id,
37
+ pattern: input.pattern,
38
+ source: input.source,
39
+ status: 'candidate',
40
+ confidence: input.confidence ?? 0.5,
41
+ usageCount: 0,
42
+ lastUsedAt: null,
43
+ createdAt: now,
44
+ updatedAt: now,
45
+ examples: Object.freeze(input.examples ?? []),
46
+ metadata: input.metadata ? Object.freeze(input.metadata) : undefined,
47
+ });
48
+ }
49
+ /**
50
+ * パターン学習統計を計算
51
+ */
52
+ export function calculatePatternStats(patterns) {
53
+ const byStatus = {
54
+ candidate: 0,
55
+ verified: 0,
56
+ deprecated: 0,
57
+ archived: 0,
58
+ };
59
+ const bySource = {
60
+ 'code-observation': 0,
61
+ 'feedback': 0,
62
+ 'manual': 0,
63
+ 'imported': 0,
64
+ };
65
+ let totalConfidence = 0;
66
+ let totalUsage = 0;
67
+ for (const p of patterns) {
68
+ byStatus[p.status]++;
69
+ bySource[p.source]++;
70
+ totalConfidence += p.confidence;
71
+ totalUsage += p.usageCount;
72
+ }
73
+ const avgConfidence = patterns.length > 0 ? totalConfidence / patterns.length : 0;
74
+ // ヘルスステータス判定
75
+ let healthStatus;
76
+ const deprecatedRatio = patterns.length > 0 ? byStatus.deprecated / patterns.length : 0;
77
+ if (deprecatedRatio < 0.1 && avgConfidence >= 0.6) {
78
+ healthStatus = 'healthy';
79
+ }
80
+ else if (deprecatedRatio < 0.3 && avgConfidence >= 0.4) {
81
+ healthStatus = 'warning';
82
+ }
83
+ else {
84
+ healthStatus = 'critical';
85
+ }
86
+ return Object.freeze({
87
+ totalPatterns: patterns.length,
88
+ byStatus: Object.freeze(byStatus),
89
+ bySource: Object.freeze(bySource),
90
+ avgConfidence,
91
+ totalUsage,
92
+ healthStatus,
93
+ });
94
+ }
95
+ //# sourceMappingURL=db-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-types.js","sourceRoot":"","sources":["../../src/learning/db-types.ts"],"names":[],"mappings":"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"}
@@ -3,4 +3,8 @@
3
3
  * @traceability TSK-WAKE-002
4
4
  */
5
5
  export { WakeSleepCycle, type WakeSleepConfig, type WakeObservation, type SleepResult, type LearningStats, } from './wake-sleep.js';
6
+ export type { PatternStatus, LearningSource, LearnedPattern, LearnedPatternInput, PatternQuery, PatternLearningStats, PatternLearningDBConfig, } from './db-types.js';
7
+ export { createLearnedPattern, resetPatternIdCounter, calculatePatternStats, DEFAULT_PATTERN_LEARNING_CONFIG, } from './db-types.js';
8
+ export type { IPatternLearningDB } from './PatternLearningDB.js';
9
+ export { PatternLearningDB, createPatternLearningDB } from './PatternLearningDB.js';
6
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/learning/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,cAAc,EACd,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,aAAa,GACnB,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/learning/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,cAAc,EACd,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,aAAa,GACnB,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EACV,aAAa,EACb,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,YAAY,EACZ,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,+BAA+B,GAChC,MAAM,eAAe,CAAC;AAEvB,YAAY,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -3,4 +3,6 @@
3
3
  * @traceability TSK-WAKE-002
4
4
  */
5
5
  export { WakeSleepCycle, } from './wake-sleep.js';
6
+ export { createLearnedPattern, resetPatternIdCounter, calculatePatternStats, DEFAULT_PATTERN_LEARNING_CONFIG, } from './db-types.js';
7
+ export { PatternLearningDB, createPatternLearningDB } from './PatternLearningDB.js';
6
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/learning/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,cAAc,GAKf,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/learning/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,cAAc,GAKf,MAAM,iBAAiB,CAAC;AAYzB,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,+BAA+B,GAChC,MAAM,eAAe,CAAC;AAIvB,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nahisaho/musubix-pattern-mcp",
3
- "version": "3.4.5",
3
+ "version": "3.7.3",
4
4
  "description": "MUSUBIX Pattern Library Learning MCP - AST-based pattern extraction and abstraction",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -14,12 +14,6 @@
14
14
  "files": [
15
15
  "dist"
16
16
  ],
17
- "scripts": {
18
- "build": "tsc",
19
- "test": "vitest run",
20
- "clean": "rm -rf dist",
21
- "typecheck": "tsc --noEmit"
22
- },
23
17
  "keywords": [
24
18
  "musubix",
25
19
  "pattern",
@@ -43,5 +37,11 @@
43
37
  },
44
38
  "peerDependencies": {
45
39
  "@nahisaho/musubix-core": "^3.0.0"
40
+ },
41
+ "scripts": {
42
+ "build": "tsc",
43
+ "test": "vitest run",
44
+ "clean": "rm -rf dist",
45
+ "typecheck": "tsc --noEmit"
46
46
  }
47
- }
47
+ }