universal-agent-memory 0.6.2 → 0.6.3
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 +301 -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 +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -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/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 +82 -0
- package/dist/memory/embeddings.d.ts.map +1 -0
- package/dist/memory/embeddings.js +297 -0
- package/dist/memory/embeddings.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,297 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Embedding Service for UAM Memory System
|
|
3
|
+
*
|
|
4
|
+
* Provides text embedding generation for semantic memory retrieval.
|
|
5
|
+
* Supports multiple backends: OpenAI, local transformers, or simple TF-IDF fallback.
|
|
6
|
+
*/
|
|
7
|
+
import { execSync } from 'child_process';
|
|
8
|
+
/**
|
|
9
|
+
* OpenAI Embeddings Provider
|
|
10
|
+
* Uses text-embedding-3-small (1536 dimensions) or text-embedding-ada-002
|
|
11
|
+
*/
|
|
12
|
+
export class OpenAIEmbeddingProvider {
|
|
13
|
+
name = 'openai';
|
|
14
|
+
dimensions = 1536;
|
|
15
|
+
apiKey;
|
|
16
|
+
model;
|
|
17
|
+
constructor(apiKey, model = 'text-embedding-3-small') {
|
|
18
|
+
this.apiKey = apiKey || process.env.OPENAI_API_KEY || '';
|
|
19
|
+
this.model = model;
|
|
20
|
+
}
|
|
21
|
+
async isAvailable() {
|
|
22
|
+
return !!this.apiKey;
|
|
23
|
+
}
|
|
24
|
+
async embed(text) {
|
|
25
|
+
const results = await this.embedBatch([text]);
|
|
26
|
+
return results[0];
|
|
27
|
+
}
|
|
28
|
+
async embedBatch(texts) {
|
|
29
|
+
if (!this.apiKey) {
|
|
30
|
+
throw new Error('OpenAI API key not configured');
|
|
31
|
+
}
|
|
32
|
+
const response = await fetch('https://api.openai.com/v1/embeddings', {
|
|
33
|
+
method: 'POST',
|
|
34
|
+
headers: {
|
|
35
|
+
'Authorization': `Bearer ${this.apiKey}`,
|
|
36
|
+
'Content-Type': 'application/json',
|
|
37
|
+
},
|
|
38
|
+
body: JSON.stringify({
|
|
39
|
+
model: this.model,
|
|
40
|
+
input: texts,
|
|
41
|
+
}),
|
|
42
|
+
});
|
|
43
|
+
if (!response.ok) {
|
|
44
|
+
throw new Error(`OpenAI API error: ${response.status} ${response.statusText}`);
|
|
45
|
+
}
|
|
46
|
+
const data = await response.json();
|
|
47
|
+
return data.data.map(d => d.embedding);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Local Sentence Transformers Provider
|
|
52
|
+
* Uses Python sentence-transformers library for local embedding generation
|
|
53
|
+
*/
|
|
54
|
+
export class LocalEmbeddingProvider {
|
|
55
|
+
name = 'local';
|
|
56
|
+
dimensions = 384;
|
|
57
|
+
model;
|
|
58
|
+
pythonPath;
|
|
59
|
+
constructor(model = 'all-MiniLM-L6-v2', pythonPath = 'python3') {
|
|
60
|
+
this.model = model;
|
|
61
|
+
this.pythonPath = pythonPath;
|
|
62
|
+
}
|
|
63
|
+
async isAvailable() {
|
|
64
|
+
try {
|
|
65
|
+
execSync(`${this.pythonPath} -c "from sentence_transformers import SentenceTransformer"`, {
|
|
66
|
+
stdio: 'pipe',
|
|
67
|
+
timeout: 10000,
|
|
68
|
+
});
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
async embed(text) {
|
|
76
|
+
const results = await this.embedBatch([text]);
|
|
77
|
+
return results[0];
|
|
78
|
+
}
|
|
79
|
+
async embedBatch(texts) {
|
|
80
|
+
const escapedTexts = JSON.stringify(texts);
|
|
81
|
+
const script = `
|
|
82
|
+
import json
|
|
83
|
+
import sys
|
|
84
|
+
from sentence_transformers import SentenceTransformer
|
|
85
|
+
|
|
86
|
+
model = SentenceTransformer('${this.model}')
|
|
87
|
+
texts = json.loads('''${escapedTexts}''')
|
|
88
|
+
embeddings = model.encode(texts, convert_to_numpy=True)
|
|
89
|
+
print(json.dumps(embeddings.tolist()))
|
|
90
|
+
`;
|
|
91
|
+
try {
|
|
92
|
+
const result = execSync(`${this.pythonPath} -c "${script.replace(/"/g, '\\"')}"`, {
|
|
93
|
+
encoding: 'utf-8',
|
|
94
|
+
timeout: 60000,
|
|
95
|
+
maxBuffer: 50 * 1024 * 1024,
|
|
96
|
+
});
|
|
97
|
+
return JSON.parse(result.trim());
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
throw new Error(`Local embedding generation failed: ${error}`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* TF-IDF Fallback Provider
|
|
106
|
+
* Simple keyword-based embeddings when no ML model is available
|
|
107
|
+
*/
|
|
108
|
+
export class TFIDFEmbeddingProvider {
|
|
109
|
+
name = 'tfidf';
|
|
110
|
+
dimensions = 384;
|
|
111
|
+
vocabulary = new Map();
|
|
112
|
+
idfScores = new Map();
|
|
113
|
+
documents = [];
|
|
114
|
+
async isAvailable() {
|
|
115
|
+
return true; // Always available as fallback
|
|
116
|
+
}
|
|
117
|
+
async embed(text) {
|
|
118
|
+
const tokens = this.tokenize(text);
|
|
119
|
+
const vector = new Array(this.dimensions).fill(0);
|
|
120
|
+
for (const token of tokens) {
|
|
121
|
+
const idx = this.getTokenIndex(token);
|
|
122
|
+
const tf = tokens.filter(t => t === token).length / tokens.length;
|
|
123
|
+
const idf = this.idfScores.get(token) || Math.log(this.documents.length + 1);
|
|
124
|
+
vector[idx % this.dimensions] += tf * idf;
|
|
125
|
+
}
|
|
126
|
+
return this.normalize(vector);
|
|
127
|
+
}
|
|
128
|
+
async embedBatch(texts) {
|
|
129
|
+
// Update IDF scores with new documents
|
|
130
|
+
this.updateIDF(texts);
|
|
131
|
+
return Promise.all(texts.map(t => this.embed(t)));
|
|
132
|
+
}
|
|
133
|
+
addDocument(text) {
|
|
134
|
+
this.documents.push(text);
|
|
135
|
+
this.updateIDF([text]);
|
|
136
|
+
}
|
|
137
|
+
tokenize(text) {
|
|
138
|
+
return text.toLowerCase()
|
|
139
|
+
.replace(/[^\w\s]/g, ' ')
|
|
140
|
+
.split(/\s+/)
|
|
141
|
+
.filter(t => t.length > 2);
|
|
142
|
+
}
|
|
143
|
+
getTokenIndex(token) {
|
|
144
|
+
if (!this.vocabulary.has(token)) {
|
|
145
|
+
this.vocabulary.set(token, this.vocabulary.size);
|
|
146
|
+
}
|
|
147
|
+
return this.vocabulary.get(token);
|
|
148
|
+
}
|
|
149
|
+
updateIDF(_newDocs) {
|
|
150
|
+
const tokenDocs = new Map();
|
|
151
|
+
for (let i = 0; i < this.documents.length; i++) {
|
|
152
|
+
const tokens = new Set(this.tokenize(this.documents[i]));
|
|
153
|
+
for (const token of tokens) {
|
|
154
|
+
if (!tokenDocs.has(token)) {
|
|
155
|
+
tokenDocs.set(token, new Set());
|
|
156
|
+
}
|
|
157
|
+
tokenDocs.get(token).add(i);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
for (const [token, docs] of tokenDocs) {
|
|
161
|
+
this.idfScores.set(token, Math.log(this.documents.length / (docs.size + 1)));
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
normalize(vector) {
|
|
165
|
+
const magnitude = Math.sqrt(vector.reduce((sum, v) => sum + v * v, 0));
|
|
166
|
+
if (magnitude === 0)
|
|
167
|
+
return vector;
|
|
168
|
+
return vector.map(v => v / magnitude);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Embedding Service - Main interface for UAM memory system
|
|
173
|
+
* Automatically selects best available provider
|
|
174
|
+
*/
|
|
175
|
+
export class EmbeddingService {
|
|
176
|
+
provider = null;
|
|
177
|
+
providers;
|
|
178
|
+
cache = new Map();
|
|
179
|
+
cacheMaxSize = 10000;
|
|
180
|
+
constructor() {
|
|
181
|
+
this.providers = [
|
|
182
|
+
new OpenAIEmbeddingProvider(),
|
|
183
|
+
new LocalEmbeddingProvider(),
|
|
184
|
+
new TFIDFEmbeddingProvider(),
|
|
185
|
+
];
|
|
186
|
+
}
|
|
187
|
+
async initialize() {
|
|
188
|
+
for (const provider of this.providers) {
|
|
189
|
+
if (await provider.isAvailable()) {
|
|
190
|
+
this.provider = provider;
|
|
191
|
+
console.log(`[EmbeddingService] Using provider: ${provider.name} (${provider.dimensions} dims)`);
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
// Fallback to TF-IDF which is always available
|
|
196
|
+
this.provider = this.providers[this.providers.length - 1];
|
|
197
|
+
console.log(`[EmbeddingService] Fallback to TF-IDF provider`);
|
|
198
|
+
}
|
|
199
|
+
async embed(text) {
|
|
200
|
+
if (!this.provider) {
|
|
201
|
+
await this.initialize();
|
|
202
|
+
}
|
|
203
|
+
// Check cache
|
|
204
|
+
const cacheKey = this.getCacheKey(text);
|
|
205
|
+
if (this.cache.has(cacheKey)) {
|
|
206
|
+
return this.cache.get(cacheKey);
|
|
207
|
+
}
|
|
208
|
+
const embedding = await this.provider.embed(text);
|
|
209
|
+
// Update cache
|
|
210
|
+
if (this.cache.size >= this.cacheMaxSize) {
|
|
211
|
+
// Remove oldest entry
|
|
212
|
+
const firstKey = this.cache.keys().next().value;
|
|
213
|
+
if (firstKey !== undefined) {
|
|
214
|
+
this.cache.delete(firstKey);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
this.cache.set(cacheKey, embedding);
|
|
218
|
+
return embedding;
|
|
219
|
+
}
|
|
220
|
+
async embedBatch(texts) {
|
|
221
|
+
if (!this.provider) {
|
|
222
|
+
await this.initialize();
|
|
223
|
+
}
|
|
224
|
+
const results = [];
|
|
225
|
+
const uncachedTexts = [];
|
|
226
|
+
const uncachedIndices = [];
|
|
227
|
+
// Check cache for each text
|
|
228
|
+
for (let i = 0; i < texts.length; i++) {
|
|
229
|
+
const cacheKey = this.getCacheKey(texts[i]);
|
|
230
|
+
if (this.cache.has(cacheKey)) {
|
|
231
|
+
results[i] = this.cache.get(cacheKey);
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
uncachedTexts.push(texts[i]);
|
|
235
|
+
uncachedIndices.push(i);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
// Generate embeddings for uncached texts
|
|
239
|
+
if (uncachedTexts.length > 0) {
|
|
240
|
+
const newEmbeddings = await this.provider.embedBatch(uncachedTexts);
|
|
241
|
+
for (let i = 0; i < uncachedTexts.length; i++) {
|
|
242
|
+
const idx = uncachedIndices[i];
|
|
243
|
+
results[idx] = newEmbeddings[i];
|
|
244
|
+
// Update cache
|
|
245
|
+
const cacheKey = this.getCacheKey(uncachedTexts[i]);
|
|
246
|
+
if (this.cache.size < this.cacheMaxSize) {
|
|
247
|
+
this.cache.set(cacheKey, newEmbeddings[i]);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
return results;
|
|
252
|
+
}
|
|
253
|
+
cosineSimilarity(a, b) {
|
|
254
|
+
if (a.length !== b.length) {
|
|
255
|
+
throw new Error('Vectors must have same dimensions');
|
|
256
|
+
}
|
|
257
|
+
let dotProduct = 0;
|
|
258
|
+
let normA = 0;
|
|
259
|
+
let normB = 0;
|
|
260
|
+
for (let i = 0; i < a.length; i++) {
|
|
261
|
+
dotProduct += a[i] * b[i];
|
|
262
|
+
normA += a[i] * a[i];
|
|
263
|
+
normB += b[i] * b[i];
|
|
264
|
+
}
|
|
265
|
+
const denominator = Math.sqrt(normA) * Math.sqrt(normB);
|
|
266
|
+
if (denominator === 0)
|
|
267
|
+
return 0;
|
|
268
|
+
return dotProduct / denominator;
|
|
269
|
+
}
|
|
270
|
+
getDimensions() {
|
|
271
|
+
return this.provider?.dimensions || 384;
|
|
272
|
+
}
|
|
273
|
+
getProviderName() {
|
|
274
|
+
return this.provider?.name || 'uninitialized';
|
|
275
|
+
}
|
|
276
|
+
getCacheKey(text) {
|
|
277
|
+
// Simple hash for cache key
|
|
278
|
+
return text.slice(0, 500).toLowerCase().trim();
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
// Singleton instance
|
|
282
|
+
let embeddingServiceInstance = null;
|
|
283
|
+
export function getEmbeddingService() {
|
|
284
|
+
if (!embeddingServiceInstance) {
|
|
285
|
+
embeddingServiceInstance = new EmbeddingService();
|
|
286
|
+
}
|
|
287
|
+
return embeddingServiceInstance;
|
|
288
|
+
}
|
|
289
|
+
export async function generateEmbedding(text) {
|
|
290
|
+
const service = getEmbeddingService();
|
|
291
|
+
return service.embed(text);
|
|
292
|
+
}
|
|
293
|
+
export async function generateEmbeddings(texts) {
|
|
294
|
+
const service = getEmbeddingService();
|
|
295
|
+
return service.embedBatch(texts);
|
|
296
|
+
}
|
|
297
|
+
//# sourceMappingURL=embeddings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embeddings.js","sourceRoot":"","sources":["../../src/memory/embeddings.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":"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"}
|