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
@@ -0,0 +1,442 @@
1
+ /**
2
+ * @file Unified Pattern Registry
3
+ * @description Single source of truth for all pattern definitions
4
+ * @version 2.8.0
5
+ *
6
+ * Combines functionality from:
7
+ * - auto-improve/pattern-detector.ts
8
+ * - services/pattern-tracker.ts
9
+ */
10
+ import { z } from 'zod';
11
+ // =============================================================================
12
+ // Schema
13
+ // =============================================================================
14
+ export const PatternSeveritySchema = z.enum(['critical', 'high', 'medium', 'low']);
15
+ export const PatternStatusSchema = z.enum(['active', 'triggered', 'implemented', 'retired']);
16
+ export const UnifiedPatternSchema = z.object({
17
+ id: z.string(),
18
+ name: z.string(),
19
+ description: z.string(),
20
+ severity: PatternSeveritySchema,
21
+ // Detection
22
+ regex: z.string().optional(),
23
+ filePatterns: z.array(z.string()).optional(),
24
+ excludePatterns: z.array(z.string()).optional(),
25
+ // ESLint integration
26
+ eslintRuleName: z.string().optional(),
27
+ astVisitorTemplate: z.string().optional(),
28
+ // Lifecycle
29
+ status: PatternStatusSchema.default('active'),
30
+ triggeredAt: z.string().optional(),
31
+ implementedAt: z.string().optional(),
32
+ retiredAt: z.string().optional(),
33
+ retiredReason: z.string().optional(),
34
+ // Learning feedback
35
+ threshold: z.number().default(3),
36
+ falsePositives: z.number().default(0),
37
+ confirmedViolations: z.number().default(0),
38
+ adjustedThreshold: z.number().optional(),
39
+ // Metadata
40
+ createdAt: z.string().optional(),
41
+ updatedAt: z.string().optional(),
42
+ createdBy: z.string().optional(),
43
+ });
44
+ // =============================================================================
45
+ // Built-in Patterns
46
+ // =============================================================================
47
+ export const BUILTIN_PATTERNS = [
48
+ {
49
+ id: 'any-type',
50
+ name: 'Any Type Usage',
51
+ description: 'Using TypeScript any type instead of proper typing',
52
+ severity: 'high',
53
+ regex: ':\\s*any\\b|as\\s+any\\b',
54
+ filePatterns: ['*.ts', '*.tsx'],
55
+ excludePatterns: ['*.test.ts', '*.spec.ts'],
56
+ eslintRuleName: 'charter/no-any-type',
57
+ astVisitorTemplate: `return {
58
+ TSAnyKeyword(node) {
59
+ context.report({ node, messageId: 'violation' });
60
+ }
61
+ };`,
62
+ status: 'active',
63
+ threshold: 3,
64
+ falsePositives: 0,
65
+ confirmedViolations: 0,
66
+ },
67
+ {
68
+ id: 'console-log',
69
+ name: 'Console Log in Production',
70
+ description: 'Console.log statements left in production code',
71
+ severity: 'medium',
72
+ regex: 'console\\.log\\(',
73
+ filePatterns: ['*.ts', '*.tsx', '*.js', '*.jsx'],
74
+ excludePatterns: ['*.test.ts', '*.spec.ts', '*.test.js'],
75
+ eslintRuleName: 'no-console',
76
+ astVisitorTemplate: `return {
77
+ CallExpression(node) {
78
+ if (node.callee.type === 'MemberExpression' &&
79
+ node.callee.object.name === 'console' &&
80
+ node.callee.property.name === 'log') {
81
+ context.report({ node, messageId: 'violation' });
82
+ }
83
+ }
84
+ };`,
85
+ status: 'active',
86
+ threshold: 3,
87
+ falsePositives: 0,
88
+ confirmedViolations: 0,
89
+ },
90
+ {
91
+ id: 'eslint-disable',
92
+ name: 'ESLint Disable Comment',
93
+ description: 'ESLint disable comments hiding issues',
94
+ severity: 'high',
95
+ regex: 'eslint-disable',
96
+ filePatterns: ['*.ts', '*.tsx', '*.js', '*.jsx'],
97
+ eslintRuleName: 'charter/no-eslint-disable',
98
+ astVisitorTemplate: `const sourceCode = context.getSourceCode();
99
+ return {
100
+ Program() {
101
+ const comments = sourceCode.getAllComments();
102
+ for (const comment of comments) {
103
+ if (comment.value.includes('eslint-disable')) {
104
+ context.report({ loc: comment.loc, messageId: 'violation' });
105
+ }
106
+ }
107
+ }
108
+ };`,
109
+ status: 'active',
110
+ threshold: 3,
111
+ falsePositives: 0,
112
+ confirmedViolations: 0,
113
+ },
114
+ {
115
+ id: 'raw-sql',
116
+ name: 'Raw SQL Query',
117
+ description: 'Raw SQL query instead of query builder',
118
+ severity: 'critical',
119
+ regex: 'db\\.execute\\([\'"`]|\\$\\{.*\\}.*SELECT|\\$\\{.*\\}.*INSERT',
120
+ filePatterns: ['*.ts'],
121
+ excludePatterns: ['**/migrations/**', '**/db/**'],
122
+ eslintRuleName: 'charter/no-raw-sql',
123
+ astVisitorTemplate: `return {
124
+ CallExpression(node) {
125
+ if (node.callee.type === 'MemberExpression' &&
126
+ node.callee.property.name === 'execute' &&
127
+ node.arguments[0]?.type === 'TemplateLiteral') {
128
+ context.report({ node, messageId: 'violation' });
129
+ }
130
+ }
131
+ };`,
132
+ status: 'active',
133
+ threshold: 2,
134
+ falsePositives: 0,
135
+ confirmedViolations: 0,
136
+ },
137
+ {
138
+ id: 'missing-zod',
139
+ name: 'Missing Zod Validation',
140
+ description: 'TRPC endpoint without Zod input validation',
141
+ severity: 'high',
142
+ regex: 'publicProcedure\\.mutation\\(async\\s*\\(\\{\\s*input',
143
+ filePatterns: ['*.ts'],
144
+ excludePatterns: [],
145
+ eslintRuleName: 'charter/require-zod-validation',
146
+ astVisitorTemplate: `return {
147
+ CallExpression(node) {
148
+ // Check for publicProcedure.mutation without .input()
149
+ if (node.callee.type === 'MemberExpression' &&
150
+ node.callee.property.name === 'mutation') {
151
+ // Implementation details
152
+ context.report({ node, messageId: 'violation' });
153
+ }
154
+ }
155
+ };`,
156
+ status: 'active',
157
+ threshold: 3,
158
+ falsePositives: 0,
159
+ confirmedViolations: 0,
160
+ },
161
+ {
162
+ id: 'async-useeffect',
163
+ name: 'Async UseEffect',
164
+ description: 'Async function directly in useEffect',
165
+ severity: 'medium',
166
+ regex: 'useEffect\\(async',
167
+ filePatterns: ['*.tsx', '*.jsx'],
168
+ eslintRuleName: 'charter/no-async-useeffect',
169
+ astVisitorTemplate: `return {
170
+ CallExpression(node) {
171
+ if (node.callee.type === 'Identifier' &&
172
+ node.callee.name === 'useEffect' &&
173
+ node.arguments[0]?.async) {
174
+ context.report({ node, messageId: 'violation' });
175
+ }
176
+ }
177
+ };`,
178
+ status: 'active',
179
+ threshold: 3,
180
+ falsePositives: 0,
181
+ confirmedViolations: 0,
182
+ },
183
+ {
184
+ id: 'hardcoded-color',
185
+ name: 'Hardcoded Color',
186
+ description: 'Hardcoded color value instead of semantic token',
187
+ severity: 'low',
188
+ regex: '#[0-9a-fA-F]{3,8}',
189
+ filePatterns: ['*.tsx', '*.jsx', '*.css'],
190
+ excludePatterns: ['**/tailwind.config.*'],
191
+ eslintRuleName: 'charter/use-semantic-tokens',
192
+ astVisitorTemplate: `return {
193
+ Literal(node) {
194
+ if (typeof node.value === 'string' && /#[0-9a-fA-F]{3,8}/.test(node.value)) {
195
+ context.report({ node, messageId: 'violation' });
196
+ }
197
+ }
198
+ };`,
199
+ status: 'active',
200
+ threshold: 5,
201
+ falsePositives: 0,
202
+ confirmedViolations: 0,
203
+ },
204
+ {
205
+ id: 'finance-no-ledger',
206
+ name: 'Finance Without Ledger',
207
+ description: 'Finance table insert without LedgerService.createEntry()',
208
+ severity: 'critical',
209
+ regex: 'insert\\(finance\\)(?!.*LedgerService)',
210
+ filePatterns: ['*.ts'],
211
+ eslintRuleName: 'charter/finance-ledger-sync',
212
+ astVisitorTemplate: `let hasFinanceInsert = false;
213
+ let hasLedgerCall = false;
214
+ return {
215
+ CallExpression(node) {
216
+ const callee = node.callee;
217
+ if (callee.property?.name === 'insert') hasFinanceInsert = true;
218
+ if (callee.object?.name === 'LedgerService') hasLedgerCall = true;
219
+ },
220
+ 'Program:exit'(node) {
221
+ if (hasFinanceInsert && !hasLedgerCall) {
222
+ context.report({ node, messageId: 'violation' });
223
+ }
224
+ }
225
+ };`,
226
+ status: 'active',
227
+ threshold: 1,
228
+ falsePositives: 0,
229
+ confirmedViolations: 0,
230
+ },
231
+ {
232
+ id: 'sequential-api-calls',
233
+ name: 'Sequential API Calls',
234
+ description: 'Sequential API calls that could be parallelized',
235
+ severity: 'medium',
236
+ regex: 'await.*\\n\\s*await',
237
+ filePatterns: ['*.ts', '*.tsx'],
238
+ eslintRuleName: 'charter/no-sequential-api-calls',
239
+ status: 'active',
240
+ threshold: 3,
241
+ falsePositives: 0,
242
+ confirmedViolations: 0,
243
+ },
244
+ ];
245
+ // =============================================================================
246
+ // Registry Class
247
+ // =============================================================================
248
+ export class PatternRegistry {
249
+ patterns;
250
+ customPatterns = [];
251
+ constructor() {
252
+ this.patterns = new Map();
253
+ // Load builtin patterns
254
+ for (const pattern of BUILTIN_PATTERNS) {
255
+ this.patterns.set(pattern.id, { ...pattern });
256
+ }
257
+ }
258
+ /**
259
+ * Get pattern by ID
260
+ */
261
+ get(patternId) {
262
+ return this.patterns.get(patternId);
263
+ }
264
+ /**
265
+ * Get all patterns
266
+ */
267
+ getAll() {
268
+ return Array.from(this.patterns.values());
269
+ }
270
+ /**
271
+ * Get active patterns
272
+ */
273
+ getActive() {
274
+ return this.getAll().filter(p => p.status === 'active');
275
+ }
276
+ /**
277
+ * Get patterns by severity
278
+ */
279
+ getBySeverity(severity) {
280
+ return this.getAll().filter(p => p.severity === severity);
281
+ }
282
+ /**
283
+ * Register custom pattern
284
+ */
285
+ register(pattern) {
286
+ const validated = UnifiedPatternSchema.parse(pattern);
287
+ this.patterns.set(validated.id, validated);
288
+ this.customPatterns.push(validated);
289
+ }
290
+ /**
291
+ * Update pattern status
292
+ */
293
+ updateStatus(patternId, status, reason) {
294
+ const pattern = this.patterns.get(patternId);
295
+ if (!pattern)
296
+ return;
297
+ pattern.status = status;
298
+ pattern.updatedAt = new Date().toISOString();
299
+ if (status === 'triggered') {
300
+ pattern.triggeredAt = pattern.updatedAt;
301
+ }
302
+ else if (status === 'implemented') {
303
+ pattern.implementedAt = pattern.updatedAt;
304
+ }
305
+ else if (status === 'retired') {
306
+ pattern.retiredAt = pattern.updatedAt;
307
+ pattern.retiredReason = reason;
308
+ }
309
+ }
310
+ /**
311
+ * Record feedback (adjust learning)
312
+ */
313
+ recordFeedback(patternId, type) {
314
+ const pattern = this.patterns.get(patternId);
315
+ if (!pattern)
316
+ return;
317
+ if (type === 'confirmed') {
318
+ pattern.confirmedViolations++;
319
+ }
320
+ else {
321
+ pattern.falsePositives++;
322
+ // Adjust threshold if too many false positives
323
+ if (pattern.falsePositives >= 3 && !pattern.adjustedThreshold) {
324
+ pattern.adjustedThreshold = pattern.threshold + 2;
325
+ console.log(`[PatternRegistry] Adjusted threshold for ${patternId}: ${pattern.threshold} -> ${pattern.adjustedThreshold}`);
326
+ }
327
+ }
328
+ pattern.updatedAt = new Date().toISOString();
329
+ }
330
+ /**
331
+ * Get effective threshold for a pattern
332
+ */
333
+ getEffectiveThreshold(patternId) {
334
+ const pattern = this.patterns.get(patternId);
335
+ if (!pattern)
336
+ return 3;
337
+ return pattern.adjustedThreshold ?? pattern.threshold;
338
+ }
339
+ /**
340
+ * Detect pattern in content
341
+ */
342
+ detect(content, filePath) {
343
+ const results = [];
344
+ for (const pattern of this.getActive()) {
345
+ // Check file patterns
346
+ if (pattern.filePatterns) {
347
+ const matchesFile = pattern.filePatterns.some(fp => {
348
+ const regex = new RegExp(fp.replace('*', '.*'));
349
+ return regex.test(filePath);
350
+ });
351
+ if (!matchesFile)
352
+ continue;
353
+ }
354
+ // Check exclude patterns
355
+ if (pattern.excludePatterns) {
356
+ const excluded = pattern.excludePatterns.some(ep => {
357
+ const regex = new RegExp(ep.replace('*', '.*').replace('**/', '.*'));
358
+ return regex.test(filePath);
359
+ });
360
+ if (excluded)
361
+ continue;
362
+ }
363
+ // Detect with regex
364
+ if (pattern.regex) {
365
+ const regex = new RegExp(pattern.regex, 'gm');
366
+ const matches = [...content.matchAll(regex)];
367
+ if (matches.length > 0) {
368
+ results.push({ pattern, matches });
369
+ }
370
+ }
371
+ }
372
+ return results;
373
+ }
374
+ /**
375
+ * Generate ESLint rule code for a pattern
376
+ */
377
+ generateEslintRule(patternId) {
378
+ const pattern = this.patterns.get(patternId);
379
+ if (!pattern || !pattern.eslintRuleName || !pattern.astVisitorTemplate) {
380
+ return null;
381
+ }
382
+ return `/**
383
+ * @file ${pattern.eslintRuleName}
384
+ * @description ${pattern.description}
385
+ * Auto-generated by cmp-standards pattern detection
386
+ * @version 1.0.0
387
+ */
388
+
389
+ module.exports = {
390
+ meta: {
391
+ type: 'problem',
392
+ docs: {
393
+ description: '${pattern.description}',
394
+ category: 'Best Practices',
395
+ recommended: true
396
+ },
397
+ schema: [],
398
+ messages: {
399
+ violation: '${pattern.description}'
400
+ }
401
+ },
402
+ create(context) {
403
+ ${pattern.astVisitorTemplate}
404
+ }
405
+ }
406
+ `;
407
+ }
408
+ /**
409
+ * Export all patterns for persistence
410
+ */
411
+ export() {
412
+ return this.getAll();
413
+ }
414
+ /**
415
+ * Import patterns from persistence
416
+ */
417
+ import(patterns) {
418
+ for (const pattern of patterns) {
419
+ try {
420
+ const validated = UnifiedPatternSchema.parse(pattern);
421
+ this.patterns.set(validated.id, validated);
422
+ }
423
+ catch (error) {
424
+ console.warn(`[PatternRegistry] Invalid pattern skipped: ${pattern.id}`, error);
425
+ }
426
+ }
427
+ }
428
+ }
429
+ // =============================================================================
430
+ // Singleton
431
+ // =============================================================================
432
+ let registryInstance = null;
433
+ export function getPatternRegistry() {
434
+ if (!registryInstance) {
435
+ registryInstance = new PatternRegistry();
436
+ }
437
+ return registryInstance;
438
+ }
439
+ export function resetPatternRegistry() {
440
+ registryInstance = null;
441
+ }
442
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/patterns/registry.ts"],"names":[],"mappings":"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"}
@@ -23,6 +23,19 @@ export interface DebouncerStats {
23
23
  skipRate: number;
24
24
  activeEntries: number;
25
25
  }
26
+ /**
27
+ * Tool-specific debounce windows
28
+ * Different tools have different optimal debounce times
29
+ */
30
+ export declare const TOOL_DEBOUNCE_CONFIG: Record<string, number>;
31
+ /**
32
+ * Get debounce window for a specific tool
33
+ */
34
+ export declare function getToolDebounceMs(toolName: string): number;
35
+ /**
36
+ * Check if a tool should never be debounced (write operations)
37
+ */
38
+ export declare function isWriteOperation(toolName: string): boolean;
26
39
  export declare class Debouncer {
27
40
  private config;
28
41
  private entries;
@@ -84,8 +97,52 @@ export declare class HookDebouncer extends Debouncer {
84
97
  constructor(config?: Partial<DebouncerConfig>);
85
98
  shouldSkipHook(hookName: string, context: Record<string, unknown>): boolean;
86
99
  }
100
+ /**
101
+ * Smart Debouncer with tool-specific windows
102
+ * Uses different debounce times based on tool type
103
+ */
104
+ export declare class SmartDebouncer {
105
+ private entries;
106
+ private maxEntries;
107
+ private debug;
108
+ private stats;
109
+ constructor(options?: {
110
+ maxEntries?: number;
111
+ debug?: boolean;
112
+ });
113
+ /**
114
+ * Check if operation should be skipped based on tool-specific window
115
+ */
116
+ shouldSkip(toolName: string, params: Record<string, unknown>): boolean;
117
+ private trackCall;
118
+ /**
119
+ * Cleanup old entries (uses longest debounce window)
120
+ */
121
+ cleanup(): number;
122
+ /**
123
+ * Get statistics including per-tool breakdown
124
+ */
125
+ getStats(): {
126
+ totalCalls: number;
127
+ skipped: number;
128
+ skipRate: number;
129
+ byTool: Record<string, {
130
+ total: number;
131
+ skipped: number;
132
+ skipRate: number;
133
+ }>;
134
+ };
135
+ /**
136
+ * Reset all state
137
+ */
138
+ reset(): void;
139
+ }
87
140
  export declare function getDebouncer(config?: Partial<DebouncerConfig>): Debouncer;
88
141
  export declare function getEmbeddingDebouncer(config?: Partial<DebouncerConfig>): EmbeddingDebouncer;
89
142
  export declare function getHookDebouncer(config?: Partial<DebouncerConfig>): HookDebouncer;
143
+ export declare function getSmartDebouncer(options?: {
144
+ maxEntries?: number;
145
+ debug?: boolean;
146
+ }): SmartDebouncer;
90
147
  export declare function resetDebouncers(): void;
91
148
  //# sourceMappingURL=Debouncer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Debouncer.d.ts","sourceRoot":"","sources":["../../src/performance/Debouncer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH,MAAM,WAAW,eAAe;IAC9B,sCAAsC;IACtC,QAAQ,EAAE,MAAM,CAAA;IAChB,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAA;IAClB,2BAA2B;IAC3B,KAAK,EAAE,OAAO,CAAA;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,EAAE,MAAM,CAAA;CACtB;AAiBD,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,OAAO,CAAyC;IACxD,OAAO,CAAC,KAAK,CAGZ;gBAEW,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM;IAIjD;;;OAGG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IA4BhC;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM;IAMpE;;OAEG;IACH,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO;IAK/E;;OAEG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO;IAM1C;;OAEG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI/B;;OAEG;IACH,OAAO,IAAI,MAAM;IAkBjB;;OAEG;IACH,QAAQ,IAAI,cAAc;IAY1B;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,SAAS,IAAI,eAAe;IAI5B;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI;CAGlD;AAMD;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,SAAS;gBACnC,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM;IAQjD,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAIxC;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,SAAS;gBAC9B,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM;IAQjD,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO;CAI5E;AAUD,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,SAAS,CAKzE;AAED,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,kBAAkB,CAK3F;AAED,wBAAgB,gBAAgB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,aAAa,CAKjF;AAED,wBAAgB,eAAe,IAAI,IAAI,CAItC"}
1
+ {"version":3,"file":"Debouncer.d.ts","sourceRoot":"","sources":["../../src/performance/Debouncer.ts"],"names":[],"mappings":"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"}