@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 @@
1
+ {"version":3,"file":"pattern-detector.d.ts","sourceRoot":"","sources":["../../src/patterns/pattern-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAe,MAAM,aAAa,CAAC;AAElE;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,EAAE,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,OAAO,EAAE,CAAC;CACxB;AAED;;;;GAIG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,cAAc,CAAK;IAE3B;;;;;OAKG;IACH,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,eAAe,EAAE,KAAK,CAAC;IAuB7D;;;;;OAKG;IACH,eAAe,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,eAAe,EAAE,KAAK,CAAC;IA+BtE;;;;;OAKG;IACH,OAAO,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,cAAc,EAAE,KAAK,CAAC;IAmC7D;;;;;;OAMG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;IAsBxE;;OAEG;IACH,OAAO,CAAC,cAAc;IAgBtB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IASxB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAMhB;;OAEG;IACH,OAAO,CAAC,sBAAsB;CAmC/B"}
@@ -0,0 +1,211 @@
1
+ /**
2
+ * PatternDetector - パターン検出
3
+ *
4
+ * フィードバックからコードパターンを検出・分類
5
+ *
6
+ * @module @nahisaho/katashiro-feedback
7
+ * @task TSK-053
8
+ */
9
+ import { ok, err } from '@nahisaho/katashiro-core';
10
+ /**
11
+ * PatternDetector
12
+ *
13
+ * Detects patterns from feedback data
14
+ */
15
+ export class PatternDetector {
16
+ patternCounter = 0;
17
+ /**
18
+ * Detect patterns from feedback
19
+ *
20
+ * @param feedbacks - Feedbacks to analyze
21
+ * @returns Detection result
22
+ */
23
+ detect(feedbacks) {
24
+ try {
25
+ const patterns = [];
26
+ const contentGroups = this.groupByContent(feedbacks);
27
+ for (const [_key, group] of contentGroups) {
28
+ if (group.length >= 2) {
29
+ // Multiple similar feedbacks - likely a pattern
30
+ const pattern = this.createPatternFromGroup(group);
31
+ patterns.push(pattern);
32
+ }
33
+ }
34
+ return ok({
35
+ patterns,
36
+ feedbackAnalyzed: feedbacks.length,
37
+ timestamp: new Date().toISOString(),
38
+ });
39
+ }
40
+ catch (error) {
41
+ return err(error instanceof Error ? error : new Error(String(error)));
42
+ }
43
+ }
44
+ /**
45
+ * Detect patterns grouped by context
46
+ *
47
+ * @param feedbacks - Feedbacks to analyze
48
+ * @returns Context-grouped patterns
49
+ */
50
+ detectByContext(feedbacks) {
51
+ try {
52
+ const contextGroups = new Map();
53
+ // Group by context
54
+ for (const feedback of feedbacks) {
55
+ const contextKey = feedback.context
56
+ ? JSON.stringify(feedback.context)
57
+ : 'default';
58
+ if (!contextGroups.has(contextKey)) {
59
+ contextGroups.set(contextKey, []);
60
+ }
61
+ contextGroups.get(contextKey).push(feedback);
62
+ }
63
+ // Detect patterns for each context
64
+ const result = {};
65
+ for (const [context, group] of contextGroups) {
66
+ const detected = this.detect(group);
67
+ if (detected._tag === 'Ok') {
68
+ result[context] = detected.value.patterns;
69
+ }
70
+ }
71
+ return ok(result);
72
+ }
73
+ catch (error) {
74
+ return err(error instanceof Error ? error : new Error(String(error)));
75
+ }
76
+ }
77
+ /**
78
+ * Analyze feedback patterns
79
+ *
80
+ * @param feedbacks - Feedbacks to analyze
81
+ * @returns Analysis result
82
+ */
83
+ analyze(feedbacks) {
84
+ try {
85
+ const total = feedbacks.length;
86
+ if (total === 0) {
87
+ return ok({
88
+ totalFeedback: 0,
89
+ acceptRate: 0,
90
+ rejectRate: 0,
91
+ modifyRate: 0,
92
+ topPatterns: [],
93
+ });
94
+ }
95
+ const acceptCount = feedbacks.filter((f) => f.action === 'accept').length;
96
+ const rejectCount = feedbacks.filter((f) => f.action === 'reject').length;
97
+ const modifyCount = feedbacks.filter((f) => f.action === 'modify').length;
98
+ // Get top patterns
99
+ const detectResult = this.detect(feedbacks);
100
+ const topPatterns = detectResult._tag === 'Ok'
101
+ ? detectResult.value.patterns.slice(0, 5)
102
+ : [];
103
+ return ok({
104
+ totalFeedback: total,
105
+ acceptRate: acceptCount / total,
106
+ rejectRate: rejectCount / total,
107
+ modifyRate: modifyCount / total,
108
+ topPatterns,
109
+ });
110
+ }
111
+ catch (error) {
112
+ return err(error instanceof Error ? error : new Error(String(error)));
113
+ }
114
+ }
115
+ /**
116
+ * Calculate similarity between two contents
117
+ *
118
+ * @param content1 - First content
119
+ * @param content2 - Second content
120
+ * @returns Similarity score (0-1)
121
+ */
122
+ getSimilarity(content1, content2) {
123
+ try {
124
+ // Simple token-based similarity
125
+ const tokens1 = this.tokenize(content1);
126
+ const tokens2 = this.tokenize(content2);
127
+ const set1 = new Set(tokens1);
128
+ const set2 = new Set(tokens2);
129
+ const intersection = new Set([...set1].filter((t) => set2.has(t)));
130
+ const union = new Set([...set1, ...set2]);
131
+ const similarity = union.size > 0
132
+ ? intersection.size / union.size
133
+ : 0;
134
+ return ok(similarity);
135
+ }
136
+ catch (error) {
137
+ return err(error instanceof Error ? error : new Error(String(error)));
138
+ }
139
+ }
140
+ /**
141
+ * Group feedbacks by content similarity
142
+ */
143
+ groupByContent(feedbacks) {
144
+ const groups = new Map();
145
+ for (const feedback of feedbacks) {
146
+ // Normalize content for grouping
147
+ const normalizedKey = this.normalizeContent(feedback.originalContent);
148
+ if (!groups.has(normalizedKey)) {
149
+ groups.set(normalizedKey, []);
150
+ }
151
+ groups.get(normalizedKey).push(feedback);
152
+ }
153
+ return groups;
154
+ }
155
+ /**
156
+ * Normalize content for comparison
157
+ */
158
+ normalizeContent(content) {
159
+ // Remove whitespace variations and normalize
160
+ return content
161
+ .replace(/\s+/g, ' ')
162
+ .replace(/\b(var|let|const)\b/g, 'VAR')
163
+ .replace(/\b[a-z_][a-z0-9_]*\b/gi, 'ID')
164
+ .trim();
165
+ }
166
+ /**
167
+ * Tokenize content
168
+ */
169
+ tokenize(content) {
170
+ return content
171
+ .split(/[\s{}()[\];,.<>:=+\-*/!?&|^~]+/)
172
+ .filter((t) => t.length > 0);
173
+ }
174
+ /**
175
+ * Create pattern from group of feedbacks
176
+ */
177
+ createPatternFromGroup(group) {
178
+ const id = `PAT-${++this.patternCounter}`;
179
+ const now = new Date().toISOString();
180
+ // Determine type by most common action
181
+ const actions = group.map((f) => f.action);
182
+ const acceptCount = actions.filter((a) => a === 'accept').length;
183
+ const rejectCount = actions.filter((a) => a === 'reject').length;
184
+ const modifyCount = actions.filter((a) => a === 'modify').length;
185
+ let type;
186
+ if (acceptCount >= rejectCount && acceptCount >= modifyCount) {
187
+ type = 'success';
188
+ }
189
+ else if (rejectCount > acceptCount && rejectCount > modifyCount) {
190
+ type = 'error';
191
+ }
192
+ else {
193
+ type = 'modification';
194
+ }
195
+ // Calculate confidence based on consistency
196
+ const maxCount = Math.max(acceptCount, rejectCount, modifyCount);
197
+ const confidence = maxCount / group.length;
198
+ return {
199
+ id,
200
+ type,
201
+ name: `Detected pattern ${id}`,
202
+ description: `Pattern detected from ${group.length} similar feedbacks`,
203
+ confidence,
204
+ occurrences: group.length,
205
+ template: group[0]?.originalContent,
206
+ createdAt: now,
207
+ updatedAt: now,
208
+ };
209
+ }
210
+ }
211
+ //# sourceMappingURL=pattern-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern-detector.js","sourceRoot":"","sources":["../../src/patterns/pattern-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * AdaptiveRecommender - 適応的推奨
3
+ *
4
+ * パターンの使用履歴から学習し推奨を改善
5
+ *
6
+ * @module @nahisaho/katashiro-feedback
7
+ * @task TSK-054
8
+ */
9
+ import { type Result } from '@nahisaho/katashiro-core';
10
+ import type { Pattern, PatternType } from '../types.js';
11
+ /**
12
+ * Recommendation options
13
+ */
14
+ export interface RecommendOptions {
15
+ query: string;
16
+ type?: PatternType;
17
+ limit?: number;
18
+ minConfidence?: number;
19
+ }
20
+ /**
21
+ * Recommender statistics
22
+ */
23
+ export interface RecommenderStats {
24
+ totalPatterns: number;
25
+ totalUsages: number;
26
+ averageConfidence: number;
27
+ topPatterns: Pattern[];
28
+ }
29
+ /**
30
+ * AdaptiveRecommender
31
+ *
32
+ * Recommends patterns based on usage and learning
33
+ */
34
+ export declare class AdaptiveRecommender {
35
+ private patterns;
36
+ private usageCount;
37
+ /**
38
+ * Add pattern to recommender
39
+ *
40
+ * @param pattern - Pattern to add
41
+ * @returns Result
42
+ */
43
+ addPattern(pattern: Pattern): Result<void, Error>;
44
+ /**
45
+ * Recommend patterns based on options
46
+ *
47
+ * @param options - Recommendation options
48
+ * @returns Recommended patterns
49
+ */
50
+ recommend(options: RecommendOptions): Result<Pattern[], Error>;
51
+ /**
52
+ * Record pattern usage
53
+ *
54
+ * @param patternId - Pattern ID
55
+ * @param success - Whether usage was successful
56
+ * @returns Result
57
+ */
58
+ recordUsage(patternId: string, success: boolean): Result<void, Error>;
59
+ /**
60
+ * Get pattern by ID
61
+ *
62
+ * @param patternId - Pattern ID
63
+ * @returns Pattern or null
64
+ */
65
+ getPattern(patternId: string): Result<Pattern | null, Error>;
66
+ /**
67
+ * Get recommender statistics
68
+ *
69
+ * @returns Statistics
70
+ */
71
+ getStats(): Result<RecommenderStats, Error>;
72
+ /**
73
+ * Remove pattern
74
+ *
75
+ * @param patternId - Pattern ID
76
+ * @returns Whether removed
77
+ */
78
+ removePattern(patternId: string): Result<boolean, Error>;
79
+ /**
80
+ * Clear all patterns
81
+ */
82
+ clear(): void;
83
+ }
84
+ //# sourceMappingURL=adaptive-recommender.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adaptive-recommender.d.ts","sourceRoot":"","sources":["../../src/recommender/adaptive-recommender.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,OAAO,EAAE,CAAC;CACxB;AAED;;;;GAIG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,UAAU,CAAK;IAEvB;;;;;OAKG;IACH,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;IASjD;;;;;OAKG;IACH,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC;IA+B9D;;;;;;OAMG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;IA2BrE;;;;;OAKG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,OAAO,GAAG,IAAI,EAAE,KAAK,CAAC;IAQ5D;;;;OAIG;IACH,QAAQ,IAAI,MAAM,CAAC,gBAAgB,EAAE,KAAK,CAAC;IAqB3C;;;;;OAKG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC;IAQxD;;OAEG;IACH,KAAK,IAAI,IAAI;CAId"}
@@ -0,0 +1,155 @@
1
+ /**
2
+ * AdaptiveRecommender - 適応的推奨
3
+ *
4
+ * パターンの使用履歴から学習し推奨を改善
5
+ *
6
+ * @module @nahisaho/katashiro-feedback
7
+ * @task TSK-054
8
+ */
9
+ import { ok, err } from '@nahisaho/katashiro-core';
10
+ /**
11
+ * AdaptiveRecommender
12
+ *
13
+ * Recommends patterns based on usage and learning
14
+ */
15
+ export class AdaptiveRecommender {
16
+ patterns = new Map();
17
+ usageCount = 0;
18
+ /**
19
+ * Add pattern to recommender
20
+ *
21
+ * @param pattern - Pattern to add
22
+ * @returns Result
23
+ */
24
+ addPattern(pattern) {
25
+ try {
26
+ this.patterns.set(pattern.id, pattern);
27
+ return ok(undefined);
28
+ }
29
+ catch (error) {
30
+ return err(error instanceof Error ? error : new Error(String(error)));
31
+ }
32
+ }
33
+ /**
34
+ * Recommend patterns based on options
35
+ *
36
+ * @param options - Recommendation options
37
+ * @returns Recommended patterns
38
+ */
39
+ recommend(options) {
40
+ try {
41
+ let patterns = Array.from(this.patterns.values());
42
+ // Filter by type
43
+ if (options.type) {
44
+ patterns = patterns.filter((p) => p.type === options.type);
45
+ }
46
+ // Filter by minimum confidence
47
+ if (options.minConfidence !== undefined) {
48
+ patterns = patterns.filter((p) => p.confidence >= options.minConfidence);
49
+ }
50
+ // Sort by score (confidence * occurrences)
51
+ patterns.sort((a, b) => {
52
+ const scoreA = a.confidence * Math.log(a.occurrences + 1);
53
+ const scoreB = b.confidence * Math.log(b.occurrences + 1);
54
+ return scoreB - scoreA;
55
+ });
56
+ // Apply limit
57
+ const limit = options.limit ?? 10;
58
+ patterns = patterns.slice(0, limit);
59
+ return ok(patterns);
60
+ }
61
+ catch (error) {
62
+ return err(error instanceof Error ? error : new Error(String(error)));
63
+ }
64
+ }
65
+ /**
66
+ * Record pattern usage
67
+ *
68
+ * @param patternId - Pattern ID
69
+ * @param success - Whether usage was successful
70
+ * @returns Result
71
+ */
72
+ recordUsage(patternId, success) {
73
+ try {
74
+ const pattern = this.patterns.get(patternId);
75
+ if (!pattern) {
76
+ return err(new Error(`Pattern not found: ${patternId}`));
77
+ }
78
+ this.usageCount++;
79
+ // Adjust confidence based on success/failure
80
+ const adjustment = success ? 0.05 : -0.05;
81
+ const newConfidence = Math.max(0, Math.min(1, pattern.confidence + adjustment));
82
+ const updated = {
83
+ ...pattern,
84
+ confidence: newConfidence,
85
+ occurrences: pattern.occurrences + 1,
86
+ updatedAt: new Date().toISOString(),
87
+ };
88
+ this.patterns.set(patternId, updated);
89
+ return ok(undefined);
90
+ }
91
+ catch (error) {
92
+ return err(error instanceof Error ? error : new Error(String(error)));
93
+ }
94
+ }
95
+ /**
96
+ * Get pattern by ID
97
+ *
98
+ * @param patternId - Pattern ID
99
+ * @returns Pattern or null
100
+ */
101
+ getPattern(patternId) {
102
+ try {
103
+ return ok(this.patterns.get(patternId) ?? null);
104
+ }
105
+ catch (error) {
106
+ return err(error instanceof Error ? error : new Error(String(error)));
107
+ }
108
+ }
109
+ /**
110
+ * Get recommender statistics
111
+ *
112
+ * @returns Statistics
113
+ */
114
+ getStats() {
115
+ try {
116
+ const patterns = Array.from(this.patterns.values());
117
+ const totalConfidence = patterns.reduce((sum, p) => sum + p.confidence, 0);
118
+ // Get top patterns
119
+ const topPatterns = [...patterns]
120
+ .sort((a, b) => b.occurrences - a.occurrences)
121
+ .slice(0, 5);
122
+ return ok({
123
+ totalPatterns: patterns.length,
124
+ totalUsages: this.usageCount,
125
+ averageConfidence: patterns.length > 0 ? totalConfidence / patterns.length : 0,
126
+ topPatterns,
127
+ });
128
+ }
129
+ catch (error) {
130
+ return err(error instanceof Error ? error : new Error(String(error)));
131
+ }
132
+ }
133
+ /**
134
+ * Remove pattern
135
+ *
136
+ * @param patternId - Pattern ID
137
+ * @returns Whether removed
138
+ */
139
+ removePattern(patternId) {
140
+ try {
141
+ return ok(this.patterns.delete(patternId));
142
+ }
143
+ catch (error) {
144
+ return err(error instanceof Error ? error : new Error(String(error)));
145
+ }
146
+ }
147
+ /**
148
+ * Clear all patterns
149
+ */
150
+ clear() {
151
+ this.patterns.clear();
152
+ this.usageCount = 0;
153
+ }
154
+ }
155
+ //# sourceMappingURL=adaptive-recommender.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adaptive-recommender.js","sourceRoot":"","sources":["../../src/recommender/adaptive-recommender.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * FeedbackStorage - フィードバックの永続化
3
+ *
4
+ * フィードバックの保存・読み込み・エクスポート
5
+ *
6
+ * @module @nahisaho/katashiro-feedback
7
+ * @task TSK-051
8
+ */
9
+ import { type Result } from '@nahisaho/katashiro-core';
10
+ import type { Feedback, FeedbackAction } from '../types.js';
11
+ /**
12
+ * List options
13
+ */
14
+ export interface ListOptions {
15
+ offset?: number;
16
+ limit?: number;
17
+ action?: FeedbackAction;
18
+ }
19
+ /**
20
+ * Export format
21
+ */
22
+ export interface FeedbackExport {
23
+ version: string;
24
+ feedbacks: Feedback[];
25
+ exportedAt: string;
26
+ }
27
+ /**
28
+ * FeedbackStorage
29
+ *
30
+ * Manages feedback persistence
31
+ */
32
+ export declare class FeedbackStorage {
33
+ private feedbacks;
34
+ private readonly version;
35
+ /**
36
+ * Save feedback
37
+ *
38
+ * @param feedback - Feedback to save
39
+ * @returns Saved feedback
40
+ */
41
+ save(feedback: Feedback): Result<Feedback, Error>;
42
+ /**
43
+ * Load feedback by ID
44
+ *
45
+ * @param id - Feedback ID
46
+ * @returns Feedback or null
47
+ */
48
+ load(id: string): Result<Feedback | null, Error>;
49
+ /**
50
+ * Delete feedback
51
+ *
52
+ * @param id - Feedback ID
53
+ * @returns Whether deleted
54
+ */
55
+ delete(id: string): Result<boolean, Error>;
56
+ /**
57
+ * List feedback with options
58
+ *
59
+ * @param options - List options
60
+ * @returns Feedback list
61
+ */
62
+ list(options?: ListOptions): Result<Feedback[], Error>;
63
+ /**
64
+ * Export to JSON
65
+ *
66
+ * @returns JSON string
67
+ */
68
+ exportToJSON(): Result<string, Error>;
69
+ /**
70
+ * Import from JSON
71
+ *
72
+ * @param json - JSON string
73
+ * @returns Number of imported feedbacks
74
+ */
75
+ importFromJSON(json: string): Result<number, Error>;
76
+ /**
77
+ * Get total count
78
+ *
79
+ * @returns Count
80
+ */
81
+ count(): Result<number, Error>;
82
+ /**
83
+ * Clear all feedback
84
+ */
85
+ clear(): void;
86
+ }
87
+ //# sourceMappingURL=feedback-storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedback-storage.d.ts","sourceRoot":"","sources":["../../src/storage/feedback-storage.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,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAAoC;IACrD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAW;IAEnC;;;;;OAKG;IACH,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC;IASjD;;;;;OAKG;IACH,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC,QAAQ,GAAG,IAAI,EAAE,KAAK,CAAC;IAQhD;;;;;OAKG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC;IAQ1C;;;;;OAKG;IACH,IAAI,CAAC,OAAO,GAAE,WAAgB,GAAG,MAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC;IAoB1D;;;;OAIG;IACH,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;IAarC;;;;;OAKG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;IAkBnD;;;;OAIG;IACH,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;IAQ9B;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd"}