cmp-standards 2.8.0-alpha → 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.
Files changed (102) hide show
  1. package/dist/cache/EmbeddingCache.d.ts +2 -1
  2. package/dist/cache/EmbeddingCache.d.ts.map +1 -1
  3. package/dist/cache/EmbeddingCache.js +12 -12
  4. package/dist/cache/EmbeddingCache.js.map +1 -1
  5. package/dist/db/cloud.d.ts +1 -0
  6. package/dist/db/cloud.d.ts.map +1 -1
  7. package/dist/db/drizzle-client.d.ts +10 -1
  8. package/dist/db/drizzle-client.d.ts.map +1 -1
  9. package/dist/db/drizzle-client.js +57 -3
  10. package/dist/db/drizzle-client.js.map +1 -1
  11. package/dist/db/errors.d.ts +13 -1
  12. package/dist/db/errors.d.ts.map +1 -1
  13. package/dist/db/errors.js +49 -5
  14. package/dist/db/errors.js.map +1 -1
  15. package/dist/db/migrations.d.ts +42 -0
  16. package/dist/db/migrations.d.ts.map +1 -0
  17. package/dist/db/migrations.js +173 -0
  18. package/dist/db/migrations.js.map +1 -0
  19. package/dist/db/turso-client.d.ts +15 -3
  20. package/dist/db/turso-client.d.ts.map +1 -1
  21. package/dist/db/turso-client.js +49 -38
  22. package/dist/db/turso-client.js.map +1 -1
  23. package/dist/events/EventBus.d.ts +10 -0
  24. package/dist/events/EventBus.d.ts.map +1 -1
  25. package/dist/events/EventBus.js +57 -1
  26. package/dist/events/EventBus.js.map +1 -1
  27. package/dist/experts/ExpertVotePersistence.d.ts +86 -0
  28. package/dist/experts/ExpertVotePersistence.d.ts.map +1 -0
  29. package/dist/experts/ExpertVotePersistence.js +234 -0
  30. package/dist/experts/ExpertVotePersistence.js.map +1 -0
  31. package/dist/experts/index.d.ts +1 -0
  32. package/dist/experts/index.d.ts.map +1 -1
  33. package/dist/experts/index.js +2 -0
  34. package/dist/experts/index.js.map +1 -1
  35. package/dist/hooks/cloud-post-tool-use.d.ts +5 -0
  36. package/dist/hooks/cloud-post-tool-use.d.ts.map +1 -1
  37. package/dist/hooks/cloud-post-tool-use.js +43 -10
  38. package/dist/hooks/cloud-post-tool-use.js.map +1 -1
  39. package/dist/hooks/cloud-session-start.d.ts.map +1 -1
  40. package/dist/hooks/cloud-session-start.js +64 -0
  41. package/dist/hooks/cloud-session-start.js.map +1 -1
  42. package/dist/hooks/index.d.ts +1 -0
  43. package/dist/hooks/index.d.ts.map +1 -1
  44. package/dist/hooks/index.js +2 -0
  45. package/dist/hooks/index.js.map +1 -1
  46. package/dist/hooks/session-end.d.ts +67 -0
  47. package/dist/hooks/session-end.d.ts.map +1 -0
  48. package/dist/hooks/session-end.js +268 -0
  49. package/dist/hooks/session-end.js.map +1 -0
  50. package/dist/interfaces/index.d.ts +450 -0
  51. package/dist/interfaces/index.d.ts.map +1 -0
  52. package/dist/interfaces/index.js +50 -0
  53. package/dist/interfaces/index.js.map +1 -0
  54. package/dist/mcp/schemas.d.ts +278 -0
  55. package/dist/mcp/schemas.d.ts.map +1 -0
  56. package/dist/mcp/schemas.js +166 -0
  57. package/dist/mcp/schemas.js.map +1 -0
  58. package/dist/mcp/server.d.ts.map +1 -1
  59. package/dist/mcp/server.js +14 -3
  60. package/dist/mcp/server.js.map +1 -1
  61. package/dist/patterns/feedback-loop.d.ts +264 -0
  62. package/dist/patterns/feedback-loop.d.ts.map +1 -0
  63. package/dist/patterns/feedback-loop.js +329 -0
  64. package/dist/patterns/feedback-loop.js.map +1 -0
  65. package/dist/patterns/index.d.ts +9 -0
  66. package/dist/patterns/index.d.ts.map +1 -0
  67. package/dist/patterns/index.js +9 -0
  68. package/dist/patterns/index.js.map +1 -0
  69. package/dist/patterns/lifecycle.d.ts +88 -0
  70. package/dist/patterns/lifecycle.d.ts.map +1 -0
  71. package/dist/patterns/lifecycle.js +284 -0
  72. package/dist/patterns/lifecycle.js.map +1 -0
  73. package/dist/patterns/registry.d.ts +142 -0
  74. package/dist/patterns/registry.d.ts.map +1 -0
  75. package/dist/patterns/registry.js +442 -0
  76. package/dist/patterns/registry.js.map +1 -0
  77. package/dist/performance/Debouncer.d.ts +57 -0
  78. package/dist/performance/Debouncer.d.ts.map +1 -1
  79. package/dist/performance/Debouncer.js +149 -0
  80. package/dist/performance/Debouncer.js.map +1 -1
  81. package/dist/performance/index.d.ts +1 -1
  82. package/dist/performance/index.d.ts.map +1 -1
  83. package/dist/performance/index.js +3 -1
  84. package/dist/performance/index.js.map +1 -1
  85. package/dist/schema/expert-types.d.ts +2 -2
  86. package/dist/services/FeedbackCollector.d.ts +63 -0
  87. package/dist/services/FeedbackCollector.d.ts.map +1 -0
  88. package/dist/services/FeedbackCollector.js +219 -0
  89. package/dist/services/FeedbackCollector.js.map +1 -0
  90. package/dist/services/PlanManager.d.ts +1 -1
  91. package/dist/services/PlanManager.d.ts.map +1 -1
  92. package/dist/services/PlanManager.js +26 -6
  93. package/dist/services/PlanManager.js.map +1 -1
  94. package/dist/services/index.d.ts +2 -1
  95. package/dist/services/index.d.ts.map +1 -1
  96. package/dist/services/index.js +3 -1
  97. package/dist/services/index.js.map +1 -1
  98. package/dist/services/pattern-tracker.d.ts +50 -0
  99. package/dist/services/pattern-tracker.d.ts.map +1 -1
  100. package/dist/services/pattern-tracker.js +148 -0
  101. package/dist/services/pattern-tracker.js.map +1 -1
  102. package/package.json +1 -1
@@ -15,6 +15,45 @@ const DEFAULT_CONFIG = {
15
15
  debug: false,
16
16
  };
17
17
  // =============================================================================
18
+ // Smart Debouncing by Tool Type
19
+ // =============================================================================
20
+ /**
21
+ * Tool-specific debounce windows
22
+ * Different tools have different optimal debounce times
23
+ */
24
+ export const TOOL_DEBOUNCE_CONFIG = {
25
+ // Read operations - frequent, short debounce
26
+ 'Read': 1000,
27
+ 'Glob': 2000,
28
+ 'Grep': 2000,
29
+ 'LSP': 1000,
30
+ // Write operations - no debounce (always execute)
31
+ 'Write': 0,
32
+ 'Edit': 0,
33
+ 'NotebookEdit': 0,
34
+ // External operations - longer debounce
35
+ 'WebSearch': 5000,
36
+ 'WebFetch': 5000,
37
+ 'Bash': 3000,
38
+ // Task/Agent operations - medium debounce
39
+ 'Task': 3000,
40
+ 'Skill': 2000,
41
+ // Default for unknown tools
42
+ 'default': 3000
43
+ };
44
+ /**
45
+ * Get debounce window for a specific tool
46
+ */
47
+ export function getToolDebounceMs(toolName) {
48
+ return TOOL_DEBOUNCE_CONFIG[toolName] ?? TOOL_DEBOUNCE_CONFIG['default'];
49
+ }
50
+ /**
51
+ * Check if a tool should never be debounced (write operations)
52
+ */
53
+ export function isWriteOperation(toolName) {
54
+ return ['Write', 'Edit', 'NotebookEdit'].includes(toolName);
55
+ }
56
+ // =============================================================================
18
57
  // Debouncer Implementation
19
58
  // =============================================================================
20
59
  export class Debouncer {
@@ -166,12 +205,115 @@ export class HookDebouncer extends Debouncer {
166
205
  return this.shouldSkip(`hook:${key}`);
167
206
  }
168
207
  }
208
+ /**
209
+ * Smart Debouncer with tool-specific windows
210
+ * Uses different debounce times based on tool type
211
+ */
212
+ export class SmartDebouncer {
213
+ entries = new Map();
214
+ maxEntries;
215
+ debug;
216
+ stats = {
217
+ totalCalls: 0,
218
+ skipped: 0,
219
+ byTool: new Map()
220
+ };
221
+ constructor(options = {}) {
222
+ this.maxEntries = options.maxEntries ?? 500;
223
+ this.debug = options.debug ?? false;
224
+ }
225
+ /**
226
+ * Check if operation should be skipped based on tool-specific window
227
+ */
228
+ shouldSkip(toolName, params) {
229
+ const debounceMs = getToolDebounceMs(toolName);
230
+ // Write operations are never debounced
231
+ if (debounceMs === 0) {
232
+ this.trackCall(toolName, false);
233
+ return false;
234
+ }
235
+ this.stats.totalCalls++;
236
+ const now = Date.now();
237
+ const paramsStr = JSON.stringify(params, Object.keys(params).sort());
238
+ const key = createHash('md5').update(`${toolName}:${paramsStr}`).digest('hex');
239
+ const entry = this.entries.get(key);
240
+ if (entry && now - entry.lastCall < debounceMs) {
241
+ this.stats.skipped++;
242
+ entry.callCount++;
243
+ this.trackCall(toolName, true);
244
+ if (this.debug) {
245
+ console.log(`[SmartDebouncer] Skipping ${toolName} (window: ${debounceMs}ms, called ${entry.callCount}x)`);
246
+ }
247
+ return true;
248
+ }
249
+ // Update or create entry
250
+ this.entries.set(key, { lastCall: now, callCount: 1 });
251
+ // Cleanup if needed
252
+ if (this.entries.size > this.maxEntries) {
253
+ this.cleanup();
254
+ }
255
+ this.trackCall(toolName, false);
256
+ return false;
257
+ }
258
+ trackCall(toolName, skipped) {
259
+ const existing = this.stats.byTool.get(toolName) ?? { total: 0, skipped: 0 };
260
+ existing.total++;
261
+ if (skipped)
262
+ existing.skipped++;
263
+ this.stats.byTool.set(toolName, existing);
264
+ }
265
+ /**
266
+ * Cleanup old entries (uses longest debounce window)
267
+ */
268
+ cleanup() {
269
+ const now = Date.now();
270
+ const maxWindow = Math.max(...Object.values(TOOL_DEBOUNCE_CONFIG));
271
+ let removed = 0;
272
+ for (const [key, entry] of this.entries) {
273
+ if (now - entry.lastCall > maxWindow) {
274
+ this.entries.delete(key);
275
+ removed++;
276
+ }
277
+ }
278
+ return removed;
279
+ }
280
+ /**
281
+ * Get statistics including per-tool breakdown
282
+ */
283
+ getStats() {
284
+ const byTool = {};
285
+ for (const [tool, stats] of this.stats.byTool) {
286
+ byTool[tool] = {
287
+ ...stats,
288
+ skipRate: stats.total > 0 ? stats.skipped / stats.total : 0
289
+ };
290
+ }
291
+ return {
292
+ totalCalls: this.stats.totalCalls,
293
+ skipped: this.stats.skipped,
294
+ skipRate: this.stats.totalCalls > 0 ? this.stats.skipped / this.stats.totalCalls : 0,
295
+ byTool
296
+ };
297
+ }
298
+ /**
299
+ * Reset all state
300
+ */
301
+ reset() {
302
+ this.entries.clear();
303
+ this.stats = {
304
+ totalCalls: 0,
305
+ skipped: 0,
306
+ byTool: new Map()
307
+ };
308
+ }
309
+ }
169
310
  // =============================================================================
170
311
  // Singleton Instances
171
312
  // =============================================================================
172
313
  let globalDebouncer = null;
173
314
  let globalEmbeddingDebouncer = null;
174
315
  let globalHookDebouncer = null;
316
+ let globalSmartDebouncer = null;
175
317
  export function getDebouncer(config) {
176
318
  if (!globalDebouncer) {
177
319
  globalDebouncer = new Debouncer(config);
@@ -190,9 +332,16 @@ export function getHookDebouncer(config) {
190
332
  }
191
333
  return globalHookDebouncer;
192
334
  }
335
+ export function getSmartDebouncer(options) {
336
+ if (!globalSmartDebouncer) {
337
+ globalSmartDebouncer = new SmartDebouncer(options);
338
+ }
339
+ return globalSmartDebouncer;
340
+ }
193
341
  export function resetDebouncers() {
194
342
  globalDebouncer = null;
195
343
  globalEmbeddingDebouncer = null;
196
344
  globalHookDebouncer = null;
345
+ globalSmartDebouncer = null;
197
346
  }
198
347
  //# sourceMappingURL=Debouncer.js.map
@@ -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,GAChB,MAAM,gBAAgB,CAAA;AAGvB,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,cAAc,EACd,gBAAgB,GACjB,MAAM,kBAAkB,CAAA"}
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, } from './Debouncer.js';
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,GAChB,MAAM,gBAAgB,CAAA;AAEvB,eAAe;AACf,OAAO,EACL,WAAW,EAIX,cAAc,EACd,gBAAgB,GACjB,MAAM,kBAAkB,CAAA"}
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" | "decreasing" | "stable";
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" | "decreasing" | "stable" | undefined;
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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"}
@@ -78,7 +78,7 @@ export declare class PlanManager {
78
78
  */
79
79
  getLastCheckpoint(planId: string): Promise<PlanCheckpoint | null>;
80
80
  /**
81
- * Generar contexto de planes para session start
81
+ * Generar contexto de planes para session start (optimizado - sin N+1)
82
82
  */
83
83
  getSessionContext(currentPrompt?: string): Promise<string>;
84
84
  }
@@ -1 +1 @@
1
- {"version":3,"file":"PlanManager.d.ts","sourceRoot":"","sources":["../../src/services/PlanManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PlanManager.d.ts","sourceRoot":"","sources":["../../src/services/PlanManager.ts"],"names":[],"mappings":"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"}
@@ -290,16 +290,36 @@ export class PlanManager {
290
290
  // CONTEXT FOR SESSION START
291
291
  // ===========================================================================
292
292
  /**
293
- * Generar contexto de planes para session start
293
+ * Generar contexto de planes para session start (optimizado - sin N+1)
294
294
  */
295
295
  async getSessionContext(currentPrompt) {
296
296
  let context = '';
297
- // Planes activos
298
- const activePlans = await this.getActive();
297
+ // Batch query: obtener planes activos Y todos sus checkpoints en paralelo
298
+ const [activePlans, allCheckpoints] = await Promise.all([
299
+ this.getActive(),
300
+ this.client.list({ type: 'plan_checkpoint', limit: 100 }),
301
+ ]);
302
+ // Pre-compute último checkpoint por planId (O(1) lookup en lugar de N queries)
303
+ const lastCheckpointByPlan = new Map();
304
+ for (const item of allCheckpoints) {
305
+ const parseResult = PlanCheckpointSchema.safeParse({
306
+ ...item.content,
307
+ id: item.id,
308
+ });
309
+ if (parseResult.success) {
310
+ const checkpoint = parseResult.data;
311
+ const existing = lastCheckpointByPlan.get(checkpoint.planId);
312
+ // Mantener solo el más reciente
313
+ if (!existing || checkpoint.createdAt > existing.createdAt) {
314
+ lastCheckpointByPlan.set(checkpoint.planId, checkpoint);
315
+ }
316
+ }
317
+ }
299
318
  if (activePlans.length > 0) {
300
- context += `## 🎯 Planes Activos (${activePlans.length})\n\n`;
319
+ context += `## Planes Activos (${activePlans.length})\n\n`;
301
320
  for (const plan of activePlans.slice(0, 3)) {
302
- const lastCheckpoint = await this.getLastCheckpoint(plan.id);
321
+ // O(1) lookup en lugar de query a BD
322
+ const lastCheckpoint = lastCheckpointByPlan.get(plan.id);
303
323
  context += `### ${plan.title}\n`;
304
324
  context += `- **Estado**: ${plan.status}\n`;
305
325
  if (lastCheckpoint) {
@@ -319,7 +339,7 @@ export class PlanManager {
319
339
  limit: 3,
320
340
  });
321
341
  if (similar.length > 0) {
322
- context += `## 🔍 Planes Relacionados Encontrados\n\n`;
342
+ context += `## Planes Relacionados Encontrados\n\n`;
323
343
  context += `Tu solicitud parece relacionarse con planes existentes:\n\n`;
324
344
  for (const match of similar) {
325
345
  const similarity = Math.round(match.similarity * 100);