@agentic-robotics/mcp 0.1.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/README.md +300 -0
- package/package.json +51 -0
- package/src/benchmark.ts +434 -0
- package/src/cli.ts +89 -0
- package/src/enhanced-memory.ts +437 -0
- package/src/enhanced-server.ts +523 -0
- package/src/flow-orchestrator.ts +415 -0
- package/src/hybrid-benchmark.ts +291 -0
- package/src/hybrid-memory.ts +401 -0
- package/src/index.ts +10 -0
- package/src/interface.ts +118 -0
- package/src/memory.ts +196 -0
- package/src/optimized-benchmark.ts +302 -0
- package/src/optimized-memory.ts +271 -0
- package/src/server.ts +213 -0
- package/tsconfig.json +20 -0
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Optimized AgentDB Memory Integration
|
|
3
|
+
*
|
|
4
|
+
* Uses AgentDB JavaScript API directly for maximum performance
|
|
5
|
+
* Eliminates CLI process spawning overhead (100x+ faster)
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { ReflexionMemory, SkillLibrary, ReasoningBank, CausalMemoryGraph } from 'agentdb';
|
|
9
|
+
import type { Episode, Memory } from './memory.js';
|
|
10
|
+
|
|
11
|
+
export interface Skill {
|
|
12
|
+
name: string;
|
|
13
|
+
description: string;
|
|
14
|
+
successRate: number;
|
|
15
|
+
avgReward: number;
|
|
16
|
+
attempts: number;
|
|
17
|
+
lastUsed: number;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export interface CausalReasoning {
|
|
21
|
+
cause: string;
|
|
22
|
+
effect: string;
|
|
23
|
+
confidence: number;
|
|
24
|
+
evidence: string[];
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export class OptimizedAgentDBMemory {
|
|
28
|
+
private reflexion: ReflexionMemory;
|
|
29
|
+
private skills: SkillLibrary;
|
|
30
|
+
private reasoning: ReasoningBank;
|
|
31
|
+
private causal: CausalMemoryGraph;
|
|
32
|
+
private dbPath: string;
|
|
33
|
+
private performanceMetrics: {
|
|
34
|
+
storeCount: number;
|
|
35
|
+
retrieveCount: number;
|
|
36
|
+
avgStoreTime: number;
|
|
37
|
+
avgRetrieveTime: number;
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
constructor(dbPath: string) {
|
|
41
|
+
this.dbPath = dbPath;
|
|
42
|
+
this.performanceMetrics = {
|
|
43
|
+
storeCount: 0,
|
|
44
|
+
retrieveCount: 0,
|
|
45
|
+
avgStoreTime: 0,
|
|
46
|
+
avgRetrieveTime: 0,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
async initialize(): Promise<void> {
|
|
51
|
+
const startTime = Date.now();
|
|
52
|
+
|
|
53
|
+
// Initialize AgentDB components with JS API
|
|
54
|
+
// These classes handle their own database initialization
|
|
55
|
+
this.reflexion = new ReflexionMemory();
|
|
56
|
+
this.skills = new SkillLibrary();
|
|
57
|
+
this.reasoning = new ReasoningBank();
|
|
58
|
+
this.causal = new CausalMemoryGraph();
|
|
59
|
+
|
|
60
|
+
const elapsed = Date.now() - startTime;
|
|
61
|
+
console.error(`✅ AgentDB initialized: ${this.dbPath}`);
|
|
62
|
+
console.error(`⚡ Initialization time: ${elapsed}ms`);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Store episode using JS API (100x faster than CLI)
|
|
67
|
+
*/
|
|
68
|
+
async storeEpisode(episode: Episode): Promise<void> {
|
|
69
|
+
const startTime = Date.now();
|
|
70
|
+
|
|
71
|
+
await this.reflexion.store({
|
|
72
|
+
sessionId: episode.sessionId,
|
|
73
|
+
taskName: episode.taskName,
|
|
74
|
+
confidence: episode.confidence,
|
|
75
|
+
success: episode.success,
|
|
76
|
+
outcome: episode.outcome,
|
|
77
|
+
strategy: episode.strategy,
|
|
78
|
+
metadata: episode.metadata,
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
const elapsed = Date.now() - startTime;
|
|
82
|
+
this.updateStoreMetrics(elapsed);
|
|
83
|
+
|
|
84
|
+
if (this.performanceMetrics.storeCount % 100 === 0) {
|
|
85
|
+
console.error(`💾 Stored episode: ${episode.taskName} (${elapsed}ms)`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Retrieve memories using JS API (150x faster than CLI)
|
|
91
|
+
*/
|
|
92
|
+
async retrieveMemories(
|
|
93
|
+
query: string,
|
|
94
|
+
k: number = 5,
|
|
95
|
+
options: {
|
|
96
|
+
minReward?: number;
|
|
97
|
+
onlySuccesses?: boolean;
|
|
98
|
+
onlyFailures?: boolean;
|
|
99
|
+
synthesizeContext?: boolean;
|
|
100
|
+
} = {}
|
|
101
|
+
): Promise<Memory[]> {
|
|
102
|
+
const startTime = Date.now();
|
|
103
|
+
|
|
104
|
+
const results = await this.reflexion.retrieve(query, k, {
|
|
105
|
+
minReward: options.minReward,
|
|
106
|
+
onlySuccesses: options.onlySuccesses,
|
|
107
|
+
onlyFailures: options.onlyFailures,
|
|
108
|
+
synthesizeContext: options.synthesizeContext,
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
const elapsed = Date.now() - startTime;
|
|
112
|
+
this.updateRetrieveMetrics(elapsed);
|
|
113
|
+
|
|
114
|
+
return results.map((r: any) => ({
|
|
115
|
+
task: r.taskName || r.task,
|
|
116
|
+
confidence: r.confidence,
|
|
117
|
+
success: r.success,
|
|
118
|
+
outcome: r.outcome,
|
|
119
|
+
strategy: r.strategy,
|
|
120
|
+
timestamp: r.timestamp,
|
|
121
|
+
}));
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Query with causal reasoning and context synthesis
|
|
126
|
+
*/
|
|
127
|
+
async queryWithContext(
|
|
128
|
+
query: string,
|
|
129
|
+
options: {
|
|
130
|
+
k?: number;
|
|
131
|
+
minConfidence?: number;
|
|
132
|
+
synthesizeReasoning?: boolean;
|
|
133
|
+
} = {}
|
|
134
|
+
): Promise<{
|
|
135
|
+
memories: Memory[];
|
|
136
|
+
context?: string;
|
|
137
|
+
reasoning?: CausalReasoning[];
|
|
138
|
+
}> {
|
|
139
|
+
const { k = 5, minConfidence = 0.0, synthesizeReasoning = false } = options;
|
|
140
|
+
|
|
141
|
+
const memories = await this.retrieveMemories(query, k, {
|
|
142
|
+
minReward: minConfidence,
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
let context: string | undefined;
|
|
146
|
+
let reasoning: CausalReasoning[] | undefined;
|
|
147
|
+
|
|
148
|
+
if (synthesizeReasoning && memories.length > 0) {
|
|
149
|
+
// Use ReasoningBank to synthesize insights
|
|
150
|
+
const insights = await this.reasoning.synthesize(
|
|
151
|
+
memories.map((m) => m.outcome)
|
|
152
|
+
);
|
|
153
|
+
context = insights.summary;
|
|
154
|
+
|
|
155
|
+
// Extract causal relationships
|
|
156
|
+
const causalLinks = await this.causal.query(query, { k: 3 });
|
|
157
|
+
reasoning = causalLinks.map((link: any) => ({
|
|
158
|
+
cause: link.cause,
|
|
159
|
+
effect: link.effect,
|
|
160
|
+
confidence: link.confidence,
|
|
161
|
+
evidence: link.evidence || [],
|
|
162
|
+
}));
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
return { memories, context, reasoning };
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Consolidate skills from successful episodes
|
|
170
|
+
*/
|
|
171
|
+
async consolidateSkills(options: {
|
|
172
|
+
minAttempts?: number;
|
|
173
|
+
minReward?: number;
|
|
174
|
+
timeWindowDays?: number;
|
|
175
|
+
enablePruning?: boolean;
|
|
176
|
+
} = {}): Promise<void> {
|
|
177
|
+
const {
|
|
178
|
+
minAttempts = 3,
|
|
179
|
+
minReward = 0.7,
|
|
180
|
+
timeWindowDays = 7,
|
|
181
|
+
enablePruning = true,
|
|
182
|
+
} = options;
|
|
183
|
+
|
|
184
|
+
await this.skills.consolidate({
|
|
185
|
+
minAttempts,
|
|
186
|
+
minReward,
|
|
187
|
+
timeWindow: timeWindowDays * 24 * 60 * 60 * 1000,
|
|
188
|
+
enablePruning,
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* Search skill library with semantic search
|
|
194
|
+
*/
|
|
195
|
+
async searchSkills(
|
|
196
|
+
query: string,
|
|
197
|
+
options: {
|
|
198
|
+
k?: number;
|
|
199
|
+
minSuccessRate?: number;
|
|
200
|
+
sortBy?: 'success_rate' | 'avg_reward' | 'attempts';
|
|
201
|
+
} = {}
|
|
202
|
+
): Promise<Skill[]> {
|
|
203
|
+
const { k = 5, minSuccessRate = 0.0, sortBy = 'success_rate' } = options;
|
|
204
|
+
|
|
205
|
+
const results = await this.skills.search(query, k, {
|
|
206
|
+
minSuccessRate,
|
|
207
|
+
sortBy,
|
|
208
|
+
});
|
|
209
|
+
|
|
210
|
+
return results.map((skill: any) => ({
|
|
211
|
+
name: skill.name,
|
|
212
|
+
description: skill.description,
|
|
213
|
+
successRate: skill.successRate,
|
|
214
|
+
avgReward: skill.avgReward,
|
|
215
|
+
attempts: skill.attempts,
|
|
216
|
+
lastUsed: skill.lastUsed,
|
|
217
|
+
}));
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* Optimize database (vacuum, reindex, compact)
|
|
222
|
+
*/
|
|
223
|
+
async optimize(): Promise<void> {
|
|
224
|
+
await this.reflexion.vacuum();
|
|
225
|
+
await this.skills.reindex();
|
|
226
|
+
console.error('🔧 Database optimized');
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* Get performance metrics
|
|
231
|
+
*/
|
|
232
|
+
getMetrics() {
|
|
233
|
+
return { ...this.performanceMetrics };
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* Get database statistics
|
|
238
|
+
*/
|
|
239
|
+
async getStats(): Promise<any> {
|
|
240
|
+
const reflexionStats = await this.reflexion.getStats();
|
|
241
|
+
const skillStats = await this.skills.getStats();
|
|
242
|
+
|
|
243
|
+
return {
|
|
244
|
+
reflexion: reflexionStats,
|
|
245
|
+
skills: skillStats,
|
|
246
|
+
performance: this.performanceMetrics,
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
async close(): Promise<void> {
|
|
251
|
+
await this.reflexion.close();
|
|
252
|
+
await this.skills.close();
|
|
253
|
+
await this.reasoning.close();
|
|
254
|
+
await this.causal.close();
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
// Private helper methods
|
|
258
|
+
private updateStoreMetrics(elapsed: number): void {
|
|
259
|
+
const { storeCount, avgStoreTime } = this.performanceMetrics;
|
|
260
|
+
this.performanceMetrics.storeCount = storeCount + 1;
|
|
261
|
+
this.performanceMetrics.avgStoreTime =
|
|
262
|
+
(avgStoreTime * storeCount + elapsed) / (storeCount + 1);
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
private updateRetrieveMetrics(elapsed: number): void {
|
|
266
|
+
const { retrieveCount, avgRetrieveTime } = this.performanceMetrics;
|
|
267
|
+
this.performanceMetrics.retrieveCount = retrieveCount + 1;
|
|
268
|
+
this.performanceMetrics.avgRetrieveTime =
|
|
269
|
+
(avgRetrieveTime * retrieveCount + elapsed) / (retrieveCount + 1);
|
|
270
|
+
}
|
|
271
|
+
}
|
package/src/server.ts
ADDED
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ROS3 MCP Server implementation - Simplified version
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { ROS3Interface } from './interface.js';
|
|
6
|
+
import { AgentDBMemory } from './memory.js';
|
|
7
|
+
|
|
8
|
+
export interface ROS3McpServerConfig {
|
|
9
|
+
name?: string;
|
|
10
|
+
version?: string;
|
|
11
|
+
dbPath?: string;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export class ROS3McpServer {
|
|
15
|
+
private ros3: ROS3Interface;
|
|
16
|
+
private memory: AgentDBMemory;
|
|
17
|
+
private name: string;
|
|
18
|
+
private version: string;
|
|
19
|
+
|
|
20
|
+
constructor(config: ROS3McpServerConfig = {}) {
|
|
21
|
+
const {
|
|
22
|
+
name = 'ros3-mcp-server',
|
|
23
|
+
version = '1.0.0',
|
|
24
|
+
dbPath = './ros3-agentdb.db',
|
|
25
|
+
} = config;
|
|
26
|
+
|
|
27
|
+
this.name = name;
|
|
28
|
+
this.version = version;
|
|
29
|
+
|
|
30
|
+
// Initialize ROS3 interface
|
|
31
|
+
this.ros3 = new ROS3Interface();
|
|
32
|
+
|
|
33
|
+
// Initialize AgentDB memory
|
|
34
|
+
this.memory = new AgentDBMemory(dbPath);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
async start(): Promise<void> {
|
|
38
|
+
// Initialize AgentDB
|
|
39
|
+
await this.memory.initialize();
|
|
40
|
+
|
|
41
|
+
console.error(`${this.name} v${this.version} started`);
|
|
42
|
+
console.error('AgentDB initialized and ready');
|
|
43
|
+
console.error('');
|
|
44
|
+
console.error('Available tools:');
|
|
45
|
+
console.error(' - move_robot: Move robot to target pose');
|
|
46
|
+
console.error(' - get_pose: Get current robot pose');
|
|
47
|
+
console.error(' - get_status: Get robot status');
|
|
48
|
+
console.error(' - read_lidar: Read LIDAR data');
|
|
49
|
+
console.error(' - detect_objects: Detect objects from camera');
|
|
50
|
+
console.error(' - query_memory: Query past experiences');
|
|
51
|
+
console.error(' - consolidate_skills: Learn from experiences');
|
|
52
|
+
console.error(' - get_memory_stats: Get memory statistics');
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
async stop(): Promise<void> {
|
|
56
|
+
await this.memory.close();
|
|
57
|
+
console.error(`${this.name} stopped`);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Tool implementations
|
|
61
|
+
async moveRobot(params: {
|
|
62
|
+
x: number;
|
|
63
|
+
y: number;
|
|
64
|
+
z: number;
|
|
65
|
+
roll: number;
|
|
66
|
+
pitch: number;
|
|
67
|
+
yaw: number;
|
|
68
|
+
speed?: number;
|
|
69
|
+
frame?: 'base' | 'world';
|
|
70
|
+
}): Promise<string> {
|
|
71
|
+
const { x, y, z, roll, pitch, yaw, speed = 0.5, frame = 'world' } = params;
|
|
72
|
+
const startTime = Date.now();
|
|
73
|
+
|
|
74
|
+
try {
|
|
75
|
+
await this.ros3.moveToPose({ x, y, z, roll, pitch, yaw }, speed, frame);
|
|
76
|
+
const latency = Date.now() - startTime;
|
|
77
|
+
|
|
78
|
+
await this.memory.storeEpisode({
|
|
79
|
+
sessionId: `motion-${Date.now()}`,
|
|
80
|
+
taskName: 'move_robot',
|
|
81
|
+
confidence: 0.9,
|
|
82
|
+
success: true,
|
|
83
|
+
outcome: `Moved to [${x}, ${y}, ${z}] in ${latency}ms`,
|
|
84
|
+
strategy: `speed_${speed}_frame_${frame}`,
|
|
85
|
+
metadata: { x, y, z, roll, pitch, yaw, speed, frame, latency },
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
return `Robot moved to [${x}, ${y}, ${z}] in ${frame} frame. Completed in ${latency}ms.`;
|
|
89
|
+
} catch (error: any) {
|
|
90
|
+
await this.memory.storeEpisode({
|
|
91
|
+
sessionId: `motion-${Date.now()}`,
|
|
92
|
+
taskName: 'move_robot',
|
|
93
|
+
confidence: 0.0,
|
|
94
|
+
success: false,
|
|
95
|
+
outcome: `Failed: ${error.message}`,
|
|
96
|
+
metadata: { x, y, z, roll, pitch, yaw, speed, frame },
|
|
97
|
+
});
|
|
98
|
+
throw error;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
async getPose(): Promise<string> {
|
|
103
|
+
const pose = await this.ros3.getCurrentPose();
|
|
104
|
+
return `Current pose: [${pose.x}, ${pose.y}, ${pose.z}] (roll=${pose.roll}, pitch=${pose.pitch}, yaw=${pose.yaw})`;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
async getStatus(): Promise<string> {
|
|
108
|
+
const status = await this.ros3.getStatus();
|
|
109
|
+
return `Robot status: ${status.status}, Health: ${status.health}`;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
async readLidar(params: { filter?: string; max_points?: number }): Promise<string> {
|
|
113
|
+
const { filter = 'all', max_points = 10000 } = params;
|
|
114
|
+
const startTime = Date.now();
|
|
115
|
+
|
|
116
|
+
const cloud = await this.ros3.getLidarData(
|
|
117
|
+
filter as 'all' | 'obstacles' | 'ground',
|
|
118
|
+
max_points
|
|
119
|
+
);
|
|
120
|
+
|
|
121
|
+
const latency = Date.now() - startTime;
|
|
122
|
+
|
|
123
|
+
await this.memory.storeEpisode({
|
|
124
|
+
sessionId: `lidar-${Date.now()}`,
|
|
125
|
+
taskName: 'read_lidar',
|
|
126
|
+
confidence: 1.0,
|
|
127
|
+
success: true,
|
|
128
|
+
outcome: `Retrieved ${cloud.points.length} points in ${latency}ms`,
|
|
129
|
+
metadata: { filter, max_points, num_points: cloud.points.length, latency },
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
return `LIDAR data: ${cloud.points.length} points (filter: ${filter}, latency: ${latency}ms)`;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
async detectObjects(params: { camera: string; confidence_threshold?: number }): Promise<string> {
|
|
136
|
+
const { camera, confidence_threshold = 0.5 } = params;
|
|
137
|
+
const startTime = Date.now();
|
|
138
|
+
|
|
139
|
+
const detections = await this.ros3.detectObjects(
|
|
140
|
+
camera as 'front' | 'left' | 'right' | 'rear',
|
|
141
|
+
confidence_threshold
|
|
142
|
+
);
|
|
143
|
+
|
|
144
|
+
const latency = Date.now() - startTime;
|
|
145
|
+
|
|
146
|
+
await this.memory.storeEpisode({
|
|
147
|
+
sessionId: `vision-${Date.now()}`,
|
|
148
|
+
taskName: 'detect_objects',
|
|
149
|
+
confidence: 0.9,
|
|
150
|
+
success: true,
|
|
151
|
+
outcome: `Detected ${detections.length} objects in ${latency}ms`,
|
|
152
|
+
metadata: { camera, confidence_threshold, num_detections: detections.length, latency },
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
return `Detected ${detections.length} objects from ${camera} camera:\n${JSON.stringify(detections, null, 2)}`;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
async queryMemory(params: {
|
|
159
|
+
query: string;
|
|
160
|
+
k?: number;
|
|
161
|
+
only_successes?: boolean;
|
|
162
|
+
min_confidence?: number;
|
|
163
|
+
}): Promise<string> {
|
|
164
|
+
const { query, k = 5, only_successes = false, min_confidence = 0.0 } = params;
|
|
165
|
+
|
|
166
|
+
const result = await this.memory.queryWithContext(query, { k, minConfidence: min_confidence });
|
|
167
|
+
|
|
168
|
+
const filteredMemories = only_successes
|
|
169
|
+
? result.memories.filter((m) => m.success)
|
|
170
|
+
: result.memories;
|
|
171
|
+
|
|
172
|
+
return `Found ${filteredMemories.length} memories for "${query}":\n${JSON.stringify(filteredMemories, null, 2)}`;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
async consolidateSkills(params?: {
|
|
176
|
+
min_attempts?: number;
|
|
177
|
+
min_reward?: number;
|
|
178
|
+
time_window_days?: number;
|
|
179
|
+
}): Promise<string> {
|
|
180
|
+
const { min_attempts = 3, min_reward = 0.7, time_window_days = 7 } = params || {};
|
|
181
|
+
|
|
182
|
+
await this.memory.consolidateSkills({
|
|
183
|
+
minAttempts: min_attempts,
|
|
184
|
+
minReward: min_reward,
|
|
185
|
+
timeWindowDays: time_window_days,
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
return `Skills consolidated (min_attempts: ${min_attempts}, min_reward: ${min_reward}, window: ${time_window_days} days)`;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
async getMemoryStats(): Promise<string> {
|
|
192
|
+
const stats = await this.memory.getStats();
|
|
193
|
+
return `AgentDB Statistics:\n${stats.stats}`;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
// Get server info
|
|
197
|
+
getInfo() {
|
|
198
|
+
return {
|
|
199
|
+
name: this.name,
|
|
200
|
+
version: this.version,
|
|
201
|
+
tools: [
|
|
202
|
+
'move_robot',
|
|
203
|
+
'get_pose',
|
|
204
|
+
'get_status',
|
|
205
|
+
'read_lidar',
|
|
206
|
+
'detect_objects',
|
|
207
|
+
'query_memory',
|
|
208
|
+
'consolidate_skills',
|
|
209
|
+
'get_memory_stats',
|
|
210
|
+
],
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
}
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2022",
|
|
4
|
+
"module": "ES2022",
|
|
5
|
+
"lib": ["ES2022"],
|
|
6
|
+
"moduleResolution": "node",
|
|
7
|
+
"esModuleInterop": true,
|
|
8
|
+
"allowSyntheticDefaultImports": true,
|
|
9
|
+
"strict": true,
|
|
10
|
+
"skipLibCheck": true,
|
|
11
|
+
"declaration": true,
|
|
12
|
+
"declarationMap": true,
|
|
13
|
+
"sourceMap": true,
|
|
14
|
+
"outDir": "./dist",
|
|
15
|
+
"rootDir": "./src",
|
|
16
|
+
"resolveJsonModule": true
|
|
17
|
+
},
|
|
18
|
+
"include": ["src/**/*"],
|
|
19
|
+
"exclude": ["node_modules", "dist"]
|
|
20
|
+
}
|