@agentic-robotics/mcp 0.1.3 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/benchmark.d.ts +97 -0
- package/dist/benchmark.d.ts.map +1 -0
- package/dist/benchmark.js +330 -0
- package/dist/benchmark.js.map +1 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +79 -0
- package/dist/cli.js.map +1 -0
- package/dist/enhanced-memory.d.ts +118 -0
- package/dist/enhanced-memory.d.ts.map +1 -0
- package/dist/enhanced-memory.js +296 -0
- package/dist/enhanced-memory.js.map +1 -0
- package/dist/enhanced-server.d.ts +122 -0
- package/dist/enhanced-server.d.ts.map +1 -0
- package/dist/enhanced-server.js +361 -0
- package/dist/enhanced-server.js.map +1 -0
- package/dist/flow-orchestrator.d.ts +75 -0
- package/dist/flow-orchestrator.d.ts.map +1 -0
- package/dist/flow-orchestrator.js +350 -0
- package/dist/flow-orchestrator.js.map +1 -0
- package/dist/hybrid-benchmark.d.ts +44 -0
- package/dist/hybrid-benchmark.d.ts.map +1 -0
- package/dist/hybrid-benchmark.js +232 -0
- package/dist/hybrid-benchmark.js.map +1 -0
- package/dist/hybrid-memory.d.ts +81 -0
- package/dist/hybrid-memory.d.ts.map +1 -0
- package/dist/hybrid-memory.js +296 -0
- package/dist/hybrid-memory.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/{src/index.ts → dist/index.js} +1 -1
- package/dist/index.js.map +1 -0
- package/dist/interface.d.ts +38 -0
- package/dist/interface.d.ts.map +1 -0
- package/dist/interface.js +75 -0
- package/dist/interface.js.map +1 -0
- package/dist/memory.d.ts +52 -0
- package/dist/memory.d.ts.map +1 -0
- package/dist/memory.js +230 -0
- package/dist/memory.js.map +1 -0
- package/dist/server.d.ts +55 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +147 -0
- package/dist/server.js.map +1 -0
- package/package.json +3 -2
- package/src/benchmark.ts +0 -434
- package/src/cli.ts +0 -89
- package/src/enhanced-memory.ts +0 -437
- package/src/enhanced-server.ts +0 -523
- package/src/flow-orchestrator.ts +0 -415
- package/src/hybrid-benchmark.ts +0 -291
- package/src/hybrid-memory.ts +0 -401
- package/src/interface.ts +0 -118
- package/src/memory.ts +0 -196
- package/src/optimized-benchmark.ts +0 -302
- package/src/optimized-memory.ts +0 -271
- package/src/server.ts +0 -213
- package/tsconfig.json +0 -20
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic Flow Orchestration Integration - SECURE VERSION
|
|
3
|
+
*
|
|
4
|
+
* Integrates agentic-flow's 66 agents and 213 MCP tools for
|
|
5
|
+
* multi-robot coordination and complex task execution
|
|
6
|
+
*
|
|
7
|
+
* SECURITY: All command execution uses secure spawn() with argument arrays
|
|
8
|
+
*/
|
|
9
|
+
import { spawn } from 'child_process';
|
|
10
|
+
/**
|
|
11
|
+
* Secure helper to spawn commands with proper argument handling
|
|
12
|
+
*/
|
|
13
|
+
function spawnAsync(command, args, options = {}) {
|
|
14
|
+
return new Promise((resolve, reject) => {
|
|
15
|
+
const child = spawn(command, args, {
|
|
16
|
+
shell: false, // Critical: disable shell interpretation
|
|
17
|
+
timeout: options.timeout,
|
|
18
|
+
});
|
|
19
|
+
let stdout = '';
|
|
20
|
+
let stderr = '';
|
|
21
|
+
child.stdout?.on('data', (data) => {
|
|
22
|
+
stdout += data.toString();
|
|
23
|
+
});
|
|
24
|
+
child.stderr?.on('data', (data) => {
|
|
25
|
+
stderr += data.toString();
|
|
26
|
+
});
|
|
27
|
+
child.on('close', (code) => {
|
|
28
|
+
resolve({ stdout, stderr, code: code || 0 });
|
|
29
|
+
});
|
|
30
|
+
child.on('error', (error) => {
|
|
31
|
+
reject(error);
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Validate and sanitize task parameters
|
|
37
|
+
*/
|
|
38
|
+
function validateTaskParams(params) {
|
|
39
|
+
// Check for command injection attempts
|
|
40
|
+
const paramStr = JSON.stringify(params);
|
|
41
|
+
if (paramStr.includes(';') || paramStr.includes('|') || paramStr.includes('&')) {
|
|
42
|
+
throw new Error('Invalid characters in task parameters');
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export class FlowOrchestrator {
|
|
46
|
+
config;
|
|
47
|
+
metrics;
|
|
48
|
+
initialized = false;
|
|
49
|
+
constructor(config = {}) {
|
|
50
|
+
// Validate config
|
|
51
|
+
if (config.numAgents && (config.numAgents < 1 || config.numAgents > 200)) {
|
|
52
|
+
throw new Error('numAgents must be between 1 and 200');
|
|
53
|
+
}
|
|
54
|
+
this.config = {
|
|
55
|
+
numAgents: config.numAgents || 66,
|
|
56
|
+
strategy: config.strategy || 'adaptive',
|
|
57
|
+
mcpTools: config.mcpTools || [],
|
|
58
|
+
reasoningEnabled: config.reasoningEnabled ?? true,
|
|
59
|
+
learningEnabled: config.learningEnabled ?? true,
|
|
60
|
+
};
|
|
61
|
+
this.metrics = {
|
|
62
|
+
totalTasks: 0,
|
|
63
|
+
successfulTasks: 0,
|
|
64
|
+
failedTasks: 0,
|
|
65
|
+
avgExecutionTime: 0,
|
|
66
|
+
agentUtilization: {},
|
|
67
|
+
toolUsage: {},
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
async initialize() {
|
|
71
|
+
if (this.initialized)
|
|
72
|
+
return;
|
|
73
|
+
const startTime = Date.now();
|
|
74
|
+
try {
|
|
75
|
+
// Secure initialization with spawn
|
|
76
|
+
const args = ['agentic-flow', 'init', '--agents', this.config.numAgents.toString(), '--strategy', this.config.strategy];
|
|
77
|
+
if (this.config.reasoningEnabled)
|
|
78
|
+
args.push('--enable-reasoning');
|
|
79
|
+
if (this.config.learningEnabled)
|
|
80
|
+
args.push('--enable-learning');
|
|
81
|
+
await spawnAsync('npx', args);
|
|
82
|
+
const initTime = Date.now() - startTime;
|
|
83
|
+
console.error(`🌊 Agentic Flow initialized (${this.config.numAgents} agents, ${initTime}ms)`);
|
|
84
|
+
this.initialized = true;
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
console.error('⚠️ Flow initialization warning:', error.message);
|
|
88
|
+
this.initialized = true;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
async executeTask(task) {
|
|
92
|
+
if (!this.initialized) {
|
|
93
|
+
throw new Error('FlowOrchestrator not initialized. Call initialize() first.');
|
|
94
|
+
}
|
|
95
|
+
// Validate input
|
|
96
|
+
validateTaskParams(task.params);
|
|
97
|
+
const startTime = Date.now();
|
|
98
|
+
this.metrics.totalTasks++;
|
|
99
|
+
try {
|
|
100
|
+
const args = [
|
|
101
|
+
'agentic-flow',
|
|
102
|
+
'execute',
|
|
103
|
+
'--task-type',
|
|
104
|
+
task.type,
|
|
105
|
+
'--priority',
|
|
106
|
+
task.priority,
|
|
107
|
+
'--params',
|
|
108
|
+
JSON.stringify(task.params),
|
|
109
|
+
'--format',
|
|
110
|
+
'json',
|
|
111
|
+
];
|
|
112
|
+
if (task.timeout)
|
|
113
|
+
args.push('--timeout', task.timeout.toString());
|
|
114
|
+
if (task.retries)
|
|
115
|
+
args.push('--retries', task.retries.toString());
|
|
116
|
+
if (this.config.reasoningEnabled)
|
|
117
|
+
args.push('--enable-reasoning');
|
|
118
|
+
const { stdout, code } = await spawnAsync('npx', args, {
|
|
119
|
+
timeout: task.timeout || 30000,
|
|
120
|
+
});
|
|
121
|
+
if (code !== 0) {
|
|
122
|
+
throw new Error(`Agentic-flow execution failed with code ${code}`);
|
|
123
|
+
}
|
|
124
|
+
const lines = stdout.trim().split('\n');
|
|
125
|
+
const jsonLine = lines.find((line) => line.startsWith('{'));
|
|
126
|
+
if (jsonLine) {
|
|
127
|
+
const data = JSON.parse(jsonLine);
|
|
128
|
+
const executionTime = Date.now() - startTime;
|
|
129
|
+
this.metrics.successfulTasks++;
|
|
130
|
+
this.updateMetrics(data, executionTime);
|
|
131
|
+
console.error(`✅ Task ${task.id} completed in ${executionTime}ms`);
|
|
132
|
+
return {
|
|
133
|
+
taskId: task.id,
|
|
134
|
+
success: true,
|
|
135
|
+
result: data.result,
|
|
136
|
+
executionTime,
|
|
137
|
+
agentsUsed: data.agents_used || [],
|
|
138
|
+
toolsUsed: data.tools_used || [],
|
|
139
|
+
reasoning: data.reasoning,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
throw new Error('No valid JSON response from agentic-flow');
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
this.metrics.failedTasks++;
|
|
146
|
+
const executionTime = Date.now() - startTime;
|
|
147
|
+
console.error(`❌ Task ${task.id} failed: ${error.message}`);
|
|
148
|
+
return {
|
|
149
|
+
taskId: task.id,
|
|
150
|
+
success: false,
|
|
151
|
+
result: { error: error.message },
|
|
152
|
+
executionTime,
|
|
153
|
+
agentsUsed: [],
|
|
154
|
+
toolsUsed: [],
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
async executeSwarm(tasks) {
|
|
159
|
+
if (!this.initialized) {
|
|
160
|
+
throw new Error('FlowOrchestrator not initialized. Call initialize() first.');
|
|
161
|
+
}
|
|
162
|
+
const startTime = Date.now();
|
|
163
|
+
console.error(`🐝 Executing swarm with ${tasks.length} tasks`);
|
|
164
|
+
try {
|
|
165
|
+
// Validate all tasks
|
|
166
|
+
tasks.forEach((task) => validateTaskParams(task.params));
|
|
167
|
+
const args = [
|
|
168
|
+
'agentic-flow',
|
|
169
|
+
'swarm',
|
|
170
|
+
'--tasks',
|
|
171
|
+
JSON.stringify(tasks),
|
|
172
|
+
'--strategy',
|
|
173
|
+
this.config.strategy,
|
|
174
|
+
'--num-agents',
|
|
175
|
+
this.config.numAgents.toString(),
|
|
176
|
+
'--format',
|
|
177
|
+
'json',
|
|
178
|
+
];
|
|
179
|
+
if (this.config.reasoningEnabled)
|
|
180
|
+
args.push('--enable-reasoning');
|
|
181
|
+
const { stdout, code } = await spawnAsync('npx', args, { timeout: 60000 });
|
|
182
|
+
if (code !== 0) {
|
|
183
|
+
throw new Error(`Swarm execution failed with code ${code}`);
|
|
184
|
+
}
|
|
185
|
+
const lines = stdout.trim().split('\n');
|
|
186
|
+
const jsonLine = lines.find((line) => line.startsWith('[') || line.startsWith('{'));
|
|
187
|
+
if (jsonLine) {
|
|
188
|
+
const data = JSON.parse(jsonLine);
|
|
189
|
+
const results = Array.isArray(data) ? data : [data];
|
|
190
|
+
const swarmTime = Date.now() - startTime;
|
|
191
|
+
console.error(`🎯 Swarm completed ${results.length} tasks in ${swarmTime}ms`);
|
|
192
|
+
return results.map((r, i) => ({
|
|
193
|
+
taskId: tasks[i].id,
|
|
194
|
+
success: r.success ?? true,
|
|
195
|
+
result: r.result,
|
|
196
|
+
executionTime: r.execution_time || swarmTime / results.length,
|
|
197
|
+
agentsUsed: r.agents_used || [],
|
|
198
|
+
toolsUsed: r.tools_used || [],
|
|
199
|
+
reasoning: r.reasoning,
|
|
200
|
+
}));
|
|
201
|
+
}
|
|
202
|
+
throw new Error('No valid JSON response from swarm execution');
|
|
203
|
+
}
|
|
204
|
+
catch (error) {
|
|
205
|
+
console.error(`❌ Swarm execution failed: ${error.message}`);
|
|
206
|
+
return tasks.map((task) => ({
|
|
207
|
+
taskId: task.id,
|
|
208
|
+
success: false,
|
|
209
|
+
result: { error: error.message },
|
|
210
|
+
executionTime: 0,
|
|
211
|
+
agentsUsed: [],
|
|
212
|
+
toolsUsed: [],
|
|
213
|
+
}));
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
async coordinateRobots(robots, mission) {
|
|
217
|
+
if (!this.initialized) {
|
|
218
|
+
throw new Error('FlowOrchestrator not initialized. Call initialize() first.');
|
|
219
|
+
}
|
|
220
|
+
const startTime = Date.now();
|
|
221
|
+
try {
|
|
222
|
+
const args = [
|
|
223
|
+
'agentic-flow',
|
|
224
|
+
'coordinate',
|
|
225
|
+
'--robots',
|
|
226
|
+
JSON.stringify(robots),
|
|
227
|
+
'--mission-type',
|
|
228
|
+
mission.type,
|
|
229
|
+
'--objectives',
|
|
230
|
+
JSON.stringify(mission.objectives),
|
|
231
|
+
'--format',
|
|
232
|
+
'json',
|
|
233
|
+
];
|
|
234
|
+
if (mission.constraints) {
|
|
235
|
+
args.push('--constraints', JSON.stringify(mission.constraints));
|
|
236
|
+
}
|
|
237
|
+
const { stdout, code } = await spawnAsync('npx', args, { timeout: 30000 });
|
|
238
|
+
if (code !== 0) {
|
|
239
|
+
throw new Error(`Coordination failed with code ${code}`);
|
|
240
|
+
}
|
|
241
|
+
const lines = stdout.trim().split('\n');
|
|
242
|
+
const jsonLine = lines.find((line) => line.startsWith('{'));
|
|
243
|
+
if (jsonLine) {
|
|
244
|
+
const data = JSON.parse(jsonLine);
|
|
245
|
+
const coordTime = Date.now() - startTime;
|
|
246
|
+
console.error(`🤝 Robot coordination completed in ${coordTime}ms`);
|
|
247
|
+
return {
|
|
248
|
+
success: true,
|
|
249
|
+
assignments: data.assignments || {},
|
|
250
|
+
executionPlan: data.execution_plan || {},
|
|
251
|
+
estimatedTime: data.estimated_time || 0,
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
throw new Error('No valid JSON response from coordination');
|
|
255
|
+
}
|
|
256
|
+
catch (error) {
|
|
257
|
+
throw new Error(`Robot coordination failed: ${error.message}`);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
async reasonAboutTask(context, options = {}) {
|
|
261
|
+
if (!this.initialized) {
|
|
262
|
+
throw new Error('FlowOrchestrator not initialized. Call initialize() first.');
|
|
263
|
+
}
|
|
264
|
+
try {
|
|
265
|
+
const args = ['agentic-flow', 'reason', '--context', context, '--format', 'json'];
|
|
266
|
+
if (options.useMemory)
|
|
267
|
+
args.push('--use-memory');
|
|
268
|
+
if (options.synthesizeStrategy)
|
|
269
|
+
args.push('--synthesize-strategy');
|
|
270
|
+
if (options.explainReasoning)
|
|
271
|
+
args.push('--explain-reasoning');
|
|
272
|
+
const { stdout, code } = await spawnAsync('npx', args, { timeout: 15000 });
|
|
273
|
+
if (code !== 0) {
|
|
274
|
+
throw new Error(`Reasoning failed with code ${code}`);
|
|
275
|
+
}
|
|
276
|
+
const lines = stdout.trim().split('\n');
|
|
277
|
+
const jsonLine = lines.find((line) => line.startsWith('{'));
|
|
278
|
+
if (jsonLine) {
|
|
279
|
+
const data = JSON.parse(jsonLine);
|
|
280
|
+
return {
|
|
281
|
+
decision: data.decision || '',
|
|
282
|
+
reasoning: data.reasoning || '',
|
|
283
|
+
confidence: data.confidence || 0,
|
|
284
|
+
alternatives: data.alternatives || [],
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
throw new Error('No valid JSON response from reasoning');
|
|
288
|
+
}
|
|
289
|
+
catch (error) {
|
|
290
|
+
throw new Error(`Reasoning failed: ${error.message}`);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
async getAvailableTools() {
|
|
294
|
+
try {
|
|
295
|
+
const { stdout, code } = await spawnAsync('npx', [
|
|
296
|
+
'agentic-flow',
|
|
297
|
+
'list-tools',
|
|
298
|
+
'--format',
|
|
299
|
+
'json',
|
|
300
|
+
]);
|
|
301
|
+
if (code !== 0) {
|
|
302
|
+
throw new Error('Failed to list tools');
|
|
303
|
+
}
|
|
304
|
+
const lines = stdout.trim().split('\n');
|
|
305
|
+
const jsonLine = lines.find((line) => line.startsWith('['));
|
|
306
|
+
if (jsonLine) {
|
|
307
|
+
const tools = JSON.parse(jsonLine);
|
|
308
|
+
console.error(`🔧 Found ${tools.length}/213 MCP tools available`);
|
|
309
|
+
return tools;
|
|
310
|
+
}
|
|
311
|
+
return [];
|
|
312
|
+
}
|
|
313
|
+
catch (error) {
|
|
314
|
+
throw new Error(`Failed to list tools: ${error.message}`);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
getMetrics() {
|
|
318
|
+
return {
|
|
319
|
+
...this.metrics,
|
|
320
|
+
avgExecutionTime: this.metrics.totalTasks > 0 ? this.metrics.avgExecutionTime / this.metrics.totalTasks : 0,
|
|
321
|
+
};
|
|
322
|
+
}
|
|
323
|
+
updateMetrics(data, executionTime) {
|
|
324
|
+
this.metrics.avgExecutionTime += executionTime;
|
|
325
|
+
if (data.agents_used) {
|
|
326
|
+
for (const agent of data.agents_used) {
|
|
327
|
+
this.metrics.agentUtilization[agent] = (this.metrics.agentUtilization[agent] || 0) + 1;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
if (data.tools_used) {
|
|
331
|
+
for (const tool of data.tools_used) {
|
|
332
|
+
this.metrics.toolUsage[tool] = (this.metrics.toolUsage[tool] || 0) + 1;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
resetMetrics() {
|
|
337
|
+
this.metrics = {
|
|
338
|
+
totalTasks: 0,
|
|
339
|
+
successfulTasks: 0,
|
|
340
|
+
failedTasks: 0,
|
|
341
|
+
avgExecutionTime: 0,
|
|
342
|
+
agentUtilization: {},
|
|
343
|
+
toolUsage: {},
|
|
344
|
+
};
|
|
345
|
+
}
|
|
346
|
+
async close() {
|
|
347
|
+
this.initialized = false;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
//# sourceMappingURL=flow-orchestrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow-orchestrator.js","sourceRoot":"","sources":["../src/flow-orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hybrid Benchmark Suite
|
|
3
|
+
*
|
|
4
|
+
* Demonstrates performance improvements with direct SQL storage
|
|
5
|
+
*/
|
|
6
|
+
export declare class HybridBenchmark {
|
|
7
|
+
private memory;
|
|
8
|
+
constructor();
|
|
9
|
+
initialize(): Promise<void>;
|
|
10
|
+
/**
|
|
11
|
+
* Run complete benchmark suite
|
|
12
|
+
*/
|
|
13
|
+
runAll(): Promise<void>;
|
|
14
|
+
/**
|
|
15
|
+
* Benchmark: Store Episode (Direct SQL)
|
|
16
|
+
*/
|
|
17
|
+
private benchmarkStoreEpisode;
|
|
18
|
+
/**
|
|
19
|
+
* Benchmark: Bulk Store (SQL Transaction)
|
|
20
|
+
*/
|
|
21
|
+
private benchmarkBulkStore;
|
|
22
|
+
/**
|
|
23
|
+
* Benchmark: Retrieve Memories (SQL fallback)
|
|
24
|
+
*/
|
|
25
|
+
private benchmarkRetrieveMemories;
|
|
26
|
+
/**
|
|
27
|
+
* Benchmark: Query with Context
|
|
28
|
+
*/
|
|
29
|
+
private benchmarkQueryWithContext;
|
|
30
|
+
/**
|
|
31
|
+
* Benchmark: Search Skills (Direct SQL)
|
|
32
|
+
*/
|
|
33
|
+
private benchmarkSearchSkills;
|
|
34
|
+
/**
|
|
35
|
+
* Calculate statistics from timing data
|
|
36
|
+
*/
|
|
37
|
+
private calculateStats;
|
|
38
|
+
/**
|
|
39
|
+
* Print benchmark result
|
|
40
|
+
*/
|
|
41
|
+
private printResult;
|
|
42
|
+
close(): Promise<void>;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=hybrid-benchmark.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hybrid-benchmark.d.ts","sourceRoot":"","sources":["../src/hybrid-benchmark.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAkBH,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAsB;;IAM9B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAMjC;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAwD7B;;OAEG;YACW,qBAAqB;IA0BnC;;OAEG;YACW,kBAAkB;IAiChC;;OAEG;YACW,yBAAyB;IA4BvC;;OAEG;YACW,yBAAyB;IAmBvC;;OAEG;YACW,qBAAqB;IAoBnC;;OAEG;IACH,OAAO,CAAC,cAAc;IAkBtB;;OAEG;IACH,OAAO,CAAC,WAAW;IAab,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hybrid Benchmark Suite
|
|
3
|
+
*
|
|
4
|
+
* Demonstrates performance improvements with direct SQL storage
|
|
5
|
+
*/
|
|
6
|
+
import { HybridAgentDBMemory } from './hybrid-memory.js';
|
|
7
|
+
export class HybridBenchmark {
|
|
8
|
+
memory;
|
|
9
|
+
constructor() {
|
|
10
|
+
this.memory = new HybridAgentDBMemory('./hybrid-benchmark.db');
|
|
11
|
+
}
|
|
12
|
+
async initialize() {
|
|
13
|
+
console.log('🏁 Initializing hybrid benchmark suite...\n');
|
|
14
|
+
await this.memory.initialize();
|
|
15
|
+
console.log('✅ Benchmark suite ready\n');
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Run complete benchmark suite
|
|
19
|
+
*/
|
|
20
|
+
async runAll() {
|
|
21
|
+
const suiteStartTime = Date.now();
|
|
22
|
+
console.log('┌─────────────────────────────────────────────────────────┐');
|
|
23
|
+
console.log('│ Hybrid Integration Benchmark Suite │');
|
|
24
|
+
console.log('│ Direct SQL + CLI Vector Search Performance Test │');
|
|
25
|
+
console.log('└─────────────────────────────────────────────────────────┘\n');
|
|
26
|
+
// Hybrid Benchmarks
|
|
27
|
+
console.log('📊 HYBRID BENCHMARKS (SQL Storage + CLI Search)\n');
|
|
28
|
+
const storeEpisode = await this.benchmarkStoreEpisode(1000);
|
|
29
|
+
this.printResult('Store Episode (SQL)', storeEpisode);
|
|
30
|
+
const bulkStore = await this.benchmarkBulkStore(1000, 100);
|
|
31
|
+
this.printResult('Bulk Store (SQL Transaction)', bulkStore);
|
|
32
|
+
const retrieveMemories = await this.benchmarkRetrieveMemories(100);
|
|
33
|
+
this.printResult('Retrieve Memories (SQL Fallback)', retrieveMemories);
|
|
34
|
+
const queryWithContext = await this.benchmarkQueryWithContext(100);
|
|
35
|
+
this.printResult('Query with Context (Hybrid)', queryWithContext);
|
|
36
|
+
const searchSkills = await this.benchmarkSearchSkills(200);
|
|
37
|
+
this.printResult('Search Skills (SQL)', searchSkills);
|
|
38
|
+
const totalTime = Date.now() - suiteStartTime;
|
|
39
|
+
console.log('\n┌─────────────────────────────────────────────────────────┐');
|
|
40
|
+
console.log('│ BENCHMARK COMPLETE │');
|
|
41
|
+
console.log(`│ Total Time: ${(totalTime / 1000).toFixed(2)}s │`);
|
|
42
|
+
console.log('└─────────────────────────────────────────────────────────┘\n');
|
|
43
|
+
// Print performance metrics
|
|
44
|
+
const metrics = this.memory.getMetrics();
|
|
45
|
+
console.log('📈 PERFORMANCE METRICS\n');
|
|
46
|
+
console.log(` Store Operations: ${metrics.storeCount}`);
|
|
47
|
+
console.log(` Avg Store Time: ${metrics.avgStoreTime.toFixed(3)}ms`);
|
|
48
|
+
console.log(` Retrieve Operations: ${metrics.retrieveCount}`);
|
|
49
|
+
console.log(` Avg Retrieve Time: ${metrics.avgRetrieveTime.toFixed(3)}ms\n`);
|
|
50
|
+
// Print database stats
|
|
51
|
+
const stats = await this.memory.getStats();
|
|
52
|
+
console.log('💾 DATABASE STATISTICS\n');
|
|
53
|
+
console.log(` Total Episodes: ${stats.total_episodes}`);
|
|
54
|
+
console.log(` Successful: ${stats.successful_episodes}`);
|
|
55
|
+
console.log(` Failed: ${stats.failed_episodes}`);
|
|
56
|
+
console.log(` Unique Tasks: ${stats.unique_tasks}`);
|
|
57
|
+
console.log(` Avg Confidence: ${stats.avg_confidence?.toFixed(3)}\n`);
|
|
58
|
+
// Optimization test
|
|
59
|
+
console.log('🔧 Running database optimization...');
|
|
60
|
+
await this.memory.optimize();
|
|
61
|
+
console.log('');
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Benchmark: Store Episode (Direct SQL)
|
|
65
|
+
*/
|
|
66
|
+
async benchmarkStoreEpisode(iterations) {
|
|
67
|
+
const times = [];
|
|
68
|
+
for (let i = 0; i < iterations; i++) {
|
|
69
|
+
const episode = {
|
|
70
|
+
sessionId: `bench-${i}`,
|
|
71
|
+
taskName: 'navigation',
|
|
72
|
+
confidence: Math.random(),
|
|
73
|
+
success: Math.random() > 0.3,
|
|
74
|
+
outcome: 'Completed navigation task',
|
|
75
|
+
strategy: 'adaptive_planning',
|
|
76
|
+
metadata: { x: i, y: i * 2, latency: Math.random() * 100 },
|
|
77
|
+
};
|
|
78
|
+
const start = performance.now();
|
|
79
|
+
await this.memory.storeEpisode(episode);
|
|
80
|
+
times.push(performance.now() - start);
|
|
81
|
+
if (i % 100 === 0 && i > 0) {
|
|
82
|
+
process.stderr.write(` Progress: ${i}/${iterations}\r`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return this.calculateStats('Store Episode', times);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Benchmark: Bulk Store (SQL Transaction)
|
|
89
|
+
*/
|
|
90
|
+
async benchmarkBulkStore(totalEpisodes, batchSize) {
|
|
91
|
+
const times = [];
|
|
92
|
+
const numBatches = Math.ceil(totalEpisodes / batchSize);
|
|
93
|
+
for (let i = 0; i < numBatches; i++) {
|
|
94
|
+
const batch = [];
|
|
95
|
+
for (let j = 0; j < batchSize; j++) {
|
|
96
|
+
const idx = i * batchSize + j;
|
|
97
|
+
batch.push({
|
|
98
|
+
sessionId: `bulk-${idx}`,
|
|
99
|
+
taskName: 'navigation',
|
|
100
|
+
confidence: Math.random(),
|
|
101
|
+
success: Math.random() > 0.3,
|
|
102
|
+
outcome: 'Completed navigation task',
|
|
103
|
+
strategy: 'adaptive_planning',
|
|
104
|
+
metadata: { x: idx, y: idx * 2 },
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
const start = performance.now();
|
|
108
|
+
await this.memory.bulkStoreEpisodes(batch);
|
|
109
|
+
times.push(performance.now() - start);
|
|
110
|
+
if (i % 5 === 0 && i > 0) {
|
|
111
|
+
process.stderr.write(` Progress: ${i * batchSize}/${totalEpisodes}\r`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// Convert to per-episode times
|
|
115
|
+
const perEpisodeTimes = times.map(t => t / batchSize);
|
|
116
|
+
return this.calculateStats('Bulk Store', perEpisodeTimes);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Benchmark: Retrieve Memories (SQL fallback)
|
|
120
|
+
*/
|
|
121
|
+
async benchmarkRetrieveMemories(iterations) {
|
|
122
|
+
const times = [];
|
|
123
|
+
const queries = [
|
|
124
|
+
'navigation task',
|
|
125
|
+
'object detection',
|
|
126
|
+
'path planning',
|
|
127
|
+
'sensor fusion',
|
|
128
|
+
'motor control',
|
|
129
|
+
];
|
|
130
|
+
for (let i = 0; i < iterations; i++) {
|
|
131
|
+
const query = queries[i % queries.length];
|
|
132
|
+
const start = performance.now();
|
|
133
|
+
await this.memory.retrieveMemories(query, 5, {
|
|
134
|
+
onlySuccesses: true,
|
|
135
|
+
});
|
|
136
|
+
times.push(performance.now() - start);
|
|
137
|
+
if (i % 20 === 0 && i > 0) {
|
|
138
|
+
process.stderr.write(` Progress: ${i}/${iterations}\r`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return this.calculateStats('Retrieve Memories', times);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Benchmark: Query with Context
|
|
145
|
+
*/
|
|
146
|
+
async benchmarkQueryWithContext(iterations) {
|
|
147
|
+
const times = [];
|
|
148
|
+
for (let i = 0; i < iterations; i++) {
|
|
149
|
+
const start = performance.now();
|
|
150
|
+
await this.memory.queryWithContext('warehouse navigation', {
|
|
151
|
+
k: 10,
|
|
152
|
+
minConfidence: 0.5,
|
|
153
|
+
});
|
|
154
|
+
times.push(performance.now() - start);
|
|
155
|
+
if (i % 20 === 0 && i > 0) {
|
|
156
|
+
process.stderr.write(` Progress: ${i}/${iterations}\r`);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return this.calculateStats('Query with Context', times);
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Benchmark: Search Skills (Direct SQL)
|
|
163
|
+
*/
|
|
164
|
+
async benchmarkSearchSkills(iterations) {
|
|
165
|
+
const times = [];
|
|
166
|
+
for (let i = 0; i < iterations; i++) {
|
|
167
|
+
const start = performance.now();
|
|
168
|
+
await this.memory.searchSkills('navigation', {
|
|
169
|
+
k: 5,
|
|
170
|
+
minSuccessRate: 0.5,
|
|
171
|
+
sortBy: 'success_rate',
|
|
172
|
+
});
|
|
173
|
+
times.push(performance.now() - start);
|
|
174
|
+
if (i % 20 === 0 && i > 0) {
|
|
175
|
+
process.stderr.write(` Progress: ${i}/${iterations}\r`);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return this.calculateStats('Search Skills', times);
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Calculate statistics from timing data
|
|
182
|
+
*/
|
|
183
|
+
calculateStats(name, times) {
|
|
184
|
+
const sorted = [...times].sort((a, b) => a - b);
|
|
185
|
+
const total = times.reduce((a, b) => a + b, 0);
|
|
186
|
+
return {
|
|
187
|
+
name,
|
|
188
|
+
iterations: times.length,
|
|
189
|
+
totalTime: total,
|
|
190
|
+
avgTime: total / times.length,
|
|
191
|
+
minTime: sorted[0],
|
|
192
|
+
maxTime: sorted[sorted.length - 1],
|
|
193
|
+
opsPerSec: (times.length / total) * 1000,
|
|
194
|
+
p50: sorted[Math.floor(sorted.length * 0.50)],
|
|
195
|
+
p95: sorted[Math.floor(sorted.length * 0.95)],
|
|
196
|
+
p99: sorted[Math.floor(sorted.length * 0.99)],
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Print benchmark result
|
|
201
|
+
*/
|
|
202
|
+
printResult(name, result) {
|
|
203
|
+
const speedup = 2300 / result.avgTime; // Compare to CLI baseline (2.3s)
|
|
204
|
+
console.log(`${name}:`);
|
|
205
|
+
console.log(` Iterations: ${result.iterations.toLocaleString()}`);
|
|
206
|
+
console.log(` Avg Time: ${result.avgTime.toFixed(3)}ms`);
|
|
207
|
+
console.log(` Min/Max: ${result.minTime.toFixed(3)}ms / ${result.maxTime.toFixed(3)}ms`);
|
|
208
|
+
console.log(` p50/p95/p99: ${result.p50.toFixed(3)}ms / ${result.p95.toFixed(3)}ms / ${result.p99.toFixed(3)}ms`);
|
|
209
|
+
console.log(` Ops/sec: ${result.opsPerSec.toFixed(0)}`);
|
|
210
|
+
console.log(` Speedup: ${speedup.toFixed(0)}x faster than CLI`);
|
|
211
|
+
console.log('');
|
|
212
|
+
}
|
|
213
|
+
async close() {
|
|
214
|
+
await this.memory.close();
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
// CLI entry point
|
|
218
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
219
|
+
const benchmark = new HybridBenchmark();
|
|
220
|
+
try {
|
|
221
|
+
await benchmark.initialize();
|
|
222
|
+
await benchmark.runAll();
|
|
223
|
+
}
|
|
224
|
+
catch (error) {
|
|
225
|
+
console.error('❌ Benchmark failed:', error);
|
|
226
|
+
process.exit(1);
|
|
227
|
+
}
|
|
228
|
+
finally {
|
|
229
|
+
await benchmark.close();
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=hybrid-benchmark.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hybrid-benchmark.js","sourceRoot":"","sources":["../src/hybrid-benchmark.ts"],"names":[],"mappings":"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"}
|