@agentic-robotics/mcp 0.1.3 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/dist/benchmark.d.ts +97 -0
  2. package/dist/benchmark.d.ts.map +1 -0
  3. package/dist/benchmark.js +330 -0
  4. package/dist/benchmark.js.map +1 -0
  5. package/dist/cli.d.ts +6 -0
  6. package/dist/cli.d.ts.map +1 -0
  7. package/dist/cli.js +79 -0
  8. package/dist/cli.js.map +1 -0
  9. package/dist/enhanced-memory.d.ts +118 -0
  10. package/dist/enhanced-memory.d.ts.map +1 -0
  11. package/dist/enhanced-memory.js +296 -0
  12. package/dist/enhanced-memory.js.map +1 -0
  13. package/dist/enhanced-server.d.ts +122 -0
  14. package/dist/enhanced-server.d.ts.map +1 -0
  15. package/dist/enhanced-server.js +361 -0
  16. package/dist/enhanced-server.js.map +1 -0
  17. package/dist/flow-orchestrator.d.ts +75 -0
  18. package/dist/flow-orchestrator.d.ts.map +1 -0
  19. package/dist/flow-orchestrator.js +350 -0
  20. package/dist/flow-orchestrator.js.map +1 -0
  21. package/dist/hybrid-benchmark.d.ts +44 -0
  22. package/dist/hybrid-benchmark.d.ts.map +1 -0
  23. package/dist/hybrid-benchmark.js +232 -0
  24. package/dist/hybrid-benchmark.js.map +1 -0
  25. package/dist/hybrid-memory.d.ts +81 -0
  26. package/dist/hybrid-memory.d.ts.map +1 -0
  27. package/dist/hybrid-memory.js +296 -0
  28. package/dist/hybrid-memory.js.map +1 -0
  29. package/dist/index.d.ts +10 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +10 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/interface.d.ts +38 -0
  34. package/dist/interface.d.ts.map +1 -0
  35. package/dist/interface.js +75 -0
  36. package/dist/interface.js.map +1 -0
  37. package/dist/memory.d.ts +52 -0
  38. package/dist/memory.d.ts.map +1 -0
  39. package/dist/memory.js +230 -0
  40. package/dist/memory.js.map +1 -0
  41. package/dist/optimized-benchmark.d.ts +74 -0
  42. package/dist/optimized-benchmark.d.ts.map +1 -0
  43. package/dist/optimized-benchmark.js +231 -0
  44. package/dist/optimized-benchmark.js.map +1 -0
  45. package/dist/server.d.ts +55 -0
  46. package/dist/server.d.ts.map +1 -0
  47. package/dist/server.js +147 -0
  48. package/dist/server.js.map +1 -0
  49. package/package.json +3 -2
  50. package/src/enhanced-server.ts +1 -1
  51. package/src/flow-orchestrator.ts +177 -117
  52. package/src/hybrid-memory.ts +2 -2
  53. package/src/memory.ts +171 -52
  54. package/src/optimized-benchmark.ts +0 -302
  55. package/src/optimized-memory.ts +0 -271
@@ -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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"}