cmp-standards 2.8.0 → 2.8.1
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/dist/experts/ExpertVotePersistence.d.ts +86 -0
- package/dist/experts/ExpertVotePersistence.d.ts.map +1 -0
- package/dist/experts/ExpertVotePersistence.js +234 -0
- package/dist/experts/ExpertVotePersistence.js.map +1 -0
- package/dist/experts/index.d.ts +1 -0
- package/dist/experts/index.d.ts.map +1 -1
- package/dist/experts/index.js +2 -0
- package/dist/experts/index.js.map +1 -1
- package/dist/hooks/cloud-post-tool-use.d.ts +5 -0
- package/dist/hooks/cloud-post-tool-use.d.ts.map +1 -1
- package/dist/hooks/cloud-post-tool-use.js +43 -10
- package/dist/hooks/cloud-post-tool-use.js.map +1 -1
- package/dist/hooks/cloud-session-start.d.ts.map +1 -1
- package/dist/hooks/cloud-session-start.js +64 -0
- package/dist/hooks/cloud-session-start.js.map +1 -1
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +2 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/session-end.d.ts +67 -0
- package/dist/hooks/session-end.d.ts.map +1 -0
- package/dist/hooks/session-end.js +268 -0
- package/dist/hooks/session-end.js.map +1 -0
- package/dist/mcp/schemas.d.ts +2 -2
- package/dist/performance/Debouncer.d.ts +57 -0
- package/dist/performance/Debouncer.d.ts.map +1 -1
- package/dist/performance/Debouncer.js +149 -0
- package/dist/performance/Debouncer.js.map +1 -1
- package/dist/performance/index.d.ts +1 -1
- package/dist/performance/index.d.ts.map +1 -1
- package/dist/performance/index.js +3 -1
- package/dist/performance/index.js.map +1 -1
- package/dist/schema/expert-types.d.ts +2 -2
- package/dist/services/FeedbackCollector.d.ts +63 -0
- package/dist/services/FeedbackCollector.d.ts.map +1 -0
- package/dist/services/FeedbackCollector.js +219 -0
- package/dist/services/FeedbackCollector.js.map +1 -0
- package/dist/services/index.d.ts +2 -1
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +3 -1
- package/dist/services/index.js.map +1 -1
- package/dist/services/pattern-tracker.d.ts +50 -0
- package/dist/services/pattern-tracker.d.ts.map +1 -1
- package/dist/services/pattern-tracker.js +148 -0
- package/dist/services/pattern-tracker.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Debouncer.js","sourceRoot":"","sources":["../../src/performance/Debouncer.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Debouncer.js","sourceRoot":"","sources":["../../src/performance/Debouncer.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
* @file Performance Module - cmp-standards v2.8
|
|
3
3
|
* @description Performance optimization utilities
|
|
4
4
|
*/
|
|
5
|
-
export { Debouncer, DebouncerConfig, DebouncerStats, EmbeddingDebouncer, HookDebouncer, getDebouncer, getEmbeddingDebouncer, getHookDebouncer, resetDebouncers, } from './Debouncer.js';
|
|
5
|
+
export { Debouncer, DebouncerConfig, DebouncerStats, EmbeddingDebouncer, HookDebouncer, SmartDebouncer, getDebouncer, getEmbeddingDebouncer, getHookDebouncer, getSmartDebouncer, resetDebouncers, TOOL_DEBOUNCE_CONFIG, getToolDebounceMs, isWriteOperation, } from './Debouncer.js';
|
|
6
6
|
export { MemoryDecay, MemoryForScoring, ScoredMemory, DecayConfig, getMemoryDecay, resetMemoryDecay, } from './MemoryDecay.js';
|
|
7
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/performance/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACL,SAAS,EACT,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,aAAa,EACb,YAAY,EACZ,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/performance/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACL,SAAS,EACT,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,YAAY,EACZ,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EAEf,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,gBAAgB,CAAA;AAGvB,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,cAAc,EACd,gBAAgB,GACjB,MAAM,kBAAkB,CAAA"}
|
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
* @description Performance optimization utilities
|
|
4
4
|
*/
|
|
5
5
|
// Debouncing
|
|
6
|
-
export { Debouncer, EmbeddingDebouncer, HookDebouncer, getDebouncer, getEmbeddingDebouncer, getHookDebouncer, resetDebouncers,
|
|
6
|
+
export { Debouncer, EmbeddingDebouncer, HookDebouncer, SmartDebouncer, getDebouncer, getEmbeddingDebouncer, getHookDebouncer, getSmartDebouncer, resetDebouncers,
|
|
7
|
+
// Smart debouncing utilities
|
|
8
|
+
TOOL_DEBOUNCE_CONFIG, getToolDebounceMs, isWriteOperation, } from './Debouncer.js';
|
|
7
9
|
// Memory Decay
|
|
8
10
|
export { MemoryDecay, getMemoryDecay, resetMemoryDecay, } from './MemoryDecay.js';
|
|
9
11
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/performance/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,aAAa;AACb,OAAO,EACL,SAAS,EAGT,kBAAkB,EAClB,aAAa,EACb,YAAY,EACZ,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/performance/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,aAAa;AACb,OAAO,EACL,SAAS,EAGT,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,YAAY,EACZ,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EACjB,eAAe;AACf,6BAA6B;AAC7B,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,gBAAgB,CAAA;AAEvB,eAAe;AACf,OAAO,EACL,WAAW,EAIX,cAAc,EACd,gBAAgB,GACjB,MAAM,kBAAkB,CAAA"}
|
|
@@ -246,7 +246,7 @@ export declare const PatternStatContentSchema: z.ZodObject<{
|
|
|
246
246
|
autoImproveTriggered: boolean;
|
|
247
247
|
occurrenceCount: number;
|
|
248
248
|
avgSeverity: number;
|
|
249
|
-
trend: "increasing" | "
|
|
249
|
+
trend: "increasing" | "stable" | "decreasing";
|
|
250
250
|
isPersistent: boolean;
|
|
251
251
|
description?: string | undefined;
|
|
252
252
|
firstSeen?: string | undefined;
|
|
@@ -263,7 +263,7 @@ export declare const PatternStatContentSchema: z.ZodObject<{
|
|
|
263
263
|
autoImproveTriggered?: boolean | undefined;
|
|
264
264
|
occurrenceCount?: number | undefined;
|
|
265
265
|
avgSeverity?: number | undefined;
|
|
266
|
-
trend?: "increasing" | "
|
|
266
|
+
trend?: "increasing" | "stable" | "decreasing" | undefined;
|
|
267
267
|
isPersistent?: boolean | undefined;
|
|
268
268
|
eslintRuleId?: string | undefined;
|
|
269
269
|
effectivenessScore?: number | undefined;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file FeedbackCollector Service
|
|
3
|
+
* @description Tracks memory usage feedback to enable learning loop
|
|
4
|
+
*
|
|
5
|
+
* Features:
|
|
6
|
+
* - Track when memories are used, dismissed, or rated
|
|
7
|
+
* - Update memory decay scores based on feedback
|
|
8
|
+
* - Enable relevance learning over time
|
|
9
|
+
*
|
|
10
|
+
* @version 1.0.0
|
|
11
|
+
*/
|
|
12
|
+
import type { DevSystem } from '../types/index.js';
|
|
13
|
+
export type FeedbackAction = 'used' | 'dismissed' | 'helpful' | 'wrong' | 'outdated';
|
|
14
|
+
export interface MemoryFeedback {
|
|
15
|
+
memoryId: string;
|
|
16
|
+
action: FeedbackAction;
|
|
17
|
+
toolContext?: string;
|
|
18
|
+
sessionId?: string;
|
|
19
|
+
timestamp?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface FeedbackStats {
|
|
22
|
+
totalFeedback: number;
|
|
23
|
+
usedCount: number;
|
|
24
|
+
dismissedCount: number;
|
|
25
|
+
helpfulCount: number;
|
|
26
|
+
wrongCount: number;
|
|
27
|
+
avgScore: number;
|
|
28
|
+
}
|
|
29
|
+
export interface MemoryWithScore {
|
|
30
|
+
id: string;
|
|
31
|
+
feedbackScore: number;
|
|
32
|
+
accessCount: number;
|
|
33
|
+
lastAccessedAt: string;
|
|
34
|
+
}
|
|
35
|
+
declare class FeedbackCollectorService {
|
|
36
|
+
/**
|
|
37
|
+
* Track feedback for a memory
|
|
38
|
+
*/
|
|
39
|
+
track(feedback: MemoryFeedback): Promise<void>;
|
|
40
|
+
/**
|
|
41
|
+
* Track multiple memories used in a single tool call
|
|
42
|
+
*/
|
|
43
|
+
trackBatch(memoryIds: string[], action: FeedbackAction, toolContext?: string, sessionId?: string): Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* Get feedback statistics for a memory
|
|
46
|
+
*/
|
|
47
|
+
getStats(memoryId: string): Promise<FeedbackStats | null>;
|
|
48
|
+
/**
|
|
49
|
+
* Get memories sorted by feedback score (for relevance-based retrieval)
|
|
50
|
+
*/
|
|
51
|
+
getTopScoredMemories(system: DevSystem, limit?: number): Promise<MemoryWithScore[]>;
|
|
52
|
+
/**
|
|
53
|
+
* Get memories with low scores that might need review or archival
|
|
54
|
+
*/
|
|
55
|
+
getLowScoredMemories(system: DevSystem, threshold?: number, limit?: number): Promise<MemoryWithScore[]>;
|
|
56
|
+
/**
|
|
57
|
+
* Archive memories with very low scores (cleanup)
|
|
58
|
+
*/
|
|
59
|
+
archiveLowScoredMemories(system: DevSystem, threshold?: number, minAge?: number): Promise<number>;
|
|
60
|
+
}
|
|
61
|
+
export declare const feedbackCollector: FeedbackCollectorService;
|
|
62
|
+
export default feedbackCollector;
|
|
63
|
+
//# sourceMappingURL=FeedbackCollector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FeedbackCollector.d.ts","sourceRoot":"","sources":["../../src/services/FeedbackCollector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAMlD,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,WAAW,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,CAAA;AAEpF,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,cAAc,CAAA;IACtB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,MAAM,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,EAAE,MAAM,CAAA;CACvB;AAsBD,cAAM,wBAAwB;IAC5B;;OAEG;IACG,KAAK,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAkEpD;;OAEG;IACG,UAAU,CACd,SAAS,EAAE,MAAM,EAAE,EACnB,MAAM,EAAE,cAAc,EACtB,WAAW,CAAC,EAAE,MAAM,EACpB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC;IAUhB;;OAEG;IACG,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAgC/D;;OAEG;IACG,oBAAoB,CACxB,MAAM,EAAE,SAAS,EACjB,KAAK,SAAK,GACT,OAAO,CAAC,eAAe,EAAE,CAAC;IA8B7B;;OAEG;IACG,oBAAoB,CACxB,MAAM,EAAE,SAAS,EACjB,SAAS,SAAM,EACf,KAAK,SAAK,GACT,OAAO,CAAC,eAAe,EAAE,CAAC;IA8B7B;;OAEG;IACG,wBAAwB,CAC5B,MAAM,EAAE,SAAS,EACjB,SAAS,SAAM,EACf,MAAM,SAAK,GACV,OAAO,CAAC,MAAM,CAAC;CAsBnB;AAMD,eAAO,MAAM,iBAAiB,0BAAiC,CAAA;AAC/D,eAAe,iBAAiB,CAAA"}
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file FeedbackCollector Service
|
|
3
|
+
* @description Tracks memory usage feedback to enable learning loop
|
|
4
|
+
*
|
|
5
|
+
* Features:
|
|
6
|
+
* - Track when memories are used, dismissed, or rated
|
|
7
|
+
* - Update memory decay scores based on feedback
|
|
8
|
+
* - Enable relevance learning over time
|
|
9
|
+
*
|
|
10
|
+
* @version 1.0.0
|
|
11
|
+
*/
|
|
12
|
+
import { turso } from '../db/turso-client.js';
|
|
13
|
+
// =============================================================================
|
|
14
|
+
// Score Adjustments
|
|
15
|
+
// =============================================================================
|
|
16
|
+
const SCORE_ADJUSTMENTS = {
|
|
17
|
+
used: 0.02, // Small positive for each use
|
|
18
|
+
dismissed: -0.05, // Negative when dismissed
|
|
19
|
+
helpful: 0.15, // Strong positive for explicit helpful
|
|
20
|
+
wrong: -0.25, // Strong negative for wrong info
|
|
21
|
+
outdated: -0.15 // Moderate negative for outdated
|
|
22
|
+
};
|
|
23
|
+
const MIN_SCORE = 0.0;
|
|
24
|
+
const MAX_SCORE = 1.0;
|
|
25
|
+
const DEFAULT_SCORE = 0.5;
|
|
26
|
+
// =============================================================================
|
|
27
|
+
// FeedbackCollector Implementation
|
|
28
|
+
// =============================================================================
|
|
29
|
+
class FeedbackCollectorService {
|
|
30
|
+
/**
|
|
31
|
+
* Track feedback for a memory
|
|
32
|
+
*/
|
|
33
|
+
async track(feedback) {
|
|
34
|
+
const { memoryId, action, toolContext, sessionId } = feedback;
|
|
35
|
+
const timestamp = feedback.timestamp || new Date().toISOString();
|
|
36
|
+
try {
|
|
37
|
+
const db = turso.getClient();
|
|
38
|
+
// 1. Get current memory state
|
|
39
|
+
const result = await db.execute({
|
|
40
|
+
sql: `SELECT id, content FROM items WHERE id = ?`,
|
|
41
|
+
args: [memoryId]
|
|
42
|
+
});
|
|
43
|
+
if (result.rows.length === 0) {
|
|
44
|
+
console.warn(`[FeedbackCollector] Memory not found: ${memoryId}`);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
const row = result.rows[0];
|
|
48
|
+
const content = typeof row.content === 'string'
|
|
49
|
+
? JSON.parse(row.content)
|
|
50
|
+
: row.content;
|
|
51
|
+
// 2. Calculate new score
|
|
52
|
+
const currentScore = content.feedbackScore ?? DEFAULT_SCORE;
|
|
53
|
+
const currentAccessCount = content.accessCount ?? 0;
|
|
54
|
+
const adjustment = SCORE_ADJUSTMENTS[action];
|
|
55
|
+
const newScore = Math.max(MIN_SCORE, Math.min(MAX_SCORE, currentScore + adjustment));
|
|
56
|
+
const newAccessCount = currentAccessCount + 1;
|
|
57
|
+
// 3. Build feedback history entry
|
|
58
|
+
const feedbackEntry = {
|
|
59
|
+
action,
|
|
60
|
+
toolContext,
|
|
61
|
+
sessionId,
|
|
62
|
+
timestamp
|
|
63
|
+
};
|
|
64
|
+
// Keep last 20 feedback entries
|
|
65
|
+
const feedbackHistory = content.feedbackHistory || [];
|
|
66
|
+
feedbackHistory.push(feedbackEntry);
|
|
67
|
+
if (feedbackHistory.length > 20) {
|
|
68
|
+
feedbackHistory.shift();
|
|
69
|
+
}
|
|
70
|
+
// 4. Update memory with new score and feedback
|
|
71
|
+
const updatedContent = {
|
|
72
|
+
...content,
|
|
73
|
+
feedbackScore: newScore,
|
|
74
|
+
accessCount: newAccessCount,
|
|
75
|
+
lastAccessedAt: timestamp,
|
|
76
|
+
feedbackHistory
|
|
77
|
+
};
|
|
78
|
+
await db.execute({
|
|
79
|
+
sql: `UPDATE items SET content = ?, updated_at = datetime('now') WHERE id = ?`,
|
|
80
|
+
args: [JSON.stringify(updatedContent), memoryId]
|
|
81
|
+
});
|
|
82
|
+
console.log(`[FeedbackCollector] Tracked ${action} for ${memoryId}: ${currentScore.toFixed(2)} -> ${newScore.toFixed(2)}`);
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
console.error(`[FeedbackCollector] Failed to track feedback:`, error);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Track multiple memories used in a single tool call
|
|
90
|
+
*/
|
|
91
|
+
async trackBatch(memoryIds, action, toolContext, sessionId) {
|
|
92
|
+
const timestamp = new Date().toISOString();
|
|
93
|
+
await Promise.all(memoryIds.map(memoryId => this.track({ memoryId, action, toolContext, sessionId, timestamp })));
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Get feedback statistics for a memory
|
|
97
|
+
*/
|
|
98
|
+
async getStats(memoryId) {
|
|
99
|
+
try {
|
|
100
|
+
const db = turso.getClient();
|
|
101
|
+
const result = await db.execute({
|
|
102
|
+
sql: `SELECT content FROM items WHERE id = ?`,
|
|
103
|
+
args: [memoryId]
|
|
104
|
+
});
|
|
105
|
+
if (result.rows.length === 0)
|
|
106
|
+
return null;
|
|
107
|
+
const content = typeof result.rows[0].content === 'string'
|
|
108
|
+
? JSON.parse(result.rows[0].content)
|
|
109
|
+
: result.rows[0].content;
|
|
110
|
+
const history = content.feedbackHistory || [];
|
|
111
|
+
const stats = {
|
|
112
|
+
totalFeedback: history.length,
|
|
113
|
+
usedCount: history.filter((f) => f.action === 'used').length,
|
|
114
|
+
dismissedCount: history.filter((f) => f.action === 'dismissed').length,
|
|
115
|
+
helpfulCount: history.filter((f) => f.action === 'helpful').length,
|
|
116
|
+
wrongCount: history.filter((f) => f.action === 'wrong').length,
|
|
117
|
+
avgScore: content.feedbackScore ?? DEFAULT_SCORE
|
|
118
|
+
};
|
|
119
|
+
return stats;
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
console.error(`[FeedbackCollector] Failed to get stats:`, error);
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Get memories sorted by feedback score (for relevance-based retrieval)
|
|
128
|
+
*/
|
|
129
|
+
async getTopScoredMemories(system, limit = 20) {
|
|
130
|
+
try {
|
|
131
|
+
const db = turso.getClient();
|
|
132
|
+
const result = await db.execute({
|
|
133
|
+
sql: `SELECT id, content FROM items
|
|
134
|
+
WHERE system = ? AND type = 'memory' AND status = 'active'
|
|
135
|
+
ORDER BY COALESCE(json_extract(content, '$.feedbackScore'), 0.5) DESC,
|
|
136
|
+
COALESCE(json_extract(content, '$.accessCount'), 0) DESC
|
|
137
|
+
LIMIT ?`,
|
|
138
|
+
args: [system, limit]
|
|
139
|
+
});
|
|
140
|
+
return result.rows.map(row => {
|
|
141
|
+
const content = typeof row.content === 'string'
|
|
142
|
+
? JSON.parse(row.content)
|
|
143
|
+
: row.content;
|
|
144
|
+
return {
|
|
145
|
+
id: row.id,
|
|
146
|
+
feedbackScore: content.feedbackScore ?? DEFAULT_SCORE,
|
|
147
|
+
accessCount: content.accessCount ?? 0,
|
|
148
|
+
lastAccessedAt: content.lastAccessedAt ?? ''
|
|
149
|
+
};
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
console.error(`[FeedbackCollector] Failed to get top scored:`, error);
|
|
154
|
+
return [];
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Get memories with low scores that might need review or archival
|
|
159
|
+
*/
|
|
160
|
+
async getLowScoredMemories(system, threshold = 0.3, limit = 20) {
|
|
161
|
+
try {
|
|
162
|
+
const db = turso.getClient();
|
|
163
|
+
const result = await db.execute({
|
|
164
|
+
sql: `SELECT id, content FROM items
|
|
165
|
+
WHERE system = ? AND type = 'memory' AND status = 'active'
|
|
166
|
+
AND COALESCE(json_extract(content, '$.feedbackScore'), 0.5) < ?
|
|
167
|
+
ORDER BY json_extract(content, '$.feedbackScore') ASC
|
|
168
|
+
LIMIT ?`,
|
|
169
|
+
args: [system, threshold, limit]
|
|
170
|
+
});
|
|
171
|
+
return result.rows.map(row => {
|
|
172
|
+
const content = typeof row.content === 'string'
|
|
173
|
+
? JSON.parse(row.content)
|
|
174
|
+
: row.content;
|
|
175
|
+
return {
|
|
176
|
+
id: row.id,
|
|
177
|
+
feedbackScore: content.feedbackScore ?? DEFAULT_SCORE,
|
|
178
|
+
accessCount: content.accessCount ?? 0,
|
|
179
|
+
lastAccessedAt: content.lastAccessedAt ?? ''
|
|
180
|
+
};
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
catch (error) {
|
|
184
|
+
console.error(`[FeedbackCollector] Failed to get low scored:`, error);
|
|
185
|
+
return [];
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Archive memories with very low scores (cleanup)
|
|
190
|
+
*/
|
|
191
|
+
async archiveLowScoredMemories(system, threshold = 0.1, minAge = 30 // days
|
|
192
|
+
) {
|
|
193
|
+
try {
|
|
194
|
+
const db = turso.getClient();
|
|
195
|
+
const result = await db.execute({
|
|
196
|
+
sql: `UPDATE items SET status = 'archived', updated_at = datetime('now')
|
|
197
|
+
WHERE system = ? AND type = 'memory' AND status = 'active'
|
|
198
|
+
AND COALESCE(json_extract(content, '$.feedbackScore'), 0.5) < ?
|
|
199
|
+
AND created_at < datetime('now', '-' || ? || ' days')`,
|
|
200
|
+
args: [system, threshold, minAge]
|
|
201
|
+
});
|
|
202
|
+
const archived = result.rowsAffected ?? 0;
|
|
203
|
+
if (archived > 0) {
|
|
204
|
+
console.log(`[FeedbackCollector] Archived ${archived} low-scored memories`);
|
|
205
|
+
}
|
|
206
|
+
return archived;
|
|
207
|
+
}
|
|
208
|
+
catch (error) {
|
|
209
|
+
console.error(`[FeedbackCollector] Failed to archive:`, error);
|
|
210
|
+
return 0;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
// =============================================================================
|
|
215
|
+
// Export Singleton
|
|
216
|
+
// =============================================================================
|
|
217
|
+
export const feedbackCollector = new FeedbackCollectorService();
|
|
218
|
+
export default feedbackCollector;
|
|
219
|
+
//# sourceMappingURL=FeedbackCollector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FeedbackCollector.js","sourceRoot":"","sources":["../../src/services/FeedbackCollector.ts"],"names":[],"mappings":"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"}
|
package/dist/services/index.d.ts
CHANGED
|
@@ -9,7 +9,8 @@ export * from "./auto-inject.js";
|
|
|
9
9
|
export * from "./auto-tag.js";
|
|
10
10
|
export { memoryRouter, type UnifiedMemory, type SearchOptions, type SearchResult, type WriteOptions } from './memory-router.js';
|
|
11
11
|
export { contextInjector, type SessionContext, type TaskContext, type SystemHealth } from './context-injector.js';
|
|
12
|
-
export { patternTracker, type TrackedPattern, type PatternContext, type ESLintRuleSpec } from './pattern-tracker.js';
|
|
12
|
+
export { patternTracker, patternEvolution, type TrackedPattern, type PatternContext, type ESLintRuleSpec, type PatternTrend, type PatternEvolutionReport } from './pattern-tracker.js';
|
|
13
|
+
export { feedbackCollector, type MemoryFeedback, type FeedbackAction, type FeedbackStats, type MemoryWithScore } from './FeedbackCollector.js';
|
|
13
14
|
export { MemoryConsolidationService, createConsolidationService, type ConsolidationResult, type ConflictInfo, type DecayResult, type MemoryWithMeta, } from './memory-consolidation.js';
|
|
14
15
|
export { WeeklyDigestService, createWeeklyDigestService, type WeeklyDigest, type DigestSummary, type DigestHighlight, type DigestPattern, type DigestRecommendation, type DigestTrend, } from './weekly-digest.js';
|
|
15
16
|
export { CrossProjectSyncService, createCrossProjectSyncService, ECOSYSTEM_SYSTEMS, type SyncConfig, type SyncResult, type SharedMemory, } from './cross-project-sync.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAG9B,OAAO,EAAE,YAAY,EAAE,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAChI,OAAO,EAAE,eAAe,EAAE,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAClH,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAG9B,OAAO,EAAE,YAAY,EAAE,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAChI,OAAO,EAAE,eAAe,EAAE,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAClH,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,sBAAsB,EAC5B,MAAM,sBAAsB,CAAA;AAG7B,OAAO,EACL,iBAAiB,EACjB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,eAAe,EACrB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,cAAc,GACpB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,KAAK,WAAW,GACjB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,uBAAuB,EACvB,6BAA6B,EAC7B,iBAAiB,EACjB,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,YAAY,GAClB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/services/index.js
CHANGED
|
@@ -10,7 +10,9 @@ export * from "./auto-tag.js";
|
|
|
10
10
|
// v3.0 Services
|
|
11
11
|
export { memoryRouter } from './memory-router.js';
|
|
12
12
|
export { contextInjector } from './context-injector.js';
|
|
13
|
-
export { patternTracker } from './pattern-tracker.js';
|
|
13
|
+
export { patternTracker, patternEvolution } from './pattern-tracker.js';
|
|
14
|
+
// Feedback Collector (v2.8 - Learning Loop)
|
|
15
|
+
export { feedbackCollector } from './FeedbackCollector.js';
|
|
14
16
|
// Memory Consolidation & Weekly Digest
|
|
15
17
|
export { MemoryConsolidationService, createConsolidationService, } from './memory-consolidation.js';
|
|
16
18
|
export { WeeklyDigestService, createWeeklyDigestService, } from './weekly-digest.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAE9B,gBAAgB;AAChB,OAAO,EAAE,YAAY,EAAgF,MAAM,oBAAoB,CAAC;AAChI,OAAO,EAAE,eAAe,EAA4D,MAAM,uBAAuB,CAAC;AAClH,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAE9B,gBAAgB;AAChB,OAAO,EAAE,YAAY,EAAgF,MAAM,oBAAoB,CAAC;AAChI,OAAO,EAAE,eAAe,EAA4D,MAAM,uBAAuB,CAAC;AAClH,OAAO,EACL,cAAc,EACd,gBAAgB,EAMjB,MAAM,sBAAsB,CAAA;AAE7B,4CAA4C;AAC5C,OAAO,EACL,iBAAiB,EAKlB,MAAM,wBAAwB,CAAC;AAEhC,uCAAuC;AACvC,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,GAK3B,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,mBAAmB,EACnB,yBAAyB,GAO1B,MAAM,oBAAoB,CAAC;AAE5B,qBAAqB;AACrB,OAAO,EACL,uBAAuB,EACvB,6BAA6B,EAC7B,iBAAiB,GAIlB,MAAM,yBAAyB,CAAC;AAEjC,yBAAyB;AACzB,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -92,6 +92,56 @@ declare class PatternTrackerService {
|
|
|
92
92
|
private savePattern;
|
|
93
93
|
private saveAutoImprovement;
|
|
94
94
|
}
|
|
95
|
+
export interface PatternTrend {
|
|
96
|
+
patternId: string;
|
|
97
|
+
description: string;
|
|
98
|
+
weeklyOccurrences: number[];
|
|
99
|
+
trend: 'increasing' | 'stable' | 'decreasing';
|
|
100
|
+
velocity: number;
|
|
101
|
+
isPersistent: boolean;
|
|
102
|
+
firstSeen: string;
|
|
103
|
+
lastSeen: string;
|
|
104
|
+
totalOccurrences: number;
|
|
105
|
+
}
|
|
106
|
+
export interface PatternEvolutionReport {
|
|
107
|
+
system: DevSystem;
|
|
108
|
+
generatedAt: string;
|
|
109
|
+
patterns: PatternTrend[];
|
|
110
|
+
summary: {
|
|
111
|
+
improving: number;
|
|
112
|
+
stable: number;
|
|
113
|
+
worsening: number;
|
|
114
|
+
persistent: number;
|
|
115
|
+
};
|
|
116
|
+
recommendations: string[];
|
|
117
|
+
}
|
|
118
|
+
declare class PatternEvolutionService {
|
|
119
|
+
/**
|
|
120
|
+
* Analyze pattern trends over time
|
|
121
|
+
*/
|
|
122
|
+
analyzeEvolution(system: DevSystem): Promise<PatternEvolutionReport>;
|
|
123
|
+
/**
|
|
124
|
+
* Get weekly occurrence counts for a pattern
|
|
125
|
+
*/
|
|
126
|
+
private getWeeklyOccurrences;
|
|
127
|
+
/**
|
|
128
|
+
* Calculate trend direction from weekly data
|
|
129
|
+
*/
|
|
130
|
+
private calculateTrend;
|
|
131
|
+
/**
|
|
132
|
+
* Calculate velocity (percentage change)
|
|
133
|
+
*/
|
|
134
|
+
private calculateVelocity;
|
|
135
|
+
/**
|
|
136
|
+
* Get patterns that need immediate attention
|
|
137
|
+
*/
|
|
138
|
+
getCriticalPatterns(system: DevSystem): Promise<PatternTrend[]>;
|
|
139
|
+
/**
|
|
140
|
+
* Get patterns showing improvement
|
|
141
|
+
*/
|
|
142
|
+
getImprovingPatterns(system: DevSystem): Promise<PatternTrend[]>;
|
|
143
|
+
}
|
|
144
|
+
export declare const patternEvolution: PatternEvolutionService;
|
|
95
145
|
export declare const patternTracker: PatternTrackerService;
|
|
96
146
|
export default patternTracker;
|
|
97
147
|
//# sourceMappingURL=pattern-tracker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pattern-tracker.d.ts","sourceRoot":"","sources":["../../src/services/pattern-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,SAAS,EAA0C,MAAM,mBAAmB,CAAA;AAM1F,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAA;IAChD,QAAQ,EAAE,cAAc,EAAE,CAAA;IAC1B,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,oBAAoB,EAAE,OAAO,CAAA;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS,GAAG,YAAY,GAAG,QAAQ,CAAA;QACzC,IAAI,EAAE;YAAE,WAAW,EAAE,MAAM,CAAA;SAAE,CAAA;QAC7B,OAAO,CAAC,EAAE,MAAM,GAAG,YAAY,CAAA;QAC/B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KACjC,CAAA;IACD,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;IACxB,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAyDD,cAAM,qBAAqB;IACzB,OAAO,CAAC,kBAAkB,CAAI;IAE9B;;OAEG;IACG,KAAK,CACT,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,SAAS,GAChB,OAAO,CAAC;QACT,KAAK,EAAE,MAAM,CAAA;QACb,SAAS,EAAE,OAAO,CAAA;QAClB,IAAI,CAAC,EAAE,cAAc,CAAA;KACtB,CAAC;IA0CF;;OAEG;IACG,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;IAKrE;;OAEG;IACG,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IA8BtE;;OAEG;IACG,sBAAsB,CAC1B,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,SAAS,GAChB,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;IA+CtC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAqB1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA4BxB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAqFxB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAyBxB;;OAEG;IACH,OAAO,CAAC,cAAc;IActB;;OAEG;IACH,OAAO,CAAC,YAAY;YAkBN,WAAW;YA0BX,aAAa;YAab,WAAW;YAYX,mBAAmB;CAalC;AAMD,eAAO,MAAM,cAAc,uBAA8B,CAAA;AACzD,eAAe,cAAc,CAAA"}
|
|
1
|
+
{"version":3,"file":"pattern-tracker.d.ts","sourceRoot":"","sources":["../../src/services/pattern-tracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -417,6 +417,154 @@ ${ruleBody}
|
|
|
417
417
|
});
|
|
418
418
|
}
|
|
419
419
|
}
|
|
420
|
+
class PatternEvolutionService {
|
|
421
|
+
/**
|
|
422
|
+
* Analyze pattern trends over time
|
|
423
|
+
*/
|
|
424
|
+
async analyzeEvolution(system) {
|
|
425
|
+
const db = turso.getClient();
|
|
426
|
+
const now = new Date();
|
|
427
|
+
const generatedAt = now.toISOString();
|
|
428
|
+
// Get all patterns for this system
|
|
429
|
+
const patternsResult = await db.execute({
|
|
430
|
+
sql: `SELECT id, content, created_at FROM items
|
|
431
|
+
WHERE system = ? AND type = 'pattern'
|
|
432
|
+
ORDER BY created_at DESC`,
|
|
433
|
+
args: [system]
|
|
434
|
+
});
|
|
435
|
+
const trends = [];
|
|
436
|
+
const summary = { improving: 0, stable: 0, worsening: 0, persistent: 0 };
|
|
437
|
+
const recommendations = [];
|
|
438
|
+
for (const row of patternsResult.rows) {
|
|
439
|
+
try {
|
|
440
|
+
const content = typeof row.content === 'string'
|
|
441
|
+
? JSON.parse(row.content)
|
|
442
|
+
: row.content;
|
|
443
|
+
const pattern = content;
|
|
444
|
+
// Calculate weekly occurrences (last 4 weeks)
|
|
445
|
+
const weeklyOccurrences = await this.getWeeklyOccurrences(pattern.patternId, system, 4);
|
|
446
|
+
// Calculate trend
|
|
447
|
+
const trend = this.calculateTrend(weeklyOccurrences);
|
|
448
|
+
const velocity = this.calculateVelocity(weeklyOccurrences);
|
|
449
|
+
const isPersistent = pattern.count >= 5 && !pattern.autoImproveTriggered;
|
|
450
|
+
trends.push({
|
|
451
|
+
patternId: pattern.patternId,
|
|
452
|
+
description: pattern.description,
|
|
453
|
+
weeklyOccurrences,
|
|
454
|
+
trend,
|
|
455
|
+
velocity,
|
|
456
|
+
isPersistent,
|
|
457
|
+
firstSeen: pattern.firstSeen,
|
|
458
|
+
lastSeen: pattern.lastSeen,
|
|
459
|
+
totalOccurrences: pattern.count
|
|
460
|
+
});
|
|
461
|
+
// Update summary
|
|
462
|
+
if (trend === 'decreasing')
|
|
463
|
+
summary.improving++;
|
|
464
|
+
else if (trend === 'stable')
|
|
465
|
+
summary.stable++;
|
|
466
|
+
else
|
|
467
|
+
summary.worsening++;
|
|
468
|
+
if (isPersistent)
|
|
469
|
+
summary.persistent++;
|
|
470
|
+
// Generate recommendations
|
|
471
|
+
if (trend === 'increasing' && pattern.count >= 3) {
|
|
472
|
+
recommendations.push(`Pattern "${pattern.patternId}" is worsening. Consider implementing ESLint rule or documentation.`);
|
|
473
|
+
}
|
|
474
|
+
if (isPersistent) {
|
|
475
|
+
recommendations.push(`Persistent pattern "${pattern.patternId}" needs attention. Consider team training or tooling.`);
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
catch {
|
|
479
|
+
// Skip malformed patterns
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
// Sort by urgency (worsening + high count first)
|
|
483
|
+
trends.sort((a, b) => {
|
|
484
|
+
const aUrgency = (a.trend === 'increasing' ? 10 : 0) + a.totalOccurrences;
|
|
485
|
+
const bUrgency = (b.trend === 'increasing' ? 10 : 0) + b.totalOccurrences;
|
|
486
|
+
return bUrgency - aUrgency;
|
|
487
|
+
});
|
|
488
|
+
return {
|
|
489
|
+
system,
|
|
490
|
+
generatedAt,
|
|
491
|
+
patterns: trends,
|
|
492
|
+
summary,
|
|
493
|
+
recommendations: [...new Set(recommendations)].slice(0, 5) // Dedupe and limit
|
|
494
|
+
};
|
|
495
|
+
}
|
|
496
|
+
/**
|
|
497
|
+
* Get weekly occurrence counts for a pattern
|
|
498
|
+
*/
|
|
499
|
+
async getWeeklyOccurrences(patternId, system, weeks) {
|
|
500
|
+
const db = turso.getClient();
|
|
501
|
+
const counts = [];
|
|
502
|
+
const now = new Date();
|
|
503
|
+
for (let i = 0; i < weeks; i++) {
|
|
504
|
+
const weekStart = new Date(now);
|
|
505
|
+
weekStart.setDate(weekStart.getDate() - (i + 1) * 7);
|
|
506
|
+
const weekEnd = new Date(now);
|
|
507
|
+
weekEnd.setDate(weekEnd.getDate() - i * 7);
|
|
508
|
+
try {
|
|
509
|
+
const result = await db.execute({
|
|
510
|
+
sql: `SELECT content FROM items
|
|
511
|
+
WHERE system = ? AND type = 'pattern'
|
|
512
|
+
AND json_extract(content, '$.patternId') = ?
|
|
513
|
+
AND updated_at BETWEEN ? AND ?`,
|
|
514
|
+
args: [system, patternId, weekStart.toISOString(), weekEnd.toISOString()]
|
|
515
|
+
});
|
|
516
|
+
// For now, use pattern count difference if available
|
|
517
|
+
// In production, you'd track individual occurrences
|
|
518
|
+
counts.unshift(result.rows.length > 0 ? 1 : 0);
|
|
519
|
+
}
|
|
520
|
+
catch {
|
|
521
|
+
counts.unshift(0);
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
return counts;
|
|
525
|
+
}
|
|
526
|
+
/**
|
|
527
|
+
* Calculate trend direction from weekly data
|
|
528
|
+
*/
|
|
529
|
+
calculateTrend(counts) {
|
|
530
|
+
if (counts.length < 2)
|
|
531
|
+
return 'stable';
|
|
532
|
+
const recent = counts.slice(-2).reduce((a, b) => a + b, 0);
|
|
533
|
+
const older = counts.slice(0, 2).reduce((a, b) => a + b, 0);
|
|
534
|
+
if (recent < older * 0.7)
|
|
535
|
+
return 'decreasing';
|
|
536
|
+
if (recent > older * 1.3)
|
|
537
|
+
return 'increasing';
|
|
538
|
+
return 'stable';
|
|
539
|
+
}
|
|
540
|
+
/**
|
|
541
|
+
* Calculate velocity (percentage change)
|
|
542
|
+
*/
|
|
543
|
+
calculateVelocity(counts) {
|
|
544
|
+
if (counts.length < 2)
|
|
545
|
+
return 0;
|
|
546
|
+
const recent = counts.slice(-2).reduce((a, b) => a + b, 0);
|
|
547
|
+
const older = counts.slice(0, 2).reduce((a, b) => a + b, 0);
|
|
548
|
+
if (older === 0)
|
|
549
|
+
return recent > 0 ? 100 : 0;
|
|
550
|
+
return Math.round(((recent - older) / older) * 100);
|
|
551
|
+
}
|
|
552
|
+
/**
|
|
553
|
+
* Get patterns that need immediate attention
|
|
554
|
+
*/
|
|
555
|
+
async getCriticalPatterns(system) {
|
|
556
|
+
const report = await this.analyzeEvolution(system);
|
|
557
|
+
return report.patterns.filter(p => p.trend === 'increasing' || p.isPersistent);
|
|
558
|
+
}
|
|
559
|
+
/**
|
|
560
|
+
* Get patterns showing improvement
|
|
561
|
+
*/
|
|
562
|
+
async getImprovingPatterns(system) {
|
|
563
|
+
const report = await this.analyzeEvolution(system);
|
|
564
|
+
return report.patterns.filter(p => p.trend === 'decreasing');
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
export const patternEvolution = new PatternEvolutionService();
|
|
420
568
|
// =============================================================================
|
|
421
569
|
// Export Singleton
|
|
422
570
|
// =============================================================================
|