@nahisaho/katashiro-feedback 0.1.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 (33) hide show
  1. package/dist/collector/feedback-collector.d.ts +77 -0
  2. package/dist/collector/feedback-collector.d.ts.map +1 -0
  3. package/dist/collector/feedback-collector.js +119 -0
  4. package/dist/collector/feedback-collector.js.map +1 -0
  5. package/dist/index.d.ts +20 -0
  6. package/dist/index.d.ts.map +1 -0
  7. package/dist/index.js +18 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/interfaces.d.ts +19 -0
  10. package/dist/interfaces.d.ts.map +1 -0
  11. package/dist/interfaces.js +5 -0
  12. package/dist/interfaces.js.map +1 -0
  13. package/dist/learning/learning-engine.d.ts +96 -0
  14. package/dist/learning/learning-engine.d.ts.map +1 -0
  15. package/dist/learning/learning-engine.js +187 -0
  16. package/dist/learning/learning-engine.js.map +1 -0
  17. package/dist/patterns/pattern-detector.d.ts +88 -0
  18. package/dist/patterns/pattern-detector.d.ts.map +1 -0
  19. package/dist/patterns/pattern-detector.js +211 -0
  20. package/dist/patterns/pattern-detector.js.map +1 -0
  21. package/dist/recommender/adaptive-recommender.d.ts +84 -0
  22. package/dist/recommender/adaptive-recommender.d.ts.map +1 -0
  23. package/dist/recommender/adaptive-recommender.js +155 -0
  24. package/dist/recommender/adaptive-recommender.js.map +1 -0
  25. package/dist/storage/feedback-storage.d.ts +87 -0
  26. package/dist/storage/feedback-storage.d.ts.map +1 -0
  27. package/dist/storage/feedback-storage.js +143 -0
  28. package/dist/storage/feedback-storage.js.map +1 -0
  29. package/dist/types.d.ts +27 -0
  30. package/dist/types.d.ts.map +1 -0
  31. package/dist/types.js +5 -0
  32. package/dist/types.js.map +1 -0
  33. package/package.json +39 -0
@@ -0,0 +1,77 @@
1
+ /**
2
+ * FeedbackCollector - ユーザーフィードバック収集
3
+ *
4
+ * accept/reject/modifyアクションでフィードバックを収集
5
+ *
6
+ * @module @nahisaho/katashiro-feedback
7
+ * @task TSK-050
8
+ */
9
+ import { type Result } from '@nahisaho/katashiro-core';
10
+ import type { Feedback, FeedbackAction } from '../types.js';
11
+ /**
12
+ * Feedback input for collection
13
+ */
14
+ export interface FeedbackInput {
15
+ action: FeedbackAction;
16
+ originalContent: string;
17
+ modifiedContent?: string;
18
+ rating?: number;
19
+ context?: Record<string, unknown>;
20
+ }
21
+ /**
22
+ * Feedback statistics
23
+ */
24
+ export interface FeedbackStats {
25
+ total: number;
26
+ acceptCount: number;
27
+ rejectCount: number;
28
+ modifyCount: number;
29
+ averageRating: number;
30
+ }
31
+ /**
32
+ * FeedbackCollector
33
+ *
34
+ * Collects and manages user feedback for learning
35
+ */
36
+ export declare class FeedbackCollector {
37
+ private feedbacks;
38
+ private counter;
39
+ /**
40
+ * Collect feedback
41
+ *
42
+ * @param input - Feedback input
43
+ * @returns Collected feedback
44
+ */
45
+ collect(input: FeedbackInput): Result<Feedback, Error>;
46
+ /**
47
+ * Get all feedback
48
+ *
49
+ * @returns All collected feedback
50
+ */
51
+ getAll(): Result<Feedback[], Error>;
52
+ /**
53
+ * Get feedback by ID
54
+ *
55
+ * @param id - Feedback ID
56
+ * @returns Feedback or null
57
+ */
58
+ getById(id: string): Result<Feedback | null, Error>;
59
+ /**
60
+ * Get feedback by action type
61
+ *
62
+ * @param action - Action type
63
+ * @returns Filtered feedback
64
+ */
65
+ getByAction(action: FeedbackAction): Result<Feedback[], Error>;
66
+ /**
67
+ * Get feedback statistics
68
+ *
69
+ * @returns Statistics
70
+ */
71
+ getStats(): Result<FeedbackStats, Error>;
72
+ /**
73
+ * Clear all feedback
74
+ */
75
+ clear(): void;
76
+ }
77
+ //# sourceMappingURL=feedback-collector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedback-collector.d.ts","sourceRoot":"","sources":["../../src/collector/feedback-collector.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,cAAc,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;;;GAIG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,SAAS,CAAoC;IACrD,OAAO,CAAC,OAAO,CAAK;IAEpB;;;;;OAKG;IACH,OAAO,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC;IAyBtD;;;;OAIG;IACH,MAAM,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC;IAQnC;;;;;OAKG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC,QAAQ,GAAG,IAAI,EAAE,KAAK,CAAC;IAQnD;;;;;OAKG;IACH,WAAW,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC;IAW9D;;;;OAIG;IACH,QAAQ,IAAI,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC;IAkBxC;;OAEG;IACH,KAAK,IAAI,IAAI;CAId"}
@@ -0,0 +1,119 @@
1
+ /**
2
+ * FeedbackCollector - ユーザーフィードバック収集
3
+ *
4
+ * accept/reject/modifyアクションでフィードバックを収集
5
+ *
6
+ * @module @nahisaho/katashiro-feedback
7
+ * @task TSK-050
8
+ */
9
+ import { ok, err } from '@nahisaho/katashiro-core';
10
+ /**
11
+ * FeedbackCollector
12
+ *
13
+ * Collects and manages user feedback for learning
14
+ */
15
+ export class FeedbackCollector {
16
+ feedbacks = new Map();
17
+ counter = 0;
18
+ /**
19
+ * Collect feedback
20
+ *
21
+ * @param input - Feedback input
22
+ * @returns Collected feedback
23
+ */
24
+ collect(input) {
25
+ try {
26
+ // Validate rating if provided
27
+ if (input.rating !== undefined && (input.rating < 1 || input.rating > 5)) {
28
+ return err(new Error('Rating must be between 1 and 5'));
29
+ }
30
+ const id = `FB-${++this.counter}`;
31
+ const feedback = {
32
+ id,
33
+ action: input.action,
34
+ originalContent: input.originalContent,
35
+ modifiedContent: input.modifiedContent,
36
+ rating: input.rating,
37
+ context: input.context,
38
+ createdAt: new Date().toISOString(),
39
+ };
40
+ this.feedbacks.set(id, feedback);
41
+ return ok(feedback);
42
+ }
43
+ catch (error) {
44
+ return err(error instanceof Error ? error : new Error(String(error)));
45
+ }
46
+ }
47
+ /**
48
+ * Get all feedback
49
+ *
50
+ * @returns All collected feedback
51
+ */
52
+ getAll() {
53
+ try {
54
+ return ok(Array.from(this.feedbacks.values()));
55
+ }
56
+ catch (error) {
57
+ return err(error instanceof Error ? error : new Error(String(error)));
58
+ }
59
+ }
60
+ /**
61
+ * Get feedback by ID
62
+ *
63
+ * @param id - Feedback ID
64
+ * @returns Feedback or null
65
+ */
66
+ getById(id) {
67
+ try {
68
+ return ok(this.feedbacks.get(id) ?? null);
69
+ }
70
+ catch (error) {
71
+ return err(error instanceof Error ? error : new Error(String(error)));
72
+ }
73
+ }
74
+ /**
75
+ * Get feedback by action type
76
+ *
77
+ * @param action - Action type
78
+ * @returns Filtered feedback
79
+ */
80
+ getByAction(action) {
81
+ try {
82
+ const filtered = Array.from(this.feedbacks.values()).filter((f) => f.action === action);
83
+ return ok(filtered);
84
+ }
85
+ catch (error) {
86
+ return err(error instanceof Error ? error : new Error(String(error)));
87
+ }
88
+ }
89
+ /**
90
+ * Get feedback statistics
91
+ *
92
+ * @returns Statistics
93
+ */
94
+ getStats() {
95
+ try {
96
+ const all = Array.from(this.feedbacks.values());
97
+ const withRating = all.filter((f) => f.rating !== undefined);
98
+ const totalRating = withRating.reduce((sum, f) => sum + (f.rating ?? 0), 0);
99
+ return ok({
100
+ total: all.length,
101
+ acceptCount: all.filter((f) => f.action === 'accept').length,
102
+ rejectCount: all.filter((f) => f.action === 'reject').length,
103
+ modifyCount: all.filter((f) => f.action === 'modify').length,
104
+ averageRating: withRating.length > 0 ? totalRating / withRating.length : 0,
105
+ });
106
+ }
107
+ catch (error) {
108
+ return err(error instanceof Error ? error : new Error(String(error)));
109
+ }
110
+ }
111
+ /**
112
+ * Clear all feedback
113
+ */
114
+ clear() {
115
+ this.feedbacks.clear();
116
+ this.counter = 0;
117
+ }
118
+ }
119
+ //# sourceMappingURL=feedback-collector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedback-collector.js","sourceRoot":"","sources":["../../src/collector/feedback-collector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * @nahisaho/katashiro-feedback
3
+ * フィードバック学習パッケージ
4
+ *
5
+ * @requirement REQ-UX-003
6
+ * @design DES-KATASHIRO-001 §3.2
7
+ */
8
+ export { FeedbackCollector } from './collector/feedback-collector.js';
9
+ export type { FeedbackInput, FeedbackStats } from './collector/feedback-collector.js';
10
+ export { FeedbackStorage } from './storage/feedback-storage.js';
11
+ export type { ListOptions, FeedbackExport } from './storage/feedback-storage.js';
12
+ export { LearningEngine } from './learning/learning-engine.js';
13
+ export type { LearningResult, PatternQueryOptions, SuggestionOptions, LearningStats, } from './learning/learning-engine.js';
14
+ export { PatternDetector } from './patterns/pattern-detector.js';
15
+ export type { DetectionResult, ContextPatterns, AnalysisResult, } from './patterns/pattern-detector.js';
16
+ export { AdaptiveRecommender } from './recommender/adaptive-recommender.js';
17
+ export type { RecommendOptions, RecommenderStats } from './recommender/adaptive-recommender.js';
18
+ export type { IFeedbackCollector, IPatternExtractor, } from './interfaces.js';
19
+ export type { Feedback, FeedbackAction, Pattern, PatternType, } from './types.js';
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAGtF,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAGjF,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,YAAY,EACV,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,GACd,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,YAAY,EACV,eAAe,EACf,eAAe,EACf,cAAc,GACf,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAC5E,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AAGhG,YAAY,EACV,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAGzB,YAAY,EACV,QAAQ,EACR,cAAc,EACd,OAAO,EACP,WAAW,GACZ,MAAM,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @nahisaho/katashiro-feedback
3
+ * フィードバック学習パッケージ
4
+ *
5
+ * @requirement REQ-UX-003
6
+ * @design DES-KATASHIRO-001 §3.2
7
+ */
8
+ // Collector
9
+ export { FeedbackCollector } from './collector/feedback-collector.js';
10
+ // Storage
11
+ export { FeedbackStorage } from './storage/feedback-storage.js';
12
+ // Learning
13
+ export { LearningEngine } from './learning/learning-engine.js';
14
+ // Patterns
15
+ export { PatternDetector } from './patterns/pattern-detector.js';
16
+ // Recommender
17
+ export { AdaptiveRecommender } from './recommender/adaptive-recommender.js';
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,YAAY;AACZ,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAGtE,UAAU;AACV,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAGhE,WAAW;AACX,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAQ/D,WAAW;AACX,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAOjE,cAAc;AACd,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Feedbackインターフェース定義
3
+ */
4
+ import type { Result, ID } from '@nahisaho/katashiro-core';
5
+ import type { Feedback, FeedbackAction, Pattern } from './types.js';
6
+ export interface IFeedbackCollector {
7
+ record(feedback: Feedback): Promise<Result<void, Error>>;
8
+ get(id: ID): Promise<Result<Feedback | null, Error>>;
9
+ list(filter?: {
10
+ action?: FeedbackAction;
11
+ }): Promise<Result<Feedback[], Error>>;
12
+ export(format: 'json' | 'jsonl'): Promise<Result<string, Error>>;
13
+ }
14
+ export interface IPatternExtractor {
15
+ extract(feedbacks: Feedback[]): Promise<Result<Pattern[], Error>>;
16
+ getPatterns(): Promise<Result<Pattern[], Error>>;
17
+ applyPattern(patternId: ID, context: unknown): Promise<Result<unknown, Error>>;
18
+ }
19
+ //# sourceMappingURL=interfaces.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAEpE,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IACzD,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IACrD,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,cAAc,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;IAC/E,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;CAClE;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;IAClE,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;IACjD,YAAY,CAAC,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;CAChF"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Feedbackインターフェース定義
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * LearningEngine - フィードバックからの学習
3
+ *
4
+ * フィードバックデータからパターンを学習し推論を改善
5
+ *
6
+ * @module @nahisaho/katashiro-feedback
7
+ * @task TSK-052
8
+ */
9
+ import { type Result } from '@nahisaho/katashiro-core';
10
+ import type { Feedback, Pattern, PatternType } from '../types.js';
11
+ /**
12
+ * Learning result
13
+ */
14
+ export interface LearningResult {
15
+ patternsLearned: number;
16
+ feedbacksProcessed: number;
17
+ timestamp: string;
18
+ }
19
+ /**
20
+ * Pattern query options
21
+ */
22
+ export interface PatternQueryOptions {
23
+ type?: PatternType;
24
+ minConfidence?: number;
25
+ limit?: number;
26
+ }
27
+ /**
28
+ * Suggestion options
29
+ */
30
+ export interface SuggestionOptions {
31
+ context: string;
32
+ limit?: number;
33
+ }
34
+ /**
35
+ * Learning statistics
36
+ */
37
+ export interface LearningStats {
38
+ totalPatterns: number;
39
+ totalFeedbackProcessed: number;
40
+ patternsByType: Record<PatternType, number>;
41
+ averageConfidence: number;
42
+ }
43
+ /**
44
+ * LearningEngine
45
+ *
46
+ * Learns patterns from user feedback
47
+ */
48
+ export declare class LearningEngine {
49
+ private patterns;
50
+ private feedbackProcessed;
51
+ private patternCounter;
52
+ /**
53
+ * Learn from feedback
54
+ *
55
+ * @param feedbacks - Feedbacks to learn from
56
+ * @returns Learning result
57
+ */
58
+ learn(feedbacks: Feedback[]): Result<LearningResult, Error>;
59
+ /**
60
+ * Get learned patterns
61
+ *
62
+ * @param options - Query options
63
+ * @returns Patterns
64
+ */
65
+ getPatterns(options?: PatternQueryOptions): Result<Pattern[], Error>;
66
+ /**
67
+ * Suggest patterns for context
68
+ *
69
+ * @param options - Suggestion options
70
+ * @returns Suggested patterns
71
+ */
72
+ suggest(options: SuggestionOptions): Result<Pattern[], Error>;
73
+ /**
74
+ * Get learning statistics
75
+ *
76
+ * @returns Statistics
77
+ */
78
+ getStats(): Result<LearningStats, Error>;
79
+ /**
80
+ * Extract pattern from feedback
81
+ */
82
+ private extractPattern;
83
+ /**
84
+ * Find similar existing pattern
85
+ */
86
+ private findSimilarPattern;
87
+ /**
88
+ * Update existing pattern with new feedback
89
+ */
90
+ private updatePattern;
91
+ /**
92
+ * Clear learned patterns
93
+ */
94
+ clear(): void;
95
+ }
96
+ //# sourceMappingURL=learning-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"learning-engine.d.ts","sourceRoot":"","sources":["../../src/learning/learning-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAElE;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAC5C,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;;;GAIG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,cAAc,CAAK;IAE3B;;;;;OAKG;IACH,KAAK,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,cAAc,EAAE,KAAK,CAAC;IAgC3D;;;;;OAKG;IACH,WAAW,CAAC,OAAO,GAAE,mBAAwB,GAAG,MAAM,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC;IAyBxE;;;;;OAKG;IACH,OAAO,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC;IAiB7D;;;;OAIG;IACH,QAAQ,IAAI,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC;IA0BxC;;OAEG;IACH,OAAO,CAAC,cAAc;IAuBtB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAU1B;;OAEG;IACH,OAAO,CAAC,aAAa;IAUrB;;OAEG;IACH,KAAK,IAAI,IAAI;CAKd"}
@@ -0,0 +1,187 @@
1
+ /**
2
+ * LearningEngine - フィードバックからの学習
3
+ *
4
+ * フィードバックデータからパターンを学習し推論を改善
5
+ *
6
+ * @module @nahisaho/katashiro-feedback
7
+ * @task TSK-052
8
+ */
9
+ import { ok, err } from '@nahisaho/katashiro-core';
10
+ /**
11
+ * LearningEngine
12
+ *
13
+ * Learns patterns from user feedback
14
+ */
15
+ export class LearningEngine {
16
+ patterns = new Map();
17
+ feedbackProcessed = 0;
18
+ patternCounter = 0;
19
+ /**
20
+ * Learn from feedback
21
+ *
22
+ * @param feedbacks - Feedbacks to learn from
23
+ * @returns Learning result
24
+ */
25
+ learn(feedbacks) {
26
+ try {
27
+ let patternsLearned = 0;
28
+ for (const feedback of feedbacks) {
29
+ this.feedbackProcessed++;
30
+ // Extract pattern based on action type
31
+ const pattern = this.extractPattern(feedback);
32
+ if (pattern) {
33
+ const existingPattern = this.findSimilarPattern(pattern);
34
+ if (existingPattern) {
35
+ // Update existing pattern
36
+ this.updatePattern(existingPattern, feedback);
37
+ }
38
+ else {
39
+ // Add new pattern
40
+ this.patterns.set(pattern.id, pattern);
41
+ patternsLearned++;
42
+ }
43
+ }
44
+ }
45
+ return ok({
46
+ patternsLearned,
47
+ feedbacksProcessed: feedbacks.length,
48
+ timestamp: new Date().toISOString(),
49
+ });
50
+ }
51
+ catch (error) {
52
+ return err(error instanceof Error ? error : new Error(String(error)));
53
+ }
54
+ }
55
+ /**
56
+ * Get learned patterns
57
+ *
58
+ * @param options - Query options
59
+ * @returns Patterns
60
+ */
61
+ getPatterns(options = {}) {
62
+ try {
63
+ let patterns = Array.from(this.patterns.values());
64
+ // Filter by type
65
+ if (options.type) {
66
+ patterns = patterns.filter((p) => p.type === options.type);
67
+ }
68
+ // Filter by confidence
69
+ if (options.minConfidence !== undefined) {
70
+ patterns = patterns.filter((p) => p.confidence >= options.minConfidence);
71
+ }
72
+ // Apply limit
73
+ if (options.limit) {
74
+ patterns = patterns.slice(0, options.limit);
75
+ }
76
+ return ok(patterns);
77
+ }
78
+ catch (error) {
79
+ return err(error instanceof Error ? error : new Error(String(error)));
80
+ }
81
+ }
82
+ /**
83
+ * Suggest patterns for context
84
+ *
85
+ * @param options - Suggestion options
86
+ * @returns Suggested patterns
87
+ */
88
+ suggest(options) {
89
+ try {
90
+ let patterns = Array.from(this.patterns.values());
91
+ // Sort by confidence
92
+ patterns.sort((a, b) => b.confidence - a.confidence);
93
+ // Apply limit
94
+ const limit = options.limit ?? 10;
95
+ patterns = patterns.slice(0, limit);
96
+ return ok(patterns);
97
+ }
98
+ catch (error) {
99
+ return err(error instanceof Error ? error : new Error(String(error)));
100
+ }
101
+ }
102
+ /**
103
+ * Get learning statistics
104
+ *
105
+ * @returns Statistics
106
+ */
107
+ getStats() {
108
+ try {
109
+ const patterns = Array.from(this.patterns.values());
110
+ const patternsByType = {
111
+ success: 0,
112
+ error: 0,
113
+ modification: 0,
114
+ };
115
+ let totalConfidence = 0;
116
+ for (const pattern of patterns) {
117
+ patternsByType[pattern.type]++;
118
+ totalConfidence += pattern.confidence;
119
+ }
120
+ return ok({
121
+ totalPatterns: patterns.length,
122
+ totalFeedbackProcessed: this.feedbackProcessed,
123
+ patternsByType,
124
+ averageConfidence: patterns.length > 0 ? totalConfidence / patterns.length : 0,
125
+ });
126
+ }
127
+ catch (error) {
128
+ return err(error instanceof Error ? error : new Error(String(error)));
129
+ }
130
+ }
131
+ /**
132
+ * Extract pattern from feedback
133
+ */
134
+ extractPattern(feedback) {
135
+ const type = feedback.action === 'accept'
136
+ ? 'success'
137
+ : feedback.action === 'reject'
138
+ ? 'error'
139
+ : 'modification';
140
+ const id = `PAT-${++this.patternCounter}`;
141
+ const now = new Date().toISOString();
142
+ return {
143
+ id,
144
+ type,
145
+ name: `Pattern from ${feedback.id}`,
146
+ description: `Extracted from ${feedback.action} feedback`,
147
+ confidence: 0.5, // Initial confidence
148
+ occurrences: 1,
149
+ template: feedback.originalContent,
150
+ createdAt: now,
151
+ updatedAt: now,
152
+ };
153
+ }
154
+ /**
155
+ * Find similar existing pattern
156
+ */
157
+ findSimilarPattern(newPattern) {
158
+ for (const pattern of this.patterns.values()) {
159
+ if (pattern.type === newPattern.type &&
160
+ pattern.template === newPattern.template) {
161
+ return pattern;
162
+ }
163
+ }
164
+ return null;
165
+ }
166
+ /**
167
+ * Update existing pattern with new feedback
168
+ */
169
+ updatePattern(pattern, _feedback) {
170
+ const updated = {
171
+ ...pattern,
172
+ occurrences: pattern.occurrences + 1,
173
+ confidence: Math.min(pattern.confidence + 0.1, 1.0),
174
+ updatedAt: new Date().toISOString(),
175
+ };
176
+ this.patterns.set(pattern.id, updated);
177
+ }
178
+ /**
179
+ * Clear learned patterns
180
+ */
181
+ clear() {
182
+ this.patterns.clear();
183
+ this.feedbackProcessed = 0;
184
+ this.patternCounter = 0;
185
+ }
186
+ }
187
+ //# 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,88 @@
1
+ /**
2
+ * PatternDetector - パターン検出
3
+ *
4
+ * フィードバックからコードパターンを検出・分類
5
+ *
6
+ * @module @nahisaho/katashiro-feedback
7
+ * @task TSK-053
8
+ */
9
+ import { type Result } from '@nahisaho/katashiro-core';
10
+ import type { Feedback, Pattern } from '../types.js';
11
+ /**
12
+ * Detection result
13
+ */
14
+ export interface DetectionResult {
15
+ patterns: Pattern[];
16
+ feedbackAnalyzed: number;
17
+ timestamp: string;
18
+ }
19
+ /**
20
+ * Context-grouped patterns
21
+ */
22
+ export interface ContextPatterns {
23
+ [context: string]: Pattern[];
24
+ }
25
+ /**
26
+ * Analysis result
27
+ */
28
+ export interface AnalysisResult {
29
+ totalFeedback: number;
30
+ acceptRate: number;
31
+ rejectRate: number;
32
+ modifyRate: number;
33
+ topPatterns: Pattern[];
34
+ }
35
+ /**
36
+ * PatternDetector
37
+ *
38
+ * Detects patterns from feedback data
39
+ */
40
+ export declare class PatternDetector {
41
+ private patternCounter;
42
+ /**
43
+ * Detect patterns from feedback
44
+ *
45
+ * @param feedbacks - Feedbacks to analyze
46
+ * @returns Detection result
47
+ */
48
+ detect(feedbacks: Feedback[]): Result<DetectionResult, Error>;
49
+ /**
50
+ * Detect patterns grouped by context
51
+ *
52
+ * @param feedbacks - Feedbacks to analyze
53
+ * @returns Context-grouped patterns
54
+ */
55
+ detectByContext(feedbacks: Feedback[]): Result<ContextPatterns, Error>;
56
+ /**
57
+ * Analyze feedback patterns
58
+ *
59
+ * @param feedbacks - Feedbacks to analyze
60
+ * @returns Analysis result
61
+ */
62
+ analyze(feedbacks: Feedback[]): Result<AnalysisResult, Error>;
63
+ /**
64
+ * Calculate similarity between two contents
65
+ *
66
+ * @param content1 - First content
67
+ * @param content2 - Second content
68
+ * @returns Similarity score (0-1)
69
+ */
70
+ getSimilarity(content1: string, content2: string): Result<number, Error>;
71
+ /**
72
+ * Group feedbacks by content similarity
73
+ */
74
+ private groupByContent;
75
+ /**
76
+ * Normalize content for comparison
77
+ */
78
+ private normalizeContent;
79
+ /**
80
+ * Tokenize content
81
+ */
82
+ private tokenize;
83
+ /**
84
+ * Create pattern from group of feedbacks
85
+ */
86
+ private createPatternFromGroup;
87
+ }
88
+ //# sourceMappingURL=pattern-detector.d.ts.map