@nahisaho/musubix-core 1.0.9 → 1.0.13

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 (44) hide show
  1. package/dist/cli/commands/codegen.d.ts.map +1 -1
  2. package/dist/cli/commands/codegen.js +218 -1
  3. package/dist/cli/commands/codegen.js.map +1 -1
  4. package/dist/cli/commands/index.d.ts +1 -0
  5. package/dist/cli/commands/index.d.ts.map +1 -1
  6. package/dist/cli/commands/index.js +5 -0
  7. package/dist/cli/commands/index.js.map +1 -1
  8. package/dist/cli/commands/learn.d.ts +17 -0
  9. package/dist/cli/commands/learn.d.ts.map +1 -0
  10. package/dist/cli/commands/learn.js +285 -0
  11. package/dist/cli/commands/learn.js.map +1 -0
  12. package/dist/cli/commands/requirements.d.ts +1 -0
  13. package/dist/cli/commands/requirements.d.ts.map +1 -1
  14. package/dist/cli/commands/requirements.js +67 -16
  15. package/dist/cli/commands/requirements.js.map +1 -1
  16. package/dist/index.d.ts +1 -0
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +2 -0
  19. package/dist/index.js.map +1 -1
  20. package/dist/learning/feedback-collector.d.ts +108 -0
  21. package/dist/learning/feedback-collector.d.ts.map +1 -0
  22. package/dist/learning/feedback-collector.js +231 -0
  23. package/dist/learning/feedback-collector.js.map +1 -0
  24. package/dist/learning/index.d.ts +19 -0
  25. package/dist/learning/index.d.ts.map +1 -0
  26. package/dist/learning/index.js +19 -0
  27. package/dist/learning/index.js.map +1 -0
  28. package/dist/learning/learning-engine.d.ts +140 -0
  29. package/dist/learning/learning-engine.d.ts.map +1 -0
  30. package/dist/learning/learning-engine.js +338 -0
  31. package/dist/learning/learning-engine.js.map +1 -0
  32. package/dist/learning/pattern-extractor.d.ts +138 -0
  33. package/dist/learning/pattern-extractor.d.ts.map +1 -0
  34. package/dist/learning/pattern-extractor.js +400 -0
  35. package/dist/learning/pattern-extractor.js.map +1 -0
  36. package/dist/learning/types.d.ts +159 -0
  37. package/dist/learning/types.d.ts.map +1 -0
  38. package/dist/learning/types.js +20 -0
  39. package/dist/learning/types.js.map +1 -0
  40. package/dist/version.d.ts +1 -1
  41. package/dist/version.d.ts.map +1 -1
  42. package/dist/version.js +1 -1
  43. package/dist/version.js.map +1 -1
  44. package/package.json +1 -1
@@ -0,0 +1,338 @@
1
+ /**
2
+ * Learning Engine
3
+ *
4
+ * Main orchestrator for the self-learning system
5
+ *
6
+ * @see REQ-LEARN-003 - Adaptive Reasoning
7
+ * @module @musubix/core/learning
8
+ */
9
+ import { FeedbackCollector } from './feedback-collector.js';
10
+ import { PatternExtractor } from './pattern-extractor.js';
11
+ /**
12
+ * Learning Engine class
13
+ *
14
+ * Orchestrates feedback collection, pattern extraction, and adaptive reasoning
15
+ *
16
+ * @see REQ-LEARN-001 - Feedback Collection
17
+ * @see REQ-LEARN-002 - Pattern Extraction
18
+ * @see REQ-LEARN-003 - Adaptive Reasoning
19
+ */
20
+ export class LearningEngine {
21
+ feedbackCollector;
22
+ patternExtractor;
23
+ config;
24
+ constructor(config = {}) {
25
+ this.config = {
26
+ patternThreshold: config.patternThreshold || 3,
27
+ decayDays: config.decayDays || 30,
28
+ decayRate: config.decayRate || 0.1,
29
+ minConfidence: config.minConfidence || 0.1,
30
+ storagePath: config.storagePath || 'storage/learning',
31
+ };
32
+ this.feedbackCollector = new FeedbackCollector(this.config);
33
+ this.patternExtractor = new PatternExtractor(this.config);
34
+ }
35
+ // ==========================================================================
36
+ // Feedback Management
37
+ // ==========================================================================
38
+ /**
39
+ * Record feedback for an artifact
40
+ *
41
+ * @see REQ-LEARN-001 - Feedback Collection
42
+ */
43
+ async recordFeedback(input) {
44
+ const feedback = await this.feedbackCollector.recordFeedback(input);
45
+ // Trigger pattern extraction after recording
46
+ await this.tryExtractPatterns();
47
+ return feedback;
48
+ }
49
+ /**
50
+ * Record acceptance of an artifact
51
+ */
52
+ async acceptArtifact(artifactId, artifactType, context, reason) {
53
+ return this.recordFeedback({
54
+ type: 'accept',
55
+ artifactType,
56
+ artifactId,
57
+ context,
58
+ reason,
59
+ });
60
+ }
61
+ /**
62
+ * Record rejection of an artifact
63
+ */
64
+ async rejectArtifact(artifactId, artifactType, context, reason) {
65
+ return this.recordFeedback({
66
+ type: 'reject',
67
+ artifactType,
68
+ artifactId,
69
+ context,
70
+ reason,
71
+ });
72
+ }
73
+ /**
74
+ * Record modification of an artifact
75
+ */
76
+ async modifyArtifact(artifactId, artifactType, original, modified, context, reason) {
77
+ return this.recordFeedback({
78
+ type: 'modify',
79
+ artifactType,
80
+ artifactId,
81
+ context,
82
+ reason,
83
+ original,
84
+ modified,
85
+ });
86
+ }
87
+ /**
88
+ * Query feedback
89
+ */
90
+ async queryFeedback(query = {}) {
91
+ return this.feedbackCollector.queryFeedback(query);
92
+ }
93
+ // ==========================================================================
94
+ // Pattern Management
95
+ // ==========================================================================
96
+ /**
97
+ * Get all learned patterns
98
+ */
99
+ async getPatterns() {
100
+ return this.patternExtractor.getPatterns();
101
+ }
102
+ /**
103
+ * Get patterns by category
104
+ */
105
+ async getPatternsByCategory(category) {
106
+ return this.patternExtractor.getPatternsByCategory(category);
107
+ }
108
+ /**
109
+ * Add a manual pattern
110
+ */
111
+ async addPattern(name, category, trigger, action, confidence = 0.5) {
112
+ return this.patternExtractor.addPattern(name, category, trigger, action, confidence);
113
+ }
114
+ /**
115
+ * Remove a pattern
116
+ */
117
+ async removePattern(id) {
118
+ return this.patternExtractor.removePattern(id);
119
+ }
120
+ /**
121
+ * Apply decay to unused patterns
122
+ *
123
+ * @see REQ-LEARN-004 - Pattern Decay
124
+ */
125
+ async applyDecay() {
126
+ return this.patternExtractor.applyDecay(this.config.decayDays, this.config.decayRate, this.config.minConfidence);
127
+ }
128
+ // ==========================================================================
129
+ // Adaptive Reasoning
130
+ // ==========================================================================
131
+ /**
132
+ * Find matching patterns for inference context
133
+ *
134
+ * @see REQ-LEARN-003 - Adaptive Reasoning
135
+ * @param context - Current inference context
136
+ * @returns Matching patterns sorted by relevance
137
+ */
138
+ async findMatchingPatterns(context) {
139
+ const patterns = await this.patternExtractor.getPatterns();
140
+ const matches = [];
141
+ for (const pattern of patterns) {
142
+ // Check category match
143
+ if (pattern.category !== context.artifactType)
144
+ continue;
145
+ // Calculate match score
146
+ const { score, matchedKeys } = this.calculateMatchScore(pattern, context);
147
+ if (score > 0) {
148
+ matches.push({
149
+ pattern,
150
+ matchScore: score * pattern.confidence,
151
+ matchedKeys,
152
+ });
153
+ }
154
+ }
155
+ // Sort by combined score (match score * confidence)
156
+ matches.sort((a, b) => b.matchScore - a.matchScore);
157
+ return matches;
158
+ }
159
+ /**
160
+ * Get recommendations for current context
161
+ *
162
+ * @see REQ-LEARN-003 - Adaptive Reasoning
163
+ */
164
+ async getRecommendations(context, limit = 5) {
165
+ const matches = await this.findMatchingPatterns(context);
166
+ const recommendations = {
167
+ prefer: [],
168
+ avoid: [],
169
+ suggest: [],
170
+ };
171
+ for (const match of matches.slice(0, limit * 3)) {
172
+ const actionType = match.pattern.action.type;
173
+ if (recommendations[actionType].length < limit) {
174
+ recommendations[actionType].push(match.pattern);
175
+ }
176
+ }
177
+ return recommendations;
178
+ }
179
+ /**
180
+ * Apply pattern to adjust inference
181
+ */
182
+ async applyPattern(patternId, success) {
183
+ return this.patternExtractor.updatePatternUsage(patternId, success);
184
+ }
185
+ // ==========================================================================
186
+ // Statistics & Export
187
+ // ==========================================================================
188
+ /**
189
+ * Get learning statistics
190
+ *
191
+ * @see REQ-LEARN-005 - Learning Visualization
192
+ */
193
+ async getStats() {
194
+ const feedbackStats = await this.feedbackCollector.getStats();
195
+ const patterns = await this.patternExtractor.getPatterns();
196
+ const patternsByCategory = {
197
+ code: 0,
198
+ design: 0,
199
+ requirement: 0,
200
+ test: 0,
201
+ };
202
+ let totalConfidence = 0;
203
+ for (const pattern of patterns) {
204
+ patternsByCategory[pattern.category]++;
205
+ totalConfidence += pattern.confidence;
206
+ }
207
+ return {
208
+ totalFeedback: feedbackStats.total,
209
+ feedbackByType: feedbackStats.byType,
210
+ totalPatterns: patterns.length,
211
+ patternsByCategory,
212
+ averageConfidence: patterns.length > 0 ? totalConfidence / patterns.length : 0,
213
+ lastUpdate: new Date(),
214
+ };
215
+ }
216
+ /**
217
+ * Export all learning data
218
+ */
219
+ async export() {
220
+ return {
221
+ feedback: await this.feedbackCollector.export(),
222
+ patterns: await this.patternExtractor.export(),
223
+ stats: await this.getStats(),
224
+ };
225
+ }
226
+ /**
227
+ * Import learning data
228
+ */
229
+ async import(data) {
230
+ let feedbackImported = 0;
231
+ let patternsImported = 0;
232
+ if (data.feedback) {
233
+ feedbackImported = await this.feedbackCollector.import(data.feedback);
234
+ }
235
+ if (data.patterns) {
236
+ patternsImported = await this.patternExtractor.import(data.patterns);
237
+ }
238
+ return { feedbackImported, patternsImported };
239
+ }
240
+ /**
241
+ * Generate status report
242
+ */
243
+ async generateStatusReport() {
244
+ const stats = await this.getStats();
245
+ const highConfPatterns = await this.patternExtractor.getHighConfidencePatterns(0.7);
246
+ const lines = [
247
+ '# MUSUBIX Learning Status Report',
248
+ '',
249
+ `**Generated**: ${new Date().toISOString()}`,
250
+ '',
251
+ '## Summary',
252
+ '',
253
+ `- Total Feedback: ${stats.totalFeedback}`,
254
+ `- Total Patterns: ${stats.totalPatterns}`,
255
+ `- Average Confidence: ${(stats.averageConfidence * 100).toFixed(1)}%`,
256
+ '',
257
+ '## Feedback by Type',
258
+ '',
259
+ `- Accept: ${stats.feedbackByType.accept}`,
260
+ `- Reject: ${stats.feedbackByType.reject}`,
261
+ `- Modify: ${stats.feedbackByType.modify}`,
262
+ '',
263
+ '## Patterns by Category',
264
+ '',
265
+ `- Code: ${stats.patternsByCategory.code}`,
266
+ `- Design: ${stats.patternsByCategory.design}`,
267
+ `- Requirement: ${stats.patternsByCategory.requirement}`,
268
+ `- Test: ${stats.patternsByCategory.test}`,
269
+ '',
270
+ '## High Confidence Patterns (≥70%)',
271
+ '',
272
+ ];
273
+ if (highConfPatterns.length === 0) {
274
+ lines.push('_No high confidence patterns yet._');
275
+ }
276
+ else {
277
+ for (const pattern of highConfPatterns) {
278
+ lines.push(`### ${pattern.name}`);
279
+ lines.push('');
280
+ lines.push(`- **ID**: ${pattern.id}`);
281
+ lines.push(`- **Category**: ${pattern.category}`);
282
+ lines.push(`- **Action**: ${pattern.action.type}`);
283
+ lines.push(`- **Confidence**: ${(pattern.confidence * 100).toFixed(1)}%`);
284
+ lines.push(`- **Occurrences**: ${pattern.occurrences}`);
285
+ lines.push('');
286
+ }
287
+ }
288
+ return lines.join('\n');
289
+ }
290
+ // ==========================================================================
291
+ // Private Methods
292
+ // ==========================================================================
293
+ /**
294
+ * Calculate match score between pattern and context
295
+ */
296
+ calculateMatchScore(pattern, context) {
297
+ const matchedKeys = [];
298
+ let matchCount = 0;
299
+ let totalKeys = 0;
300
+ const triggerContext = pattern.trigger.context;
301
+ // Check language match
302
+ if (triggerContext.language) {
303
+ totalKeys++;
304
+ if (context.language === triggerContext.language) {
305
+ matchCount++;
306
+ matchedKeys.push('language');
307
+ }
308
+ }
309
+ // Check framework match
310
+ if (triggerContext.framework) {
311
+ totalKeys++;
312
+ if (context.framework === triggerContext.framework) {
313
+ matchCount++;
314
+ matchedKeys.push('framework');
315
+ }
316
+ }
317
+ // If no specific context required, it's a general match
318
+ if (totalKeys === 0) {
319
+ return { score: 0.5, matchedKeys: ['general'] };
320
+ }
321
+ return {
322
+ score: matchCount / totalKeys,
323
+ matchedKeys,
324
+ };
325
+ }
326
+ /**
327
+ * Try to extract patterns from recent feedback
328
+ */
329
+ async tryExtractPatterns() {
330
+ const recentFeedback = await this.feedbackCollector.queryFeedback({
331
+ limit: 100,
332
+ });
333
+ if (recentFeedback.length >= this.config.patternThreshold) {
334
+ await this.patternExtractor.extractPatterns(recentFeedback);
335
+ }
336
+ }
337
+ }
338
+ //# sourceMappingURL=learning-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"learning-engine.js","sourceRoot":"","sources":["../../src/learning/learning-engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,138 @@
1
+ /**
2
+ * Pattern Extractor
3
+ *
4
+ * Extracts patterns from accumulated feedback
5
+ *
6
+ * @see REQ-LEARN-002 - Pattern Extraction
7
+ * @module @musubix/core/learning
8
+ */
9
+ import type { Feedback, LearnedPattern, PatternCategory, PatternTrigger, PatternAction, LearningConfig } from './types.js';
10
+ /**
11
+ * Pattern Extractor class
12
+ *
13
+ * Analyzes feedback to extract recurring patterns
14
+ *
15
+ * @see REQ-LEARN-002 - Pattern Extraction
16
+ */
17
+ export declare class PatternExtractor {
18
+ private patternCache;
19
+ private storagePath;
20
+ private threshold;
21
+ private loaded;
22
+ constructor(config?: Partial<LearningConfig>);
23
+ /**
24
+ * Extract patterns from feedback list
25
+ *
26
+ * @see REQ-LEARN-002 - Pattern Extraction
27
+ * @param feedbackList - List of feedback to analyze
28
+ * @returns Newly created patterns
29
+ */
30
+ extractPatterns(feedbackList: Feedback[]): Promise<LearnedPattern[]>;
31
+ /**
32
+ * Get all patterns
33
+ */
34
+ getPatterns(): Promise<LearnedPattern[]>;
35
+ /**
36
+ * Get pattern by ID
37
+ */
38
+ getPattern(id: string): Promise<LearnedPattern | undefined>;
39
+ /**
40
+ * Add pattern manually
41
+ *
42
+ * @param name - Pattern name
43
+ * @param category - Pattern category
44
+ * @param trigger - Trigger conditions
45
+ * @param action - Action to take
46
+ * @param confidence - Initial confidence (default: 0.5)
47
+ */
48
+ addPattern(name: string, category: PatternCategory, trigger: PatternTrigger, action: PatternAction, confidence?: number): Promise<LearnedPattern>;
49
+ /**
50
+ * Remove pattern by ID
51
+ */
52
+ removePattern(id: string): Promise<boolean>;
53
+ /**
54
+ * Update pattern confidence based on usage
55
+ */
56
+ updatePatternUsage(id: string, success: boolean): Promise<LearnedPattern | undefined>;
57
+ /**
58
+ * Apply decay to unused patterns
59
+ *
60
+ * @see REQ-LEARN-004 - Pattern Decay
61
+ * @param days - Days threshold for decay
62
+ * @param rate - Decay rate
63
+ * @param minConfidence - Minimum confidence to keep
64
+ */
65
+ applyDecay(days?: number, rate?: number, minConfidence?: number): Promise<{
66
+ decayed: number;
67
+ archived: number;
68
+ }>;
69
+ /**
70
+ * Get patterns by category
71
+ */
72
+ getPatternsByCategory(category: PatternCategory): Promise<LearnedPattern[]>;
73
+ /**
74
+ * Get high confidence patterns
75
+ */
76
+ getHighConfidencePatterns(threshold?: number): Promise<LearnedPattern[]>;
77
+ /**
78
+ * Export patterns
79
+ */
80
+ export(): Promise<LearnedPattern[]>;
81
+ /**
82
+ * Import patterns
83
+ */
84
+ import(patterns: LearnedPattern[]): Promise<number>;
85
+ /**
86
+ * Find pattern candidates from feedback
87
+ */
88
+ private findCandidates;
89
+ /**
90
+ * Generate a key for grouping similar feedback
91
+ */
92
+ private generateCandidateKey;
93
+ /**
94
+ * Extract context from feedback
95
+ */
96
+ private extractContext;
97
+ /**
98
+ * Map feedback type to pattern action
99
+ */
100
+ private mapFeedbackToAction;
101
+ /**
102
+ * Extract content for pattern
103
+ */
104
+ private extractContent;
105
+ /**
106
+ * Find similar existing pattern
107
+ */
108
+ private findSimilarPattern;
109
+ /**
110
+ * Check if contexts match
111
+ */
112
+ private contextMatches;
113
+ /**
114
+ * Create pattern from candidate
115
+ */
116
+ private createPattern;
117
+ /**
118
+ * Calculate initial confidence for new pattern
119
+ */
120
+ private calculateInitialConfidence;
121
+ /**
122
+ * Calculate confidence for existing pattern
123
+ */
124
+ private calculateConfidence;
125
+ /**
126
+ * Archive pattern to separate file
127
+ */
128
+ private archivePattern;
129
+ /**
130
+ * Ensure data is loaded from storage
131
+ */
132
+ private ensureLoaded;
133
+ /**
134
+ * Persist data to storage
135
+ */
136
+ private persist;
137
+ }
138
+ //# sourceMappingURL=pattern-extractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern-extractor.d.ts","sourceRoot":"","sources":["../../src/learning/pattern-extractor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EACV,QAAQ,EACR,cAAc,EACd,eAAe,EAEf,cAAc,EACd,aAAa,EACb,cAAc,EACf,MAAM,YAAY,CAAC;AAepB;;;;;;GAMG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,YAAY,CAA0C;IAC9D,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAkB;gBAEpB,MAAM,GAAE,OAAO,CAAC,cAAc,CAAM;IAKhD;;;;;;OAMG;IACG,eAAe,CAAC,YAAY,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IA6B1E;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAK9C;;OAEG;IACG,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;IAKjE;;;;;;;;OAQG;IACG,UAAU,CACd,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,aAAa,EACrB,UAAU,GAAE,MAAY,GACvB,OAAO,CAAC,cAAc,CAAC;IAsB1B;;OAEG;IACG,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASjD;;OAEG;IACG,kBAAkB,CACtB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;IAiBtC;;;;;;;OAOG;IACG,UAAU,CACd,IAAI,GAAE,MAAW,EACjB,IAAI,GAAE,MAAY,EAClB,aAAa,GAAE,MAAY,GAC1B,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IA+BjD;;OAEG;IACG,qBAAqB,CACzB,QAAQ,EAAE,eAAe,GACxB,OAAO,CAAC,cAAc,EAAE,CAAC;IAO5B;;OAEG;IACG,yBAAyB,CAC7B,SAAS,GAAE,MAAY,GACtB,OAAO,CAAC,cAAc,EAAE,CAAC;IAO5B;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAKzC;;OAEG;IACG,MAAM,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAazD;;OAEG;IACH,OAAO,CAAC,cAAc;IA2BtB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAU5B;;OAEG;IACH,OAAO,CAAC,cAAc;IAWtB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAa3B;;OAEG;IACH,OAAO,CAAC,cAAc;IAUtB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAe1B;;OAEG;IACH,OAAO,CAAC,cAAc;IAUtB;;OAEG;IACH,OAAO,CAAC,aAAa;IAqBrB;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAOlC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAO3B;;OAEG;YACW,cAAc;IAkB5B;;OAEG;YACW,YAAY;IAkB1B;;OAEG;YACW,OAAO;CAatB"}