@defai.digital/feedback-domain 13.4.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.
package/LICENSE ADDED
@@ -0,0 +1,38 @@
1
+ Business Source License 1.1
2
+
3
+ Parameters
4
+
5
+ Licensor: DEFAI Private Limited
6
+ Licensed Work: AutomatosX
7
+ The Licensed Work is (c) 2024-2025 DEFAI Private Limited
8
+ Additional Use Grant: You may make production use of the Licensed Work,
9
+ provided that your organization has less than US$2,000,000 in annual gross
10
+ revenue in the prior fiscal year. "Production use" means use in a live
11
+ production environment to support business or operational activities for end
12
+ users.
13
+ Change Date: Four years after the release date of the Licensed Work version
14
+ Change License: Apache License, Version 2.0
15
+
16
+ Terms
17
+
18
+ The Licensor hereby grants you the right to copy, modify, create derivative
19
+ works, redistribute, and make non-production use of the Licensed Work. The
20
+ Licensor may make an Additional Use Grant, above, permitting other uses of the
21
+ Licensed Work. The rights granted to you under this license are subject to the
22
+ following condition.
23
+
24
+ If you make any use of the Licensed Work, you must ensure that the Licensed
25
+ Work, or any modified version of it, carries prominent notices stating that
26
+ you have modified the Licensed Work.
27
+
28
+ This license does not grant permission to use the Licensor's trademarks.
29
+
30
+ The Licensed Work is provided "as is", without warranty of any kind, express
31
+ or implied, including but not limited to the warranties of merchantability,
32
+ fitness for a particular purpose and noninfringement. In no event shall the
33
+ Licensor be liable for any claim, damages or other liability, whether in an
34
+ action of contract, tort or otherwise, arising from, out of or in connection
35
+ with the Licensed Work or the use or other dealings in the Licensed Work.
36
+
37
+ On the Change Date, the Licensed Work will be made available under the Change
38
+ License.
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Feedback Collector
3
+ *
4
+ * Collect and store feedback records.
5
+ *
6
+ * Invariants:
7
+ * - INV-FBK-001: Feedback records immutable
8
+ * - INV-FBK-100: No duplicate feedback
9
+ */
10
+ import type { FeedbackCollector, FeedbackCollectorOptions, FeedbackStoragePort } from './types.js';
11
+ /**
12
+ * Create in-memory feedback storage
13
+ */
14
+ export declare function createInMemoryFeedbackStorage(): FeedbackStoragePort;
15
+ /**
16
+ * Create feedback collector
17
+ */
18
+ export declare function createFeedbackCollector(options: FeedbackCollectorOptions): FeedbackCollector;
19
+ //# sourceMappingURL=feedback-collector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedback-collector.d.ts","sourceRoot":"","sources":["../src/feedback-collector.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAYH,OAAO,KAAK,EACV,iBAAiB,EACjB,wBAAwB,EACxB,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,wBAAgB,6BAA6B,IAAI,mBAAmB,CAqEnE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,wBAAwB,GAChC,iBAAiB,CA+MnB"}
@@ -0,0 +1,239 @@
1
+ /**
2
+ * Feedback Collector
3
+ *
4
+ * Collect and store feedback records.
5
+ *
6
+ * Invariants:
7
+ * - INV-FBK-001: Feedback records immutable
8
+ * - INV-FBK-100: No duplicate feedback
9
+ */
10
+ import { createDefaultFeedbackLearningConfig, createTaskHash, } from '@defai.digital/contracts';
11
+ /**
12
+ * Create in-memory feedback storage
13
+ */
14
+ export function createInMemoryFeedbackStorage() {
15
+ const records = new Map();
16
+ return {
17
+ async store(record) {
18
+ // INV-FBK-001: Records are immutable - just store, never update
19
+ records.set(record.feedbackId, record);
20
+ },
21
+ async get(feedbackId) {
22
+ return records.get(feedbackId) ?? null;
23
+ },
24
+ async list(options) {
25
+ let results = Array.from(records.values());
26
+ // Filter by agent
27
+ if (options?.agentId) {
28
+ results = results.filter((r) => r.selectedAgent === options.agentId);
29
+ }
30
+ // Filter by date
31
+ if (options?.since) {
32
+ const sinceDate = new Date(options.since);
33
+ results = results.filter((r) => new Date(r.timestamp) >= sinceDate);
34
+ }
35
+ // Sort by timestamp (newest first)
36
+ results.sort((a, b) => new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime());
37
+ // Apply pagination
38
+ const offset = options?.offset ?? 0;
39
+ const limit = options?.limit ?? 100;
40
+ return results.slice(offset, offset + limit);
41
+ },
42
+ async count(options) {
43
+ let count = 0;
44
+ for (const record of records.values()) {
45
+ if (options?.agentId && record.selectedAgent !== options.agentId) {
46
+ continue;
47
+ }
48
+ if (options?.since && new Date(record.timestamp) < new Date(options.since)) {
49
+ continue;
50
+ }
51
+ count++;
52
+ }
53
+ return count;
54
+ },
55
+ async deleteOlderThan(date) {
56
+ const threshold = new Date(date);
57
+ let deleted = 0;
58
+ for (const [id, record] of records) {
59
+ if (new Date(record.timestamp) < threshold) {
60
+ records.delete(id);
61
+ deleted++;
62
+ }
63
+ }
64
+ return deleted;
65
+ },
66
+ };
67
+ }
68
+ /**
69
+ * Create feedback collector
70
+ */
71
+ export function createFeedbackCollector(options) {
72
+ const { storage } = options;
73
+ // Config is available for future use - call it to get defaults
74
+ void (options.config ?? createDefaultFeedbackLearningConfig());
75
+ // Track recent submissions for deduplication
76
+ // INV-FBK-100: No duplicate feedback
77
+ const recentSubmissions = new Map();
78
+ const DEDUP_WINDOW_MS = 60000; // 1 minute
79
+ return {
80
+ async submit(input) {
81
+ // INV-FBK-100: Check for duplicates
82
+ const dedupKey = `${input.selectedAgent}:${createTaskHash(input.taskDescription)}`;
83
+ const lastSubmit = recentSubmissions.get(dedupKey);
84
+ const now = Date.now();
85
+ if (lastSubmit && now - lastSubmit < DEDUP_WINDOW_MS) {
86
+ throw new Error('Duplicate feedback submission detected');
87
+ }
88
+ // Create feedback record
89
+ const record = {
90
+ feedbackId: crypto.randomUUID(),
91
+ taskDescription: input.taskDescription,
92
+ taskHash: createTaskHash(input.taskDescription),
93
+ selectedAgent: input.selectedAgent,
94
+ feedbackType: input.feedbackType,
95
+ timestamp: new Date().toISOString(),
96
+ retryCount: 0,
97
+ };
98
+ // Add optional fields only if defined
99
+ if (input.recommendedAgent !== undefined) {
100
+ record.recommendedAgent = input.recommendedAgent;
101
+ }
102
+ if (input.rating !== undefined) {
103
+ record.rating = input.rating;
104
+ }
105
+ if (input.outcome !== undefined) {
106
+ record.outcome = input.outcome;
107
+ }
108
+ if (input.durationMs !== undefined) {
109
+ record.durationMs = input.durationMs;
110
+ }
111
+ if (input.userComment !== undefined) {
112
+ record.userComment = input.userComment;
113
+ }
114
+ if (input.sessionId !== undefined) {
115
+ record.sessionId = input.sessionId;
116
+ }
117
+ // Store the record
118
+ // INV-FBK-001: Immutable after this point
119
+ await storage.store(record);
120
+ // Track for deduplication
121
+ recentSubmissions.set(dedupKey, now);
122
+ // Cleanup old dedup entries - collect keys first to avoid concurrent modification
123
+ const keysToDelete = [];
124
+ for (const [key, time] of recentSubmissions) {
125
+ if (now - time > DEDUP_WINDOW_MS) {
126
+ keysToDelete.push(key);
127
+ }
128
+ }
129
+ for (const key of keysToDelete) {
130
+ recentSubmissions.delete(key);
131
+ }
132
+ return record;
133
+ },
134
+ async getHistory(options) {
135
+ return storage.list(options);
136
+ },
137
+ async getAgentStats(agentId) {
138
+ const records = await storage.list({ agentId });
139
+ const totalFeedback = records.length;
140
+ const ratings = records.filter((r) => r.rating !== undefined).map((r) => r.rating);
141
+ const avgRating = ratings.length > 0 ? ratings.reduce((a, b) => a + b, 0) / ratings.length : undefined;
142
+ const outcomes = records.filter((r) => r.outcome !== undefined);
143
+ const successCount = outcomes.filter((r) => r.outcome === 'success').length;
144
+ const successRate = outcomes.length > 0 ? successCount / outcomes.length : 1;
145
+ const recommended = records.filter((r) => r.recommendedAgent !== undefined);
146
+ const acceptedCount = recommended.filter((r) => r.recommendedAgent === r.selectedAgent).length;
147
+ const recommendationAcceptRate = recommended.length > 0 ? acceptedCount / recommended.length : 1;
148
+ const durations = records
149
+ .filter((r) => r.durationMs !== undefined)
150
+ .map((r) => r.durationMs);
151
+ const avgDurationMs = durations.length > 0
152
+ ? durations.reduce((a, b) => a + b, 0) / durations.length
153
+ : undefined;
154
+ // Extract top patterns
155
+ const patternCounts = new Map();
156
+ for (const record of records) {
157
+ const count = patternCounts.get(record.taskHash) ?? 0;
158
+ patternCounts.set(record.taskHash, count + 1);
159
+ }
160
+ const topPatterns = Array.from(patternCounts.entries())
161
+ .sort((a, b) => b[1] - a[1])
162
+ .slice(0, 10)
163
+ .map(([pattern]) => pattern);
164
+ const lastFeedback = records.length > 0
165
+ ? records.reduce((latest, r) => new Date(r.timestamp) > new Date(latest.timestamp) ? r : latest).timestamp
166
+ : undefined;
167
+ return {
168
+ agentId,
169
+ totalFeedback,
170
+ avgRating,
171
+ successRate,
172
+ recommendationAcceptRate,
173
+ avgDurationMs,
174
+ topPatterns,
175
+ lastFeedback,
176
+ };
177
+ },
178
+ async getOverview() {
179
+ const allRecords = await storage.list({ limit: 10000 });
180
+ const totalFeedback = allRecords.length;
181
+ // Count by type
182
+ const feedbackByType = {
183
+ explicit: 0,
184
+ implicit: 0,
185
+ outcome: 0,
186
+ };
187
+ for (const record of allRecords) {
188
+ feedbackByType[record.feedbackType] =
189
+ (feedbackByType[record.feedbackType] ?? 0) + 1;
190
+ }
191
+ // Average rating
192
+ const ratings = allRecords
193
+ .filter((r) => r.rating !== undefined)
194
+ .map((r) => r.rating);
195
+ const avgRating = ratings.length > 0 ? ratings.reduce((a, b) => a + b, 0) / ratings.length : undefined;
196
+ // Success rate
197
+ const outcomes = allRecords.filter((r) => r.outcome !== undefined);
198
+ const successCount = outcomes.filter((r) => r.outcome === 'success').length;
199
+ const overallSuccessRate = outcomes.length > 0 ? successCount / outcomes.length : 1;
200
+ // Top agents
201
+ const agentScores = new Map();
202
+ for (const record of allRecords) {
203
+ const score = agentScores.get(record.selectedAgent) ?? 0;
204
+ const delta = record.rating ?? (record.outcome === 'success' ? 5 : 1);
205
+ agentScores.set(record.selectedAgent, score + delta);
206
+ }
207
+ const topAgents = Array.from(agentScores.entries())
208
+ .sort((a, b) => b[1] - a[1])
209
+ .slice(0, 10)
210
+ .map(([agentId, score]) => ({ agentId, score }));
211
+ // Calculate trend (simplified)
212
+ const recentRecords = allRecords.slice(0, 20);
213
+ const olderRecords = allRecords.slice(20, 40);
214
+ const recentSuccessRate = recentRecords.length > 0
215
+ ? recentRecords.filter((r) => r.outcome === 'success').length / recentRecords.length
216
+ : 1;
217
+ const olderSuccessRate = olderRecords.length > 0
218
+ ? olderRecords.filter((r) => r.outcome === 'success').length / olderRecords.length
219
+ : 1;
220
+ let recentTrend = 'stable';
221
+ if (recentSuccessRate > olderSuccessRate + 0.1) {
222
+ recentTrend = 'improving';
223
+ }
224
+ else if (recentSuccessRate < olderSuccessRate - 0.1) {
225
+ recentTrend = 'declining';
226
+ }
227
+ return {
228
+ totalFeedback,
229
+ feedbackByType: feedbackByType,
230
+ avgRating,
231
+ overallSuccessRate,
232
+ topAgents,
233
+ recentTrend,
234
+ lastUpdated: new Date().toISOString(),
235
+ };
236
+ },
237
+ };
238
+ }
239
+ //# sourceMappingURL=feedback-collector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedback-collector.js","sourceRoot":"","sources":["../src/feedback-collector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Feedback Learning Domain
3
+ *
4
+ * Agent feedback collection and learning system.
5
+ */
6
+ export type { FeedbackStoragePort, ScoreAdjustmentStoragePort, PatternMatcherPort, FeedbackCollectorOptions, ScoreAdjusterOptions, FeedbackCollector, ScoreAdjuster, } from './types.js';
7
+ export { createFeedbackCollector, createInMemoryFeedbackStorage, } from './feedback-collector.js';
8
+ export { createScoreAdjuster, createInMemoryAdjustmentStorage, createSimplePatternMatcher, } from './score-adjuster.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EACV,mBAAmB,EACnB,0BAA0B,EAC1B,kBAAkB,EAClB,wBAAwB,EACxB,oBAAoB,EACpB,iBAAiB,EACjB,aAAa,GACd,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,uBAAuB,EACvB,6BAA6B,GAC9B,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EACL,mBAAmB,EACnB,+BAA+B,EAC/B,0BAA0B,GAC3B,MAAM,qBAAqB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Feedback Learning Domain
3
+ *
4
+ * Agent feedback collection and learning system.
5
+ */
6
+ // Feedback Collector
7
+ export { createFeedbackCollector, createInMemoryFeedbackStorage, } from './feedback-collector.js';
8
+ // Score Adjuster
9
+ export { createScoreAdjuster, createInMemoryAdjustmentStorage, createSimplePatternMatcher, } from './score-adjuster.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAaH,qBAAqB;AACrB,OAAO,EACL,uBAAuB,EACvB,6BAA6B,GAC9B,MAAM,yBAAyB,CAAC;AAEjC,iBAAiB;AACjB,OAAO,EACL,mBAAmB,EACnB,+BAA+B,EAC/B,0BAA0B,GAC3B,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Score Adjuster
3
+ *
4
+ * Calculate and apply score adjustments based on feedback.
5
+ *
6
+ * Invariants:
7
+ * - INV-FBK-002: Adjustments bounded (-0.5 to +0.5)
8
+ * - INV-FBK-003: Minimum sample count before adjustment
9
+ * - INV-FBK-004: Adjustments decay over time
10
+ */
11
+ import type { ScoreAdjuster, ScoreAdjusterOptions, ScoreAdjustmentStoragePort, PatternMatcherPort } from './types.js';
12
+ /**
13
+ * Create in-memory score adjustment storage
14
+ */
15
+ export declare function createInMemoryAdjustmentStorage(): ScoreAdjustmentStoragePort;
16
+ /**
17
+ * Create simple pattern matcher
18
+ */
19
+ export declare function createSimplePatternMatcher(): PatternMatcherPort;
20
+ /**
21
+ * Create score adjuster
22
+ */
23
+ export declare function createScoreAdjuster(options: ScoreAdjusterOptions): ScoreAdjuster;
24
+ //# sourceMappingURL=score-adjuster.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"score-adjuster.d.ts","sourceRoot":"","sources":["../src/score-adjuster.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAaH,OAAO,KAAK,EACV,aAAa,EACb,oBAAoB,EACpB,0BAA0B,EAC1B,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,wBAAgB,+BAA+B,IAAI,0BAA0B,CAyC5E;AAED;;GAEG;AACH,wBAAgB,0BAA0B,IAAI,kBAAkB,CAiC/D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CA8JhF"}
@@ -0,0 +1,216 @@
1
+ /**
2
+ * Score Adjuster
3
+ *
4
+ * Calculate and apply score adjustments based on feedback.
5
+ *
6
+ * Invariants:
7
+ * - INV-FBK-002: Adjustments bounded (-0.5 to +0.5)
8
+ * - INV-FBK-003: Minimum sample count before adjustment
9
+ * - INV-FBK-004: Adjustments decay over time
10
+ */
11
+ import { createDefaultFeedbackLearningConfig, calculateDecayedAdjustment, shouldApplyAdjustment, createTaskHash, MAX_ADJUSTMENT, } from '@defai.digital/contracts';
12
+ /**
13
+ * Create in-memory score adjustment storage
14
+ */
15
+ export function createInMemoryAdjustmentStorage() {
16
+ const adjustments = new Map();
17
+ function makeKey(agentId, taskPattern) {
18
+ return `${agentId}:${taskPattern}`;
19
+ }
20
+ return {
21
+ async get(agentId, taskPattern) {
22
+ return adjustments.get(makeKey(agentId, taskPattern)) ?? null;
23
+ },
24
+ async set(adjustment) {
25
+ adjustments.set(makeKey(adjustment.agentId, adjustment.taskPattern), adjustment);
26
+ },
27
+ async listForAgent(agentId) {
28
+ const results = [];
29
+ for (const adjustment of adjustments.values()) {
30
+ if (adjustment.agentId === agentId) {
31
+ results.push(adjustment);
32
+ }
33
+ }
34
+ return results;
35
+ },
36
+ async deleteExpired() {
37
+ const now = new Date();
38
+ let deleted = 0;
39
+ for (const [key, adjustment] of adjustments) {
40
+ if (adjustment.expiresAt && new Date(adjustment.expiresAt) < now) {
41
+ adjustments.delete(key);
42
+ deleted++;
43
+ }
44
+ }
45
+ return deleted;
46
+ },
47
+ };
48
+ }
49
+ /**
50
+ * Create simple pattern matcher
51
+ */
52
+ export function createSimplePatternMatcher() {
53
+ const patterns = new Map();
54
+ return {
55
+ async findMatches(taskDescription, _threshold) {
56
+ const taskHash = createTaskHash(taskDescription);
57
+ const results = [];
58
+ // Simple exact match on hash
59
+ const exactMatch = patterns.get(taskHash);
60
+ if (exactMatch) {
61
+ results.push(exactMatch);
62
+ }
63
+ // Could add fuzzy matching here in the future
64
+ return results;
65
+ },
66
+ async upsertPattern(pattern) {
67
+ patterns.set(pattern.patternId, pattern);
68
+ },
69
+ async getPattern(patternId) {
70
+ return patterns.get(patternId) ?? null;
71
+ },
72
+ };
73
+ }
74
+ /**
75
+ * Create score adjuster
76
+ */
77
+ export function createScoreAdjuster(options) {
78
+ const { adjustmentStorage, patternMatcher } = options;
79
+ const config = options.config ?? createDefaultFeedbackLearningConfig();
80
+ return {
81
+ async getAdjustment(agentId, taskDescription) {
82
+ if (!config.enabled) {
83
+ return 0;
84
+ }
85
+ const taskHash = createTaskHash(taskDescription);
86
+ const adjustment = await adjustmentStorage.get(agentId, taskHash);
87
+ if (!adjustment) {
88
+ // INV-FBK-202: Cold start - return neutral
89
+ return 0;
90
+ }
91
+ // INV-FBK-003: Check minimum sample count
92
+ if (!shouldApplyAdjustment(adjustment, config)) {
93
+ return 0;
94
+ }
95
+ // INV-FBK-004: Apply decay
96
+ return calculateDecayedAdjustment(adjustment, config);
97
+ },
98
+ async processNewFeedback(record) {
99
+ if (!config.enabled) {
100
+ return;
101
+ }
102
+ const { selectedAgent, taskHash, rating, outcome } = record;
103
+ // Calculate score delta based on feedback
104
+ let delta = 0;
105
+ if (rating !== undefined) {
106
+ // Map 1-5 rating to -0.5 to +0.5
107
+ delta = (rating - 3) / 4; // -0.5 to +0.5
108
+ }
109
+ else if (outcome !== undefined) {
110
+ switch (outcome) {
111
+ case 'success':
112
+ delta = 0.3;
113
+ break;
114
+ case 'partial':
115
+ delta = 0.1;
116
+ break;
117
+ case 'failure':
118
+ delta = -0.3;
119
+ break;
120
+ case 'cancelled':
121
+ delta = 0;
122
+ break;
123
+ }
124
+ }
125
+ // Get or create adjustment
126
+ let adjustment = await adjustmentStorage.get(selectedAgent, taskHash);
127
+ if (adjustment) {
128
+ // Update existing adjustment
129
+ // INV-FBK-201: Average conflicting feedback
130
+ const totalWeight = adjustment.sampleCount + 1;
131
+ const newValue = (adjustment.scoreAdjustment * adjustment.sampleCount + delta) / totalWeight;
132
+ // INV-FBK-002: Bound adjustment
133
+ const boundedValue = Math.max(-MAX_ADJUSTMENT, Math.min(MAX_ADJUSTMENT, newValue));
134
+ adjustment = {
135
+ ...adjustment,
136
+ scoreAdjustment: boundedValue,
137
+ sampleCount: totalWeight,
138
+ confidence: Math.min(1, totalWeight / 10), // Confidence increases with samples
139
+ lastUpdated: new Date().toISOString(),
140
+ };
141
+ }
142
+ else {
143
+ // Create new adjustment
144
+ // INV-FBK-002: Bound initial adjustment
145
+ const boundedDelta = Math.max(-MAX_ADJUSTMENT, Math.min(MAX_ADJUSTMENT, delta));
146
+ adjustment = {
147
+ agentId: selectedAgent,
148
+ taskPattern: taskHash,
149
+ scoreAdjustment: boundedDelta,
150
+ sampleCount: 1,
151
+ confidence: 0.1,
152
+ lastUpdated: new Date().toISOString(),
153
+ };
154
+ }
155
+ await adjustmentStorage.set(adjustment);
156
+ // Update pattern stats
157
+ const pattern = await patternMatcher.getPattern(taskHash);
158
+ if (pattern) {
159
+ const agentScores = { ...pattern.agentScores };
160
+ agentScores[selectedAgent] = (agentScores[selectedAgent] ?? 0) + delta;
161
+ // Calculate new avgRating using ratingCount (not feedbackCount)
162
+ const currentRatingCount = pattern.ratingCount ?? 0;
163
+ const newRatingCount = rating !== undefined ? currentRatingCount + 1 : currentRatingCount;
164
+ const newAvgRating = rating !== undefined
165
+ ? ((pattern.avgRating ?? rating) * currentRatingCount + rating) / newRatingCount
166
+ : pattern.avgRating;
167
+ // Calculate successRate using outcomeCount (only success/failure count)
168
+ const currentOutcomeCount = pattern.outcomeCount ?? 0;
169
+ const isSuccessOrFailure = outcome === 'success' || outcome === 'failure';
170
+ const newOutcomeCount = isSuccessOrFailure ? currentOutcomeCount + 1 : currentOutcomeCount;
171
+ const newSuccessRate = outcome === 'success'
172
+ ? (pattern.successRate * currentOutcomeCount + 1) / newOutcomeCount
173
+ : outcome === 'failure'
174
+ ? (pattern.successRate * currentOutcomeCount) / newOutcomeCount
175
+ : pattern.successRate; // Keep unchanged for partial/cancelled/undefined
176
+ await patternMatcher.upsertPattern({
177
+ ...pattern,
178
+ agentScores,
179
+ feedbackCount: pattern.feedbackCount + 1,
180
+ ratingCount: newRatingCount,
181
+ outcomeCount: newOutcomeCount,
182
+ successRate: newSuccessRate,
183
+ avgRating: newAvgRating,
184
+ updatedAt: new Date().toISOString(),
185
+ });
186
+ }
187
+ else {
188
+ // Create new pattern
189
+ // Only count success/failure toward outcomeCount
190
+ const isSuccessOrFailure = outcome === 'success' || outcome === 'failure';
191
+ await patternMatcher.upsertPattern({
192
+ patternId: taskHash,
193
+ pattern: taskHash,
194
+ agentScores: { [selectedAgent]: delta },
195
+ feedbackCount: 1,
196
+ ratingCount: rating !== undefined ? 1 : 0,
197
+ outcomeCount: isSuccessOrFailure ? 1 : 0,
198
+ // successRate only meaningful when outcomeCount > 0
199
+ successRate: outcome === 'success' ? 1 : outcome === 'failure' ? 0 : 0.5,
200
+ avgRating: rating,
201
+ createdAt: new Date().toISOString(),
202
+ updatedAt: new Date().toISOString(),
203
+ });
204
+ }
205
+ },
206
+ async getAgentAdjustments(agentId) {
207
+ return adjustmentStorage.listForAgent(agentId);
208
+ },
209
+ async applyDecay() {
210
+ // This would be called periodically to decay all adjustments
211
+ // For now, decay is applied on read via calculateDecayedAdjustment
212
+ await adjustmentStorage.deleteExpired();
213
+ },
214
+ };
215
+ }
216
+ //# sourceMappingURL=score-adjuster.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"score-adjuster.js","sourceRoot":"","sources":["../src/score-adjuster.ts"],"names":[],"mappings":"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"}