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.
- package/dist/benchmarks/agents/naive-agent.d.ts +60 -0
- package/dist/benchmarks/agents/naive-agent.d.ts.map +1 -0
- package/dist/benchmarks/agents/naive-agent.js +144 -0
- package/dist/benchmarks/agents/naive-agent.js.map +1 -0
- package/dist/benchmarks/agents/uam-agent.d.ts +167 -0
- package/dist/benchmarks/agents/uam-agent.d.ts.map +1 -0
- package/dist/benchmarks/agents/uam-agent.js +386 -0
- package/dist/benchmarks/agents/uam-agent.js.map +1 -0
- package/dist/benchmarks/benchmark.d.ts +328 -0
- package/dist/benchmarks/benchmark.d.ts.map +1 -0
- package/dist/benchmarks/benchmark.js +104 -0
- package/dist/benchmarks/benchmark.js.map +1 -0
- package/dist/benchmarks/execution-verifier.d.ts +41 -0
- package/dist/benchmarks/execution-verifier.d.ts.map +1 -0
- package/dist/benchmarks/execution-verifier.js +342 -0
- package/dist/benchmarks/execution-verifier.js.map +1 -0
- package/dist/benchmarks/hierarchical-prompting.d.ts +37 -0
- package/dist/benchmarks/hierarchical-prompting.d.ts.map +1 -0
- package/dist/benchmarks/hierarchical-prompting.js +260 -0
- package/dist/benchmarks/hierarchical-prompting.js.map +1 -0
- package/dist/benchmarks/improved-benchmark.d.ts +88 -0
- package/dist/benchmarks/improved-benchmark.d.ts.map +1 -0
- package/dist/benchmarks/improved-benchmark.js +533 -0
- package/dist/benchmarks/improved-benchmark.js.map +1 -0
- package/dist/benchmarks/index.d.ts +10 -0
- package/dist/benchmarks/index.d.ts.map +1 -0
- package/dist/benchmarks/index.js +10 -0
- package/dist/benchmarks/index.js.map +1 -0
- package/dist/benchmarks/multi-turn-agent.d.ts +44 -0
- package/dist/benchmarks/multi-turn-agent.d.ts.map +1 -0
- package/dist/benchmarks/multi-turn-agent.js +235 -0
- package/dist/benchmarks/multi-turn-agent.js.map +1 -0
- package/dist/benchmarks/runner.d.ts +2 -0
- package/dist/benchmarks/runner.d.ts.map +1 -0
- package/dist/benchmarks/runner.js +2 -0
- package/dist/benchmarks/runner.js.map +1 -0
- package/dist/benchmarks/tasks.d.ts +19 -0
- package/dist/benchmarks/tasks.d.ts.map +1 -0
- package/dist/benchmarks/tasks.js +371 -0
- package/dist/benchmarks/tasks.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -1
- package/dist/memory/backends/qdrant-cloud.d.ts +1 -1
- package/dist/memory/backends/qdrant-cloud.d.ts.map +1 -1
- package/dist/memory/backends/qdrant-cloud.js +6 -4
- package/dist/memory/backends/qdrant-cloud.js.map +1 -1
- package/dist/memory/context-compressor.d.ts +66 -0
- package/dist/memory/context-compressor.d.ts.map +1 -0
- package/dist/memory/context-compressor.js +250 -0
- package/dist/memory/context-compressor.js.map +1 -0
- package/dist/memory/dynamic-retrieval.d.ts +26 -0
- package/dist/memory/dynamic-retrieval.d.ts.map +1 -0
- package/dist/memory/dynamic-retrieval.js +378 -0
- package/dist/memory/dynamic-retrieval.js.map +1 -0
- package/dist/memory/embeddings.d.ts +93 -0
- package/dist/memory/embeddings.d.ts.map +1 -0
- package/dist/memory/embeddings.js +391 -0
- package/dist/memory/embeddings.js.map +1 -0
- package/dist/memory/hierarchical-memory.d.ts +116 -0
- package/dist/memory/hierarchical-memory.d.ts.map +1 -0
- package/dist/memory/hierarchical-memory.js +299 -0
- package/dist/memory/hierarchical-memory.js.map +1 -0
- package/dist/memory/memory-consolidator.d.ts +88 -0
- package/dist/memory/memory-consolidator.d.ts.map +1 -0
- package/dist/memory/memory-consolidator.js +348 -0
- package/dist/memory/memory-consolidator.js.map +1 -0
- package/dist/memory/speculative-cache.d.ts +89 -0
- package/dist/memory/speculative-cache.d.ts.map +1 -0
- package/dist/memory/speculative-cache.js +259 -0
- package/dist/memory/speculative-cache.js.map +1 -0
- package/dist/memory/task-classifier.d.ts +33 -0
- package/dist/memory/task-classifier.d.ts.map +1 -0
- package/dist/memory/task-classifier.js +277 -0
- package/dist/memory/task-classifier.js.map +1 -0
- package/dist/utils/rate-limiter.d.ts +62 -0
- package/dist/utils/rate-limiter.d.ts.map +1 -0
- package/dist/utils/rate-limiter.js +150 -0
- package/dist/utils/rate-limiter.js.map +1 -0
- package/dist/utils/validate-json.d.ts +52 -0
- package/dist/utils/validate-json.d.ts.map +1 -0
- package/dist/utils/validate-json.js +99 -0
- package/dist/utils/validate-json.js.map +1 -0
- 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"}
|