universal-agent-memory 0.6.2 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/dist/benchmarks/agents/naive-agent.d.ts +60 -0
  2. package/dist/benchmarks/agents/naive-agent.d.ts.map +1 -0
  3. package/dist/benchmarks/agents/naive-agent.js +144 -0
  4. package/dist/benchmarks/agents/naive-agent.js.map +1 -0
  5. package/dist/benchmarks/agents/uam-agent.d.ts +167 -0
  6. package/dist/benchmarks/agents/uam-agent.d.ts.map +1 -0
  7. package/dist/benchmarks/agents/uam-agent.js +386 -0
  8. package/dist/benchmarks/agents/uam-agent.js.map +1 -0
  9. package/dist/benchmarks/benchmark.d.ts +328 -0
  10. package/dist/benchmarks/benchmark.d.ts.map +1 -0
  11. package/dist/benchmarks/benchmark.js +104 -0
  12. package/dist/benchmarks/benchmark.js.map +1 -0
  13. package/dist/benchmarks/execution-verifier.d.ts +41 -0
  14. package/dist/benchmarks/execution-verifier.d.ts.map +1 -0
  15. package/dist/benchmarks/execution-verifier.js +342 -0
  16. package/dist/benchmarks/execution-verifier.js.map +1 -0
  17. package/dist/benchmarks/hierarchical-prompting.d.ts +37 -0
  18. package/dist/benchmarks/hierarchical-prompting.d.ts.map +1 -0
  19. package/dist/benchmarks/hierarchical-prompting.js +260 -0
  20. package/dist/benchmarks/hierarchical-prompting.js.map +1 -0
  21. package/dist/benchmarks/improved-benchmark.d.ts +88 -0
  22. package/dist/benchmarks/improved-benchmark.d.ts.map +1 -0
  23. package/dist/benchmarks/improved-benchmark.js +533 -0
  24. package/dist/benchmarks/improved-benchmark.js.map +1 -0
  25. package/dist/benchmarks/index.d.ts +10 -0
  26. package/dist/benchmarks/index.d.ts.map +1 -0
  27. package/dist/benchmarks/index.js +10 -0
  28. package/dist/benchmarks/index.js.map +1 -0
  29. package/dist/benchmarks/multi-turn-agent.d.ts +44 -0
  30. package/dist/benchmarks/multi-turn-agent.d.ts.map +1 -0
  31. package/dist/benchmarks/multi-turn-agent.js +235 -0
  32. package/dist/benchmarks/multi-turn-agent.js.map +1 -0
  33. package/dist/benchmarks/runner.d.ts +2 -0
  34. package/dist/benchmarks/runner.d.ts.map +1 -0
  35. package/dist/benchmarks/runner.js +2 -0
  36. package/dist/benchmarks/runner.js.map +1 -0
  37. package/dist/benchmarks/tasks.d.ts +19 -0
  38. package/dist/benchmarks/tasks.d.ts.map +1 -0
  39. package/dist/benchmarks/tasks.js +371 -0
  40. package/dist/benchmarks/tasks.js.map +1 -0
  41. package/dist/index.d.ts +14 -0
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +11 -0
  44. package/dist/index.js.map +1 -1
  45. package/dist/memory/backends/qdrant-cloud.d.ts +1 -1
  46. package/dist/memory/backends/qdrant-cloud.d.ts.map +1 -1
  47. package/dist/memory/backends/qdrant-cloud.js +6 -4
  48. package/dist/memory/backends/qdrant-cloud.js.map +1 -1
  49. package/dist/memory/context-compressor.d.ts +66 -0
  50. package/dist/memory/context-compressor.d.ts.map +1 -0
  51. package/dist/memory/context-compressor.js +250 -0
  52. package/dist/memory/context-compressor.js.map +1 -0
  53. package/dist/memory/dynamic-retrieval.d.ts +26 -0
  54. package/dist/memory/dynamic-retrieval.d.ts.map +1 -0
  55. package/dist/memory/dynamic-retrieval.js +378 -0
  56. package/dist/memory/dynamic-retrieval.js.map +1 -0
  57. package/dist/memory/embeddings.d.ts +93 -0
  58. package/dist/memory/embeddings.d.ts.map +1 -0
  59. package/dist/memory/embeddings.js +391 -0
  60. package/dist/memory/embeddings.js.map +1 -0
  61. package/dist/memory/hierarchical-memory.d.ts +116 -0
  62. package/dist/memory/hierarchical-memory.d.ts.map +1 -0
  63. package/dist/memory/hierarchical-memory.js +299 -0
  64. package/dist/memory/hierarchical-memory.js.map +1 -0
  65. package/dist/memory/memory-consolidator.d.ts +88 -0
  66. package/dist/memory/memory-consolidator.d.ts.map +1 -0
  67. package/dist/memory/memory-consolidator.js +348 -0
  68. package/dist/memory/memory-consolidator.js.map +1 -0
  69. package/dist/memory/speculative-cache.d.ts +89 -0
  70. package/dist/memory/speculative-cache.d.ts.map +1 -0
  71. package/dist/memory/speculative-cache.js +259 -0
  72. package/dist/memory/speculative-cache.js.map +1 -0
  73. package/dist/memory/task-classifier.d.ts +33 -0
  74. package/dist/memory/task-classifier.d.ts.map +1 -0
  75. package/dist/memory/task-classifier.js +277 -0
  76. package/dist/memory/task-classifier.js.map +1 -0
  77. package/dist/utils/rate-limiter.d.ts +62 -0
  78. package/dist/utils/rate-limiter.d.ts.map +1 -0
  79. package/dist/utils/rate-limiter.js +150 -0
  80. package/dist/utils/rate-limiter.js.map +1 -0
  81. package/dist/utils/validate-json.d.ts +52 -0
  82. package/dist/utils/validate-json.d.ts.map +1 -0
  83. package/dist/utils/validate-json.js +99 -0
  84. package/dist/utils/validate-json.js.map +1 -0
  85. package/package.json +2 -1
@@ -0,0 +1,259 @@
1
+ /**
2
+ * Speculative Cache for UAM Memory System
3
+ *
4
+ * Pre-computes likely next queries based on task patterns.
5
+ * Reduces latency by predicting and caching memory retrievals.
6
+ */
7
+ const DEFAULT_CONFIG = {
8
+ maxEntries: 100,
9
+ ttlMs: 300000, // 5 minutes
10
+ preWarmEnabled: true,
11
+ predictionDepth: 3,
12
+ };
13
+ /**
14
+ * Query patterns for speculative prefetching
15
+ */
16
+ const QUERY_PATTERNS = {
17
+ 'sysadmin': [
18
+ 'linux commands', 'systemd services', 'network configuration',
19
+ 'docker containers', 'kernel modules', 'filesystem mounts',
20
+ ],
21
+ 'security': [
22
+ 'authentication patterns', 'secret management', 'vulnerability fixes',
23
+ 'input validation', 'encryption methods', 'access control',
24
+ ],
25
+ 'coding': [
26
+ 'design patterns', 'error handling', 'async patterns',
27
+ 'type definitions', 'refactoring', 'code review',
28
+ ],
29
+ 'testing': [
30
+ 'test patterns', 'mocking', 'assertions',
31
+ 'coverage', 'integration tests', 'edge cases',
32
+ ],
33
+ 'debugging': [
34
+ 'error messages', 'stack traces', 'dependency conflicts',
35
+ 'environment issues', 'git problems', 'build failures',
36
+ ],
37
+ 'ml-training': [
38
+ 'model training', 'dataset processing', 'hyperparameters',
39
+ 'embeddings', 'evaluation metrics', 'GPU optimization',
40
+ ],
41
+ };
42
+ /**
43
+ * Speculative Memory Cache
44
+ */
45
+ export class SpeculativeCache {
46
+ config;
47
+ cache = new Map();
48
+ queryHistory = [];
49
+ taskPatterns = new Map();
50
+ constructor(config = {}) {
51
+ this.config = { ...DEFAULT_CONFIG, ...config };
52
+ }
53
+ /**
54
+ * Get from cache with automatic staleness check
55
+ */
56
+ get(query) {
57
+ const normalizedQuery = this.normalizeQuery(query);
58
+ const entry = this.cache.get(normalizedQuery);
59
+ if (!entry)
60
+ return null;
61
+ // Check TTL
62
+ const age = Date.now() - entry.lastUsed.getTime();
63
+ if (age > this.config.ttlMs) {
64
+ this.cache.delete(normalizedQuery);
65
+ return null;
66
+ }
67
+ // Update usage stats
68
+ entry.usageCount++;
69
+ entry.lastUsed = new Date();
70
+ return entry;
71
+ }
72
+ /**
73
+ * Set cache entry
74
+ */
75
+ set(query, result, predictedBy) {
76
+ const normalizedQuery = this.normalizeQuery(query);
77
+ // Evict if at capacity
78
+ if (this.cache.size >= this.config.maxEntries) {
79
+ this.evictLRU();
80
+ }
81
+ this.cache.set(normalizedQuery, {
82
+ query: normalizedQuery,
83
+ result,
84
+ usageCount: 1,
85
+ lastUsed: new Date(),
86
+ createdAt: new Date(),
87
+ predictedBy,
88
+ });
89
+ // Track query pattern
90
+ this.recordQuery(query);
91
+ }
92
+ /**
93
+ * Record query for pattern analysis
94
+ */
95
+ recordQuery(query) {
96
+ this.queryHistory.push(query);
97
+ // Keep last 100 queries
98
+ if (this.queryHistory.length > 100) {
99
+ this.queryHistory.shift();
100
+ }
101
+ // Update task patterns
102
+ const category = this.detectCategory(query);
103
+ if (category) {
104
+ const count = this.taskPatterns.get(category) || 0;
105
+ this.taskPatterns.set(category, count + 1);
106
+ }
107
+ }
108
+ /**
109
+ * Detect task category from query
110
+ */
111
+ detectCategory(query) {
112
+ const queryLower = query.toLowerCase();
113
+ for (const [category, keywords] of Object.entries(QUERY_PATTERNS)) {
114
+ for (const keyword of keywords) {
115
+ if (queryLower.includes(keyword.toLowerCase())) {
116
+ return category;
117
+ }
118
+ }
119
+ }
120
+ return null;
121
+ }
122
+ /**
123
+ * Get predicted queries based on current context
124
+ */
125
+ getPredictedQueries(currentQuery) {
126
+ const predictions = [];
127
+ const category = this.detectCategory(currentQuery);
128
+ // Add category-specific predictions
129
+ if (category && QUERY_PATTERNS[category]) {
130
+ const categoryQueries = QUERY_PATTERNS[category];
131
+ predictions.push(...categoryQueries.slice(0, this.config.predictionDepth));
132
+ }
133
+ // Add patterns from history
134
+ const recentPatterns = this.analyzeQuerySequences();
135
+ predictions.push(...recentPatterns);
136
+ // Deduplicate and limit
137
+ return [...new Set(predictions)].slice(0, this.config.predictionDepth * 2);
138
+ }
139
+ /**
140
+ * Analyze query sequences for patterns
141
+ */
142
+ analyzeQuerySequences() {
143
+ const patterns = [];
144
+ if (this.queryHistory.length < 2)
145
+ return patterns;
146
+ // Look for common follow-up queries
147
+ const transitions = new Map();
148
+ for (let i = 0; i < this.queryHistory.length - 1; i++) {
149
+ const from = this.normalizeQuery(this.queryHistory[i]);
150
+ const to = this.normalizeQuery(this.queryHistory[i + 1]);
151
+ if (!transitions.has(from)) {
152
+ transitions.set(from, new Map());
153
+ }
154
+ const toCount = transitions.get(from).get(to) || 0;
155
+ transitions.get(from).set(to, toCount + 1);
156
+ }
157
+ // Find most common transitions
158
+ if (this.queryHistory.length > 0) {
159
+ const lastQuery = this.normalizeQuery(this.queryHistory[this.queryHistory.length - 1]);
160
+ const nextQueries = transitions.get(lastQuery);
161
+ if (nextQueries) {
162
+ const sorted = [...nextQueries.entries()].sort((a, b) => b[1] - a[1]);
163
+ patterns.push(...sorted.slice(0, 3).map(([query]) => query));
164
+ }
165
+ }
166
+ return patterns;
167
+ }
168
+ /**
169
+ * Pre-warm cache with predicted queries
170
+ */
171
+ async preWarm(currentQuery, fetcher) {
172
+ if (!this.config.preWarmEnabled)
173
+ return;
174
+ const predictions = this.getPredictedQueries(currentQuery);
175
+ // Fetch in parallel
176
+ await Promise.all(predictions.map(async (query) => {
177
+ if (!this.cache.has(this.normalizeQuery(query))) {
178
+ try {
179
+ const result = await fetcher(query);
180
+ this.set(query, result, currentQuery);
181
+ }
182
+ catch {
183
+ // Ignore prefetch failures
184
+ }
185
+ }
186
+ }));
187
+ }
188
+ /**
189
+ * Evict least recently used entry
190
+ */
191
+ evictLRU() {
192
+ let oldest = null;
193
+ for (const [key, entry] of this.cache) {
194
+ const time = entry.lastUsed.getTime();
195
+ if (!oldest || time < oldest.time) {
196
+ oldest = { key, time };
197
+ }
198
+ }
199
+ if (oldest) {
200
+ this.cache.delete(oldest.key);
201
+ }
202
+ }
203
+ /**
204
+ * Normalize query for cache key
205
+ */
206
+ normalizeQuery(query) {
207
+ return query.toLowerCase().trim().replace(/\s+/g, ' ');
208
+ }
209
+ /**
210
+ * Get cache statistics
211
+ */
212
+ getStats() {
213
+ const entries = [...this.cache.values()];
214
+ const totalUsage = entries.reduce((sum, e) => sum + e.usageCount, 0);
215
+ const hits = entries.filter(e => e.usageCount > 1).length;
216
+ const topPatterns = [...this.taskPatterns.entries()]
217
+ .sort((a, b) => b[1] - a[1])
218
+ .slice(0, 5)
219
+ .map(([category, count]) => ({ category, count }));
220
+ return {
221
+ size: this.cache.size,
222
+ hitRate: entries.length > 0 ? hits / entries.length : 0,
223
+ avgUsage: entries.length > 0 ? totalUsage / entries.length : 0,
224
+ topPatterns,
225
+ };
226
+ }
227
+ /**
228
+ * Clear expired entries
229
+ */
230
+ cleanup() {
231
+ const now = Date.now();
232
+ let removed = 0;
233
+ for (const [key, entry] of this.cache) {
234
+ const age = now - entry.lastUsed.getTime();
235
+ if (age > this.config.ttlMs) {
236
+ this.cache.delete(key);
237
+ removed++;
238
+ }
239
+ }
240
+ return removed;
241
+ }
242
+ /**
243
+ * Clear all cache
244
+ */
245
+ clear() {
246
+ this.cache.clear();
247
+ this.queryHistory = [];
248
+ this.taskPatterns.clear();
249
+ }
250
+ }
251
+ // Singleton instance
252
+ let globalCache = null;
253
+ export function getSpeculativeCache(config) {
254
+ if (!globalCache) {
255
+ globalCache = new SpeculativeCache(config);
256
+ }
257
+ return globalCache;
258
+ }
259
+ //# sourceMappingURL=speculative-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"speculative-cache.js","sourceRoot":"","sources":["../../src/memory/speculative-cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Task Classification System for UAM
3
+ *
4
+ * Classifies tasks into categories and routes to appropriate droids/memory.
5
+ * Based on Terminal-Bench 2.0 task categories and Droid's routing strategies.
6
+ */
7
+ export type TaskCategory = 'sysadmin' | 'security' | 'ml-training' | 'debugging' | 'coding' | 'file-ops' | 'testing' | 'unknown';
8
+ export interface TaskClassification {
9
+ category: TaskCategory;
10
+ confidence: number;
11
+ keywords: string[];
12
+ suggestedDroid: string;
13
+ memoryQueryHints: string[];
14
+ requiredCapabilities: string[];
15
+ }
16
+ /**
17
+ * Classify a task based on its instruction/prompt
18
+ */
19
+ export declare function classifyTask(instruction: string): TaskClassification;
20
+ /**
21
+ * Extract entities from task instruction for memory queries
22
+ */
23
+ export declare function extractTaskEntities(instruction: string): {
24
+ technologies: string[];
25
+ operations: string[];
26
+ files: string[];
27
+ concepts: string[];
28
+ };
29
+ /**
30
+ * Get suggested memory queries based on task classification
31
+ */
32
+ export declare function getSuggestedMemoryQueries(classification: TaskClassification): string[];
33
+ //# sourceMappingURL=task-classifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-classifier.d.ts","sourceRoot":"","sources":["../../src/memory/task-classifier.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,YAAY,GACpB,UAAU,GACV,UAAU,GACV,aAAa,GACb,WAAW,GACX,QAAQ,GACR,UAAU,GACV,SAAS,GACT,SAAS,CAAC;AAEd,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,YAAY,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,oBAAoB,EAAE,MAAM,EAAE,CAAC;CAChC;AAkHD;;GAEG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,kBAAkB,CAuDpE;AAuCD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG;IACxD,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAoEA;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,cAAc,EAAE,kBAAkB,GAAG,MAAM,EAAE,CAoBtF"}
@@ -0,0 +1,277 @@
1
+ /**
2
+ * Task Classification System for UAM
3
+ *
4
+ * Classifies tasks into categories and routes to appropriate droids/memory.
5
+ * Based on Terminal-Bench 2.0 task categories and Droid's routing strategies.
6
+ */
7
+ const CATEGORY_PATTERNS = [
8
+ {
9
+ category: 'sysadmin',
10
+ patterns: [
11
+ /kernel|linux|qemu|kvm|virtualization/i,
12
+ /systemd|systemctl|journalctl|service/i,
13
+ /network|dns|firewall|iptables|nftables/i,
14
+ /cron|crontab|scheduling|daemon/i,
15
+ /mount|filesystem|partition|lvm|fdisk/i,
16
+ /docker|container|kubernetes|k8s/i,
17
+ /nginx|apache|web server|reverse proxy/i,
18
+ /ssh|scp|rsync|remote/i,
19
+ ],
20
+ keywords: ['kernel', 'qemu', 'systemd', 'network', 'dns', 'cron', 'docker', 'mount', 'ssh'],
21
+ droid: 'sysadmin-expert',
22
+ capabilities: ['shell', 'root', 'networking', 'services'],
23
+ },
24
+ {
25
+ category: 'security',
26
+ patterns: [
27
+ /cve-?\d{4}-?\d+/i,
28
+ /exploit|vulnerability|attack|injection/i,
29
+ /secret|password|credential|token|api.?key/i,
30
+ /hash|crack|bcrypt|sha|md5/i,
31
+ /ssl|tls|certificate|x509/i,
32
+ /encrypt|decrypt|cipher|aes/i,
33
+ /auth|oauth|jwt|session/i,
34
+ /sanitize|escape|xss|csrf|sqli/i,
35
+ ],
36
+ keywords: ['CVE', 'exploit', 'secret', 'hash', 'certificate', 'encrypt', 'authentication'],
37
+ droid: 'security-auditor',
38
+ capabilities: ['security', 'cryptography', 'vulnerability-analysis'],
39
+ },
40
+ {
41
+ category: 'ml-training',
42
+ patterns: [
43
+ /train|training|model|neural|deep learning/i,
44
+ /pytorch|tensorflow|keras|transformers/i,
45
+ /dataset|dataloader|batch|epoch/i,
46
+ /mteb|embedding|sentence.?transformer/i,
47
+ /classifier|classification|regression/i,
48
+ /reinforcement|rl|reward|agent|gym/i,
49
+ /gpu|cuda|nvidia|tensor/i,
50
+ /hugging.?face|tokenizer|bert|gpt/i,
51
+ ],
52
+ keywords: ['train', 'model', 'pytorch', 'dataset', 'embedding', 'classifier', 'GPU'],
53
+ droid: 'ml-training-expert',
54
+ capabilities: ['python', 'ml-frameworks', 'gpu', 'data-processing'],
55
+ },
56
+ {
57
+ category: 'debugging',
58
+ patterns: [
59
+ /debug|fix|broken|error|exception/i,
60
+ /conda|pip|dependency|conflict|version/i,
61
+ /git|merge|rebase|conflict|reflog/i,
62
+ /stack.?trace|traceback|crash/i,
63
+ /memory.?leak|segfault|core.?dump/i,
64
+ /log|logging|diagnose|troubleshoot/i,
65
+ ],
66
+ keywords: ['debug', 'fix', 'error', 'conda', 'pip', 'git', 'conflict', 'crash'],
67
+ droid: 'debug-expert',
68
+ capabilities: ['debugging', 'profiling', 'version-management'],
69
+ },
70
+ {
71
+ category: 'coding',
72
+ patterns: [
73
+ /implement|function|class|method|algorithm/i,
74
+ /refactor|optimize|improve|clean/i,
75
+ /api|endpoint|rest|graphql|server/i,
76
+ /typescript|javascript|python|rust|go/i,
77
+ /singleton|factory|strategy|pattern/i,
78
+ /async|await|promise|callback/i,
79
+ ],
80
+ keywords: ['implement', 'function', 'class', 'refactor', 'API', 'algorithm', 'pattern'],
81
+ droid: 'code-quality-guardian',
82
+ capabilities: ['coding', 'design-patterns', 'apis'],
83
+ },
84
+ {
85
+ category: 'file-ops',
86
+ patterns: [
87
+ /archive|zip|tar|extract|compress/i,
88
+ /download|fetch|curl|wget/i,
89
+ /convert|transform|parse|format/i,
90
+ /csv|json|xml|yaml|parquet/i,
91
+ /file|directory|path|copy|move/i,
92
+ ],
93
+ keywords: ['archive', 'download', 'convert', 'file', 'extract'],
94
+ droid: 'terminal-bench-optimizer',
95
+ capabilities: ['file-operations', 'data-formats'],
96
+ },
97
+ {
98
+ category: 'testing',
99
+ patterns: [
100
+ /test|spec|unit|integration|e2e/i,
101
+ /vitest|jest|pytest|mocha|cypress/i,
102
+ /coverage|assertion|mock|stub|spy/i,
103
+ /tdd|bdd|test.?driven/i,
104
+ ],
105
+ keywords: ['test', 'spec', 'coverage', 'mock', 'assertion'],
106
+ droid: 'code-quality-guardian',
107
+ capabilities: ['testing', 'test-frameworks', 'coverage'],
108
+ },
109
+ ];
110
+ /**
111
+ * Classify a task based on its instruction/prompt
112
+ */
113
+ export function classifyTask(instruction) {
114
+ const normalizedInstruction = instruction.toLowerCase();
115
+ const scores = new Map();
116
+ const matchedKeywords = new Map();
117
+ // Score each category based on pattern matches
118
+ for (const categoryPattern of CATEGORY_PATTERNS) {
119
+ let score = 0;
120
+ const keywords = [];
121
+ // Check regex patterns
122
+ for (const pattern of categoryPattern.patterns) {
123
+ if (pattern.test(instruction)) {
124
+ score += 2;
125
+ }
126
+ }
127
+ // Check keywords
128
+ for (const keyword of categoryPattern.keywords) {
129
+ if (normalizedInstruction.includes(keyword.toLowerCase())) {
130
+ score += 1;
131
+ keywords.push(keyword);
132
+ }
133
+ }
134
+ scores.set(categoryPattern.category, score);
135
+ matchedKeywords.set(categoryPattern.category, keywords);
136
+ }
137
+ // Find best match
138
+ let bestCategory = 'unknown';
139
+ let bestScore = 0;
140
+ for (const [category, score] of scores) {
141
+ if (score > bestScore) {
142
+ bestScore = score;
143
+ bestCategory = category;
144
+ }
145
+ }
146
+ // Calculate confidence (0-1)
147
+ const maxPossibleScore = 20; // Rough estimate
148
+ const confidence = Math.min(bestScore / maxPossibleScore, 1);
149
+ // Get pattern config for best category
150
+ const patternConfig = CATEGORY_PATTERNS.find(p => p.category === bestCategory);
151
+ return {
152
+ category: bestCategory,
153
+ confidence,
154
+ keywords: matchedKeywords.get(bestCategory) || [],
155
+ suggestedDroid: patternConfig?.droid || 'terminal-bench-optimizer',
156
+ memoryQueryHints: generateMemoryQueryHints(bestCategory, matchedKeywords.get(bestCategory) || []),
157
+ requiredCapabilities: patternConfig?.capabilities || [],
158
+ };
159
+ }
160
+ /**
161
+ * Generate memory query hints based on task classification
162
+ */
163
+ function generateMemoryQueryHints(category, keywords) {
164
+ const hints = [];
165
+ // Add category-specific hints
166
+ switch (category) {
167
+ case 'sysadmin':
168
+ hints.push('linux administration', 'system configuration', 'service management');
169
+ break;
170
+ case 'security':
171
+ hints.push('security vulnerability', 'secret management', 'authentication');
172
+ break;
173
+ case 'ml-training':
174
+ hints.push('model training', 'dataset processing', 'machine learning');
175
+ break;
176
+ case 'debugging':
177
+ hints.push('error fixing', 'dependency resolution', 'debugging techniques');
178
+ break;
179
+ case 'coding':
180
+ hints.push('code implementation', 'design patterns', 'best practices');
181
+ break;
182
+ case 'file-ops':
183
+ hints.push('file operations', 'data conversion', 'archive handling');
184
+ break;
185
+ case 'testing':
186
+ hints.push('unit testing', 'test coverage', 'test patterns');
187
+ break;
188
+ }
189
+ // Add keyword-based hints
190
+ hints.push(...keywords.slice(0, 3));
191
+ return hints;
192
+ }
193
+ /**
194
+ * Extract entities from task instruction for memory queries
195
+ */
196
+ export function extractTaskEntities(instruction) {
197
+ const technologies = [];
198
+ const operations = [];
199
+ const files = [];
200
+ const concepts = [];
201
+ // Technology patterns
202
+ const techPatterns = [
203
+ /python|typescript|javascript|rust|go|java|c\+\+/gi,
204
+ /pytorch|tensorflow|keras|transformers/gi,
205
+ /docker|kubernetes|nginx|apache/gi,
206
+ /postgres|mysql|mongodb|redis/gi,
207
+ /react|vue|angular|next\.js/gi,
208
+ /git|npm|pip|conda|cargo/gi,
209
+ ];
210
+ for (const pattern of techPatterns) {
211
+ const matches = instruction.match(pattern);
212
+ if (matches) {
213
+ technologies.push(...matches.map(m => m.toLowerCase()));
214
+ }
215
+ }
216
+ // Operation patterns
217
+ const opPatterns = [
218
+ /\b(create|build|implement|configure|setup|install)\b/gi,
219
+ /\b(fix|debug|repair|resolve|troubleshoot)\b/gi,
220
+ /\b(test|verify|validate|check|ensure)\b/gi,
221
+ /\b(deploy|publish|release|ship)\b/gi,
222
+ /\b(refactor|optimize|improve|clean)\b/gi,
223
+ ];
224
+ for (const pattern of opPatterns) {
225
+ const matches = instruction.match(pattern);
226
+ if (matches) {
227
+ operations.push(...matches.map(m => m.toLowerCase()));
228
+ }
229
+ }
230
+ // File path patterns
231
+ const filePattern = /(?:\/[\w.-]+)+(?:\.\w+)?|[\w.-]+\.(ts|js|py|json|yaml|yml|md|txt|sh)/gi;
232
+ const fileMatches = instruction.match(filePattern);
233
+ if (fileMatches) {
234
+ files.push(...fileMatches);
235
+ }
236
+ // Concept patterns
237
+ const conceptPatterns = [
238
+ /\b(authentication|authorization|security)\b/gi,
239
+ /\b(caching|performance|optimization)\b/gi,
240
+ /\b(api|endpoint|service|microservice)\b/gi,
241
+ /\b(database|storage|persistence)\b/gi,
242
+ /\b(testing|coverage|quality)\b/gi,
243
+ ];
244
+ for (const pattern of conceptPatterns) {
245
+ const matches = instruction.match(pattern);
246
+ if (matches) {
247
+ concepts.push(...matches.map(m => m.toLowerCase()));
248
+ }
249
+ }
250
+ return {
251
+ technologies: [...new Set(technologies)],
252
+ operations: [...new Set(operations)],
253
+ files: [...new Set(files)],
254
+ concepts: [...new Set(concepts)],
255
+ };
256
+ }
257
+ /**
258
+ * Get suggested memory queries based on task classification
259
+ */
260
+ export function getSuggestedMemoryQueries(classification) {
261
+ const queries = [];
262
+ // Category-based queries
263
+ queries.push(`${classification.category} best practices`);
264
+ queries.push(`${classification.category} common mistakes`);
265
+ queries.push(`${classification.category} patterns`);
266
+ // Keyword-based queries
267
+ for (const keyword of classification.keywords.slice(0, 3)) {
268
+ queries.push(`${keyword} implementation`);
269
+ queries.push(`${keyword} gotchas`);
270
+ }
271
+ // Capability-based queries
272
+ for (const capability of classification.requiredCapabilities.slice(0, 2)) {
273
+ queries.push(`${capability} tips`);
274
+ }
275
+ return queries;
276
+ }
277
+ //# sourceMappingURL=task-classifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-classifier.js","sourceRoot":"","sources":["../../src/memory/task-classifier.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA6BH,MAAM,iBAAiB,GAAsB;IAC3C;QACE,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE;YACR,uCAAuC;YACvC,uCAAuC;YACvC,yCAAyC;YACzC,iCAAiC;YACjC,uCAAuC;YACvC,kCAAkC;YAClC,wCAAwC;YACxC,uBAAuB;SACxB;QACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC;QAC3F,KAAK,EAAE,iBAAiB;QACxB,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,CAAC;KAC1D;IACD;QACE,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE;YACR,kBAAkB;YAClB,yCAAyC;YACzC,4CAA4C;YAC5C,4BAA4B;YAC5B,2BAA2B;YAC3B,6BAA6B;YAC7B,yBAAyB;YACzB,gCAAgC;SACjC;QACD,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,gBAAgB,CAAC;QAC1F,KAAK,EAAE,kBAAkB;QACzB,YAAY,EAAE,CAAC,UAAU,EAAE,cAAc,EAAE,wBAAwB,CAAC;KACrE;IACD;QACE,QAAQ,EAAE,aAAa;QACvB,QAAQ,EAAE;YACR,4CAA4C;YAC5C,wCAAwC;YACxC,iCAAiC;YACjC,uCAAuC;YACvC,uCAAuC;YACvC,oCAAoC;YACpC,yBAAyB;YACzB,mCAAmC;SACpC;QACD,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,CAAC;QACpF,KAAK,EAAE,oBAAoB;QAC3B,YAAY,EAAE,CAAC,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE,iBAAiB,CAAC;KACpE;IACD;QACE,QAAQ,EAAE,WAAW;QACrB,QAAQ,EAAE;YACR,mCAAmC;YACnC,wCAAwC;YACxC,mCAAmC;YACnC,+BAA+B;YAC/B,mCAAmC;YACnC,oCAAoC;SACrC;QACD,QAAQ,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC;QAC/E,KAAK,EAAE,cAAc;QACrB,YAAY,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,oBAAoB,CAAC;KAC/D;IACD;QACE,QAAQ,EAAE,QAAQ;QAClB,QAAQ,EAAE;YACR,4CAA4C;YAC5C,kCAAkC;YAClC,mCAAmC;YACnC,uCAAuC;YACvC,qCAAqC;YACrC,+BAA+B;SAChC;QACD,QAAQ,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,CAAC;QACvF,KAAK,EAAE,uBAAuB;QAC9B,YAAY,EAAE,CAAC,QAAQ,EAAE,iBAAiB,EAAE,MAAM,CAAC;KACpD;IACD;QACE,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE;YACR,mCAAmC;YACnC,2BAA2B;YAC3B,iCAAiC;YACjC,4BAA4B;YAC5B,gCAAgC;SACjC;QACD,QAAQ,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC;QAC/D,KAAK,EAAE,0BAA0B;QACjC,YAAY,EAAE,CAAC,iBAAiB,EAAE,cAAc,CAAC;KAClD;IACD;QACE,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE;YACR,iCAAiC;YACjC,mCAAmC;YACnC,mCAAmC;YACnC,uBAAuB;SACxB;QACD,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,CAAC;QAC3D,KAAK,EAAE,uBAAuB;QAC9B,YAAY,EAAE,CAAC,SAAS,EAAE,iBAAiB,EAAE,UAAU,CAAC;KACzD;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,WAAmB;IAC9C,MAAM,qBAAqB,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;IACxD,MAAM,MAAM,GAA8B,IAAI,GAAG,EAAE,CAAC;IACpD,MAAM,eAAe,GAAgC,IAAI,GAAG,EAAE,CAAC;IAE/D,+CAA+C;IAC/C,KAAK,MAAM,eAAe,IAAI,iBAAiB,EAAE,CAAC;QAChD,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,uBAAuB;QACvB,KAAK,MAAM,OAAO,IAAI,eAAe,CAAC,QAAQ,EAAE,CAAC;YAC/C,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC9B,KAAK,IAAI,CAAC,CAAC;YACb,CAAC;QACH,CAAC;QAED,iBAAiB;QACjB,KAAK,MAAM,OAAO,IAAI,eAAe,CAAC,QAAQ,EAAE,CAAC;YAC/C,IAAI,qBAAqB,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;gBAC1D,KAAK,IAAI,CAAC,CAAC;gBACX,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QAED,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC5C,eAAe,CAAC,GAAG,CAAC,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC1D,CAAC;IAED,kBAAkB;IAClB,IAAI,YAAY,GAAiB,SAAS,CAAC;IAC3C,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;QACvC,IAAI,KAAK,GAAG,SAAS,EAAE,CAAC;YACtB,SAAS,GAAG,KAAK,CAAC;YAClB,YAAY,GAAG,QAAQ,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,6BAA6B;IAC7B,MAAM,gBAAgB,GAAG,EAAE,CAAC,CAAC,iBAAiB;IAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,gBAAgB,EAAE,CAAC,CAAC,CAAC;IAE7D,uCAAuC;IACvC,MAAM,aAAa,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC;IAE/E,OAAO;QACL,QAAQ,EAAE,YAAY;QACtB,UAAU;QACV,QAAQ,EAAE,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE;QACjD,cAAc,EAAE,aAAa,EAAE,KAAK,IAAI,0BAA0B;QAClE,gBAAgB,EAAE,wBAAwB,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;QACjG,oBAAoB,EAAE,aAAa,EAAE,YAAY,IAAI,EAAE;KACxD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,wBAAwB,CAAC,QAAsB,EAAE,QAAkB;IAC1E,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,8BAA8B;IAC9B,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,UAAU;YACb,KAAK,CAAC,IAAI,CAAC,sBAAsB,EAAE,sBAAsB,EAAE,oBAAoB,CAAC,CAAC;YACjF,MAAM;QACR,KAAK,UAAU;YACb,KAAK,CAAC,IAAI,CAAC,wBAAwB,EAAE,mBAAmB,EAAE,gBAAgB,CAAC,CAAC;YAC5E,MAAM;QACR,KAAK,aAAa;YAChB,KAAK,CAAC,IAAI,CAAC,gBAAgB,EAAE,oBAAoB,EAAE,kBAAkB,CAAC,CAAC;YACvE,MAAM;QACR,KAAK,WAAW;YACd,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,uBAAuB,EAAE,sBAAsB,CAAC,CAAC;YAC5E,MAAM;QACR,KAAK,QAAQ;YACX,KAAK,CAAC,IAAI,CAAC,qBAAqB,EAAE,iBAAiB,EAAE,gBAAgB,CAAC,CAAC;YACvE,MAAM;QACR,KAAK,UAAU;YACb,KAAK,CAAC,IAAI,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,kBAAkB,CAAC,CAAC;YACrE,MAAM;QACR,KAAK,SAAS;YACZ,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,eAAe,EAAE,eAAe,CAAC,CAAC;YAC7D,MAAM;IACV,CAAC;IAED,0BAA0B;IAC1B,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAEpC,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAmB;IAMrD,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,sBAAsB;IACtB,MAAM,YAAY,GAAG;QACnB,mDAAmD;QACnD,yCAAyC;QACzC,kCAAkC;QAClC,gCAAgC;QAChC,8BAA8B;QAC9B,2BAA2B;KAC5B,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,OAAO,EAAE,CAAC;YACZ,YAAY,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAED,qBAAqB;IACrB,MAAM,UAAU,GAAG;QACjB,wDAAwD;QACxD,+CAA+C;QAC/C,2CAA2C;QAC3C,qCAAqC;QACrC,yCAAyC;KAC1C,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,UAAU,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,OAAO,EAAE,CAAC;YACZ,UAAU,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED,qBAAqB;IACrB,MAAM,WAAW,GAAG,wEAAwE,CAAC;IAC7F,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACnD,IAAI,WAAW,EAAE,CAAC;QAChB,KAAK,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;IAC7B,CAAC;IAED,mBAAmB;IACnB,MAAM,eAAe,GAAG;QACtB,+CAA+C;QAC/C,0CAA0C;QAC1C,2CAA2C;QAC3C,sCAAsC;QACtC,kCAAkC;KACnC,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;QACtC,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,OAAO,EAAE,CAAC;YACZ,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED,OAAO;QACL,YAAY,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;QACxC,UAAU,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;QACpC,KAAK,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QAC1B,QAAQ,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;KACjC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,cAAkC;IAC1E,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,yBAAyB;IACzB,OAAO,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,QAAQ,iBAAiB,CAAC,CAAC;IAC1D,OAAO,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,QAAQ,kBAAkB,CAAC,CAAC;IAC3D,OAAO,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,QAAQ,WAAW,CAAC,CAAC;IAEpD,wBAAwB;IACxB,KAAK,MAAM,OAAO,IAAI,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QAC1D,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,iBAAiB,CAAC,CAAC;QAC1C,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,UAAU,CAAC,CAAC;IACrC,CAAC;IAED,2BAA2B;IAC3B,KAAK,MAAM,UAAU,IAAI,cAAc,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACzE,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,OAAO,CAAC,CAAC;IACrC,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Configuration options for the RateLimiter.
3
+ */
4
+ export interface RateLimiterConfig {
5
+ maxRequests: number;
6
+ windowMs: number;
7
+ }
8
+ export declare class RateLimiter {
9
+ private static readonly configSchema;
10
+ private static readonly clientIdSchema;
11
+ private readonly maxRequests;
12
+ private readonly windowMs;
13
+ private readonly requests;
14
+ /**
15
+ * Creates a new RateLimiter instance.
16
+ *
17
+ * @param config - Configuration for request limits and window size
18
+ * @returns A configured RateLimiter instance
19
+ * @throws AppError when config is invalid
20
+ */
21
+ constructor(config: RateLimiterConfig);
22
+ /**
23
+ * Checks if a request from the given client is allowed and records it if so.
24
+ *
25
+ * @param clientId - Identifier for the calling client
26
+ * @returns True if the request is allowed; otherwise false
27
+ * @throws AppError when clientId is invalid
28
+ */
29
+ isAllowed(clientId: string): boolean;
30
+ /**
31
+ * Returns the remaining number of requests for a client in the current window.
32
+ *
33
+ * @param clientId - Identifier for the calling client
34
+ * @returns Remaining number of requests in the window
35
+ * @throws AppError when clientId is invalid
36
+ */
37
+ getRemainingRequests(clientId: string): number;
38
+ /**
39
+ * Resets rate limiting for a single client or all clients.
40
+ *
41
+ * @param clientId - Optional client identifier to reset; omit to reset all
42
+ * @returns Nothing
43
+ */
44
+ reset(clientId?: string): void;
45
+ /**
46
+ * Removes expired timestamps and deletes empty client entries.
47
+ *
48
+ * @param now - Current timestamp used as reference
49
+ * @param clientId - Optional client identifier to scope cleanup
50
+ * @returns Nothing
51
+ */
52
+ private cleanupExpiredEntries;
53
+ /**
54
+ * Ensures the client identifier is valid.
55
+ *
56
+ * @param clientId - Identifier to validate
57
+ * @returns Nothing
58
+ * @throws AppError when clientId is invalid
59
+ */
60
+ private ensureValidClientId;
61
+ }
62
+ //# sourceMappingURL=rate-limiter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limiter.d.ts","sourceRoot":"","sources":["../../src/utils/rate-limiter.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AASD,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAejC;IAEH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAKE;IAExC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoC;IAE7D;;;;;;OAMG;gBACS,MAAM,EAAE,iBAAiB;IAcrC;;;;;;OAMG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAgBpC;;;;;;OAMG;IACH,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAc9C;;;;;OAKG;IACH,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAU9B;;;;;;OAMG;IACH,OAAO,CAAC,qBAAqB;IAoC7B;;;;;;OAMG;IACH,OAAO,CAAC,mBAAmB;CAU5B"}