@autonomaai/agent-core 1.0.2

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 (62) hide show
  1. package/dist/base-agent.d.ts +112 -0
  2. package/dist/base-agent.d.ts.map +1 -0
  3. package/dist/base-agent.js +173 -0
  4. package/dist/base-agent.js.map +1 -0
  5. package/dist/core.d.ts +81 -0
  6. package/dist/core.d.ts.map +1 -0
  7. package/dist/core.js +633 -0
  8. package/dist/core.js.map +1 -0
  9. package/dist/error-handler.d.ts +78 -0
  10. package/dist/error-handler.d.ts.map +1 -0
  11. package/dist/error-handler.js +129 -0
  12. package/dist/error-handler.js.map +1 -0
  13. package/dist/factory.d.ts +60 -0
  14. package/dist/factory.d.ts.map +1 -0
  15. package/dist/factory.js +621 -0
  16. package/dist/factory.js.map +1 -0
  17. package/dist/index.d.ts +13 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +19 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/streaming.d.ts +24 -0
  22. package/dist/streaming.d.ts.map +1 -0
  23. package/dist/streaming.js +36 -0
  24. package/dist/streaming.js.map +1 -0
  25. package/dist/trading/formatters.d.ts +167 -0
  26. package/dist/trading/formatters.d.ts.map +1 -0
  27. package/dist/trading/formatters.js +271 -0
  28. package/dist/trading/formatters.js.map +1 -0
  29. package/dist/trading/index.d.ts +9 -0
  30. package/dist/trading/index.d.ts.map +1 -0
  31. package/dist/trading/index.js +10 -0
  32. package/dist/trading/index.js.map +1 -0
  33. package/dist/trading/types.d.ts +205 -0
  34. package/dist/trading/types.d.ts.map +1 -0
  35. package/dist/trading/types.js +7 -0
  36. package/dist/trading/types.js.map +1 -0
  37. package/dist/trading/utils.d.ts +120 -0
  38. package/dist/trading/utils.d.ts.map +1 -0
  39. package/dist/trading/utils.js +291 -0
  40. package/dist/trading/utils.js.map +1 -0
  41. package/dist/trading/validation.d.ts +40 -0
  42. package/dist/trading/validation.d.ts.map +1 -0
  43. package/dist/trading/validation.js +247 -0
  44. package/dist/trading/validation.js.map +1 -0
  45. package/dist/types.d.ts +282 -0
  46. package/dist/types.d.ts.map +1 -0
  47. package/dist/types.js +21 -0
  48. package/dist/types.js.map +1 -0
  49. package/package.json +57 -0
  50. package/src/base-agent.ts +263 -0
  51. package/src/core.ts +792 -0
  52. package/src/error-handler.ts +166 -0
  53. package/src/factory.ts +687 -0
  54. package/src/global.d.ts +12 -0
  55. package/src/index.ts +24 -0
  56. package/src/streaming.ts +50 -0
  57. package/src/trading/formatters.ts +363 -0
  58. package/src/trading/index.ts +10 -0
  59. package/src/trading/types.ts +263 -0
  60. package/src/trading/utils.ts +355 -0
  61. package/src/trading/validation.ts +321 -0
  62. package/src/types.ts +402 -0
package/dist/core.js ADDED
@@ -0,0 +1,633 @@
1
+ /**
2
+ * Core Agent Implementation for autonoma Ecosystem
3
+ *
4
+ * Provides standardized agent creation and management with LangGraph + AgentKit integration.
5
+ */
6
+ import { ChatOpenAI } from '@langchain/openai';
7
+ import { createReactAgent } from '@langchain/langgraph/prebuilt';
8
+ import { createUnifiedMCPTools } from '@autonomaai/mcp-client';
9
+ import { executeMCPTool } from '@autonomaai/mcp-client';
10
+ import { streamingService } from './streaming.js';
11
+ // Simple structured logger implementation
12
+ class StructuredLogger {
13
+ constructor(agentName, logLevel = 'info') {
14
+ this.agentName = agentName;
15
+ this.logLevel = logLevel;
16
+ }
17
+ log(level, message, meta) {
18
+ if (!this.shouldLog(level))
19
+ return;
20
+ const timestamp = new Date().toISOString();
21
+ const logEntry = {
22
+ timestamp,
23
+ level,
24
+ agent: this.agentName,
25
+ message,
26
+ ...(meta && { meta })
27
+ };
28
+ // Use structured JSON logging for production, readable format for development
29
+ if (process.env.NODE_ENV === 'production') {
30
+ console.log(JSON.stringify(logEntry));
31
+ }
32
+ else {
33
+ console.log(`[${timestamp}] ${level.toUpperCase()} [${this.agentName}] ${message}${meta ? ` ${JSON.stringify(meta)}` : ''}`);
34
+ }
35
+ }
36
+ shouldLog(level) {
37
+ const levels = ['debug', 'info', 'warn', 'error'];
38
+ const currentLevel = levels.indexOf(this.logLevel);
39
+ const messageLevel = levels.indexOf(level);
40
+ return messageLevel >= currentLevel;
41
+ }
42
+ info(message, meta) {
43
+ this.log('info', message, meta);
44
+ }
45
+ warn(message, meta) {
46
+ this.log('warn', message, meta);
47
+ }
48
+ error(message, meta) {
49
+ this.log('error', message, meta);
50
+ }
51
+ debug(message, meta) {
52
+ this.log('debug', message, meta);
53
+ }
54
+ }
55
+ /**
56
+ * Core agent implementation that standardizes LangGraph + AgentKit patterns
57
+ */
58
+ export class StandardAgent {
59
+ constructor(config) {
60
+ this.capabilities = [];
61
+ this.tools = [];
62
+ this.lastTokenUsage = 0;
63
+ this.status = 'idle';
64
+ this.startTime = Date.now();
65
+ this.id = `agent_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
66
+ this.name = config.name;
67
+ this.description = config.description;
68
+ this.config = config;
69
+ // Initialize structured logger
70
+ const logLevel = process.env.LOG_LEVEL || (process.env.NODE_ENV === 'production' ? 'info' : 'debug');
71
+ this.logger = new StructuredLogger(this.name, logLevel);
72
+ this.metrics = {
73
+ totalMessages: 0,
74
+ totalToolCalls: 0,
75
+ averageResponseTime: 0,
76
+ successRate: 100,
77
+ topTools: [],
78
+ errorCount: 0,
79
+ uptime: 0
80
+ };
81
+ }
82
+ async start() {
83
+ try {
84
+ this.status = 'processing';
85
+ // Initialize the underlying LangGraph agent
86
+ await this.initializeLangGraphAgent();
87
+ // Initialize services if configured
88
+ await this.initializeServices();
89
+ this.status = 'idle';
90
+ this.logger.info('Agent started successfully', {
91
+ agentId: this.id,
92
+ capabilities: this.capabilities,
93
+ toolCount: this.tools.length
94
+ });
95
+ }
96
+ catch (error) {
97
+ this.status = 'error';
98
+ this.metrics.errorCount++;
99
+ throw new Error(`Failed to start agent: ${error instanceof Error ? error.message : String(error)}`);
100
+ }
101
+ }
102
+ async stop() {
103
+ this.status = 'stopped';
104
+ this.logger.info('Agent stopped', {
105
+ agentId: this.id,
106
+ uptime: Date.now() - this.startTime,
107
+ totalMessages: this.metrics.totalMessages
108
+ });
109
+ }
110
+ async process(message) {
111
+ const startTime = Date.now();
112
+ this.status = 'processing';
113
+ try {
114
+ if (!this.langGraphAgent) {
115
+ throw new Error('Agent not initialized. Call start() first.');
116
+ }
117
+ // Save user message if message service is available
118
+ if (this.messageService) {
119
+ await this.messageService.saveMessage(message);
120
+ }
121
+ // Process with LangGraph agent
122
+ const response = await this.processWithLangGraph(message);
123
+ // Update metrics
124
+ this.updateMetrics(startTime, true);
125
+ this.status = 'idle';
126
+ return response;
127
+ }
128
+ catch (error) {
129
+ this.updateMetrics(startTime, false);
130
+ this.status = 'error';
131
+ this.metrics.errorCount++;
132
+ const errorMessage = error instanceof Error ? error.message : String(error);
133
+ return {
134
+ content: `I encountered an error: ${errorMessage}`,
135
+ timestamp: new Date().toISOString(),
136
+ error: errorMessage
137
+ };
138
+ }
139
+ }
140
+ async updateConfig(config) {
141
+ this.config = { ...this.config, ...config };
142
+ // Reinitialize if agent is running
143
+ if (this.langGraphAgent) {
144
+ await this.initializeLangGraphAgent();
145
+ }
146
+ }
147
+ async addTool(tool) {
148
+ this.tools.push(tool);
149
+ this.capabilities.push(tool.name || 'unknown_tool');
150
+ // Reinitialize agent with new tools
151
+ if (this.langGraphAgent) {
152
+ await this.initializeLangGraphAgent();
153
+ }
154
+ }
155
+ async removeTool(toolName) {
156
+ this.tools = this.tools.filter(tool => tool.name !== toolName);
157
+ this.capabilities = this.capabilities.filter(cap => cap !== toolName);
158
+ // Reinitialize agent without the tool
159
+ if (this.langGraphAgent) {
160
+ await this.initializeLangGraphAgent();
161
+ }
162
+ }
163
+ getStatus() {
164
+ return {
165
+ status: this.status,
166
+ uptime: Date.now() - this.startTime,
167
+ lastActivity: new Date().toISOString(),
168
+ activeTools: this.tools.map(tool => tool.name || 'unknown'),
169
+ memoryUsage: {
170
+ conversationMessages: this.metrics.totalMessages,
171
+ totalMemoryMB: process.memoryUsage().heapUsed / 1024 / 1024
172
+ }
173
+ };
174
+ }
175
+ getMetrics() {
176
+ return {
177
+ ...this.metrics,
178
+ uptime: Date.now() - this.startTime
179
+ };
180
+ }
181
+ async clearMemory() {
182
+ if (this.messageService) {
183
+ await this.messageService.clearHistory();
184
+ }
185
+ // Reset conversation-related metrics
186
+ this.metrics.totalMessages = 0;
187
+ }
188
+ async getConversationHistory(limit = 50) {
189
+ if (this.messageService) {
190
+ return await this.messageService.getRecentMessages(limit);
191
+ }
192
+ return [];
193
+ }
194
+ buildSystemPrompt() {
195
+ if (this.config.prompt?.systemMessage) {
196
+ return this.config.prompt.systemMessage;
197
+ }
198
+ return 'You are a helpful AI assistant providing insights to the autonoma platform.';
199
+ }
200
+ async buildConversationMessages(message) {
201
+ const messages = [];
202
+ const systemPrompt = this.buildSystemPrompt();
203
+ messages.push({ role: 'system', content: systemPrompt });
204
+ if (this.config.prompt?.context) {
205
+ messages.push({ role: 'system', content: this.config.prompt.context });
206
+ }
207
+ const conversationHistory = await this.getConversationHistory(10);
208
+ for (const entry of conversationHistory.reverse()) {
209
+ messages.push({
210
+ role: entry.role,
211
+ content: entry.content
212
+ });
213
+ }
214
+ messages.push({
215
+ role: message.role,
216
+ content: message.content
217
+ });
218
+ return messages;
219
+ }
220
+ getSessionId(message) {
221
+ return message.metadata?.sessionId || 'default';
222
+ }
223
+ emitStreamingEvent(sessionId, type, content, metadata) {
224
+ streamingService.publish(sessionId, { type, content, metadata });
225
+ }
226
+ publishStreamingChunks(sessionId, text, type = 'progress') {
227
+ const chunkSize = 120;
228
+ for (let start = 0; start < text.length; start += chunkSize) {
229
+ const chunk = text.slice(start, start + chunkSize);
230
+ if (chunk.trim()) {
231
+ this.emitStreamingEvent(sessionId, type, chunk, {
232
+ chunk_index: Math.floor(start / chunkSize),
233
+ chunk_size: chunkSize
234
+ });
235
+ }
236
+ }
237
+ }
238
+ async requestOpenAICompletion(messages) {
239
+ const config = this.openAiConfig;
240
+ if (!config) {
241
+ throw new Error('LLM configuration is not initialized');
242
+ }
243
+ const response = await fetch('https://api.openai.com/v1/chat/completions', {
244
+ method: 'POST',
245
+ headers: {
246
+ authorization: `Bearer ${config.apiKey}`,
247
+ 'Content-Type': 'application/json'
248
+ },
249
+ body: JSON.stringify({
250
+ model: config.model,
251
+ messages,
252
+ temperature: config.temperature,
253
+ max_tokens: config.maxTokens,
254
+ stream: false
255
+ })
256
+ });
257
+ const payload = await response.json();
258
+ if (!response.ok) {
259
+ const errorMessage = payload?.error?.message || response.statusText;
260
+ throw new Error(`OpenAI API error (${response.status}): ${errorMessage}`);
261
+ }
262
+ const choice = payload?.choices?.[0]?.message?.content;
263
+ if (!choice) {
264
+ throw new Error('OpenAI response is missing content');
265
+ }
266
+ this.lastTokenUsage = payload?.usage?.total_tokens || this.lastTokenUsage;
267
+ return choice;
268
+ }
269
+ async createLangGraphTools() {
270
+ const tools = [];
271
+ // Include any custom tools provided by the agent configuration
272
+ const customTools = this.config.tools?.customTools;
273
+ if (Array.isArray(customTools)) {
274
+ tools.push(...customTools);
275
+ }
276
+ if (this.config.tools?.enableMCP) {
277
+ const hummingbotUrl = this.config.tools.mcpServerUrl || process.env.HUMMINGBOT_MCP_URL || 'http://localhost:8000';
278
+ const ragUrl = this.config.tools.ragServerUrl || process.env.RAG_MCP_URL || 'http://localhost:3002';
279
+ const dexscreenerUrl = process.env.DEXSCREENER_MCP_URL || 'http://localhost:3000';
280
+ const apyUrl = process.env.APY_STRATEGY_MCP_URL || 'http://localhost:8003';
281
+ this.unifiedMcpTools = createUnifiedMCPTools({
282
+ hummingbotUrl,
283
+ ragServerUrl: ragUrl,
284
+ dexscreenerUrl,
285
+ apyStrategyUrl: apyUrl
286
+ });
287
+ tools.push(this.createLangGraphMcpTool());
288
+ }
289
+ return tools;
290
+ }
291
+ createLangGraphMcpTool() {
292
+ return {
293
+ name: 'call_mcp_tool',
294
+ description: 'Execute an MCP tool by service name (hummingbot, rag, dexscreener, apy). Provide tool arguments as needed.',
295
+ func: async (params) => {
296
+ const client = this.getMcpClientForService(params.service);
297
+ if (!client) {
298
+ throw new Error(`MCP service ${params.service} is not configured for this agent`);
299
+ }
300
+ const result = await executeMCPTool(client, params.tool, params.arguments);
301
+ if (!result.success) {
302
+ throw new Error(result.error || `MCP tool ${params.tool} failed without providing an error`);
303
+ }
304
+ return result.response;
305
+ }
306
+ };
307
+ }
308
+ getMcpClientForService(service) {
309
+ if (!this.unifiedMcpTools)
310
+ return null;
311
+ switch (service) {
312
+ case 'hummingbot':
313
+ return this.unifiedMcpTools.hummingbotTools;
314
+ case 'rag':
315
+ return this.unifiedMcpTools.ragTools;
316
+ case 'dexscreener':
317
+ return this.unifiedMcpTools.dexscreenerTools;
318
+ case 'apy':
319
+ return this.unifiedMcpTools.apyStrategyTools;
320
+ default:
321
+ return null;
322
+ }
323
+ }
324
+ // =============================================================================
325
+ // Private Implementation Methods
326
+ // =============================================================================
327
+ async initializeLangGraphAgent() {
328
+ const llmConfig = this.config.llm || {};
329
+ const apiKey = llmConfig.openAIApiKey || process.env.OPENAI_API_KEY;
330
+ if (!apiKey) {
331
+ throw new Error('OpenAI API key is required to initialize the agent');
332
+ }
333
+ this.openAiConfig = {
334
+ apiKey,
335
+ model: llmConfig.model || process.env.OPENAI_MODEL || 'gpt-4o-mini',
336
+ temperature: llmConfig.temperature ?? 0.3,
337
+ maxTokens: llmConfig.maxTokens ?? parseInt(process.env.OPENAI_MAX_TOKENS || '2048', 10)
338
+ };
339
+ const llm = new ChatOpenAI({
340
+ openAIApiKey: this.openAiConfig.apiKey,
341
+ modelName: this.openAiConfig.model,
342
+ temperature: this.openAiConfig.temperature,
343
+ maxTokens: this.openAiConfig.maxTokens
344
+ });
345
+ const tools = await this.createLangGraphTools();
346
+ this.tools = tools;
347
+ this.langGraphAgent = await createReactAgent({
348
+ llm,
349
+ tools,
350
+ messageModifier: this.buildSystemPrompt()
351
+ });
352
+ }
353
+ async initializeServices() {
354
+ if (this.config.services?.messageService) {
355
+ // Support passing a concrete MessageService instance
356
+ if (typeof this.config.services.messageService !== 'boolean') {
357
+ this.messageService = this.config.services.messageService;
358
+ }
359
+ this.logger.info('Message service enabled', {
360
+ service: 'messageService',
361
+ config: this.config.services.messageService
362
+ });
363
+ }
364
+ if (this.config.services?.ragService) {
365
+ // Initialize RAG service - implementation will be injected
366
+ // if (typeof this.config.services.ragService !== 'boolean') {
367
+ // this.ragService = this.config.services.ragService;
368
+ // }
369
+ this.logger.info('RAG service enabled (not yet implemented)', {
370
+ service: 'ragService',
371
+ config: this.config.services.ragService
372
+ });
373
+ }
374
+ }
375
+ async processWithLangGraph(message) {
376
+ if (!this.langGraphAgent) {
377
+ throw new Error('LangGraph agent is not initialized');
378
+ }
379
+ const sessionId = this.getSessionId(message);
380
+ const conversation = await this.buildConversationMessages(message);
381
+ this.emitStreamingEvent(sessionId, 'start', 'Processing your request with LangGraph');
382
+ const agentInput = conversation.map(entry => `${entry.role.toUpperCase()}: ${entry.content}`).join('\n\n');
383
+ const startTime = Date.now();
384
+ try {
385
+ const runResult = await this.langGraphAgent.run(agentInput);
386
+ const { content, toolCalls, tokensUsed } = this.normalizeLangGraphResult(runResult);
387
+ const processingTime = Date.now() - startTime;
388
+ const timestamp = new Date().toISOString();
389
+ if (this.messageService) {
390
+ await this.messageService.saveMessage({ role: 'assistant', content, timestamp });
391
+ }
392
+ this.metrics.totalToolCalls += toolCalls.length;
393
+ const response = {
394
+ content,
395
+ timestamp,
396
+ toolCalls,
397
+ metrics: {
398
+ processingTime,
399
+ tokensUsed,
400
+ toolsUsed: toolCalls.map(call => call.tool)
401
+ }
402
+ };
403
+ this.publishStreamingChunks(sessionId, content);
404
+ this.emitStreamingEvent(sessionId, 'done', content, { toolCalls: toolCalls.map(call => call.tool) });
405
+ return response;
406
+ }
407
+ catch (error) {
408
+ this.logger.warn('LangGraph agent failed, falling back to direct OpenAI completion', {
409
+ error: error instanceof Error ? error.message : String(error)
410
+ });
411
+ const fallbackContent = await this.requestOpenAICompletion(conversation);
412
+ const processingTime = Date.now() - startTime;
413
+ const timestamp = new Date().toISOString();
414
+ if (this.messageService) {
415
+ await this.messageService.saveMessage({ role: 'assistant', content: fallbackContent, timestamp });
416
+ }
417
+ this.emitStreamingEvent(sessionId, 'error', 'LangGraph agent fallback triggered', {
418
+ error: error instanceof Error ? error.message : String(error)
419
+ });
420
+ this.publishStreamingChunks(sessionId, fallbackContent);
421
+ this.emitStreamingEvent(sessionId, 'done', fallbackContent);
422
+ return {
423
+ content: fallbackContent,
424
+ timestamp,
425
+ metrics: {
426
+ processingTime,
427
+ tokensUsed: this.lastTokenUsage,
428
+ toolsUsed: []
429
+ }
430
+ };
431
+ }
432
+ }
433
+ normalizeLangGraphResult(result) {
434
+ let content = '';
435
+ if (typeof result === 'string') {
436
+ content = result;
437
+ }
438
+ else if (typeof result?.content === 'string') {
439
+ content = result.content;
440
+ }
441
+ else if (typeof result?.response === 'string') {
442
+ content = result.response;
443
+ }
444
+ else if (Array.isArray(result?.output)) {
445
+ content = result.output
446
+ .map((segment) => (typeof segment === 'string' ? segment : segment?.text || segment?.content || ''))
447
+ .filter(Boolean)
448
+ .join('\n');
449
+ }
450
+ else if (typeof result?.output === 'string') {
451
+ content = result.output;
452
+ }
453
+ const toolCalls = Array.isArray(result?.toolCalls)
454
+ ? result.toolCalls.map((toolCall) => ({
455
+ tool: toolCall.tool || toolCall.name || 'unknown',
456
+ input: toolCall.input || toolCall.arguments,
457
+ output: toolCall.output || toolCall.result,
458
+ duration: toolCall.duration || 0,
459
+ success: toolCall.success ?? !toolCall.error,
460
+ error: toolCall.error
461
+ }))
462
+ : [];
463
+ const tokensUsed = result?.usage?.total_tokens || this.lastTokenUsage;
464
+ this.lastTokenUsage = tokensUsed;
465
+ return { content, toolCalls, tokensUsed };
466
+ }
467
+ updateMetrics(startTime, success) {
468
+ const processingTime = Date.now() - startTime;
469
+ this.metrics.totalMessages++;
470
+ this.metrics.averageResponseTime =
471
+ (this.metrics.averageResponseTime * (this.metrics.totalMessages - 1) + processingTime) /
472
+ this.metrics.totalMessages;
473
+ if (!success) {
474
+ this.metrics.errorCount++;
475
+ }
476
+ this.metrics.successRate =
477
+ ((this.metrics.totalMessages - this.metrics.errorCount) / this.metrics.totalMessages) * 100;
478
+ }
479
+ // =============================================================================
480
+ // Static Factory Methods
481
+ // =============================================================================
482
+ static createTradingAgent(config) {
483
+ const tradingConfig = {
484
+ ...config,
485
+ capabilities: [
486
+ 'trading_controller_management',
487
+ 'exchange_connectivity',
488
+ 'market_data_analysis',
489
+ 'risk_management',
490
+ 'portfolio_optimization',
491
+ ...(config.prompt?.capabilities || [])
492
+ ]
493
+ };
494
+ return new StandardAgent(tradingConfig);
495
+ }
496
+ static createDataAnalysisAgent(config) {
497
+ const analysisConfig = {
498
+ ...config,
499
+ capabilities: [
500
+ 'data_collection',
501
+ 'statistical_analysis',
502
+ 'pattern_recognition',
503
+ 'report_generation',
504
+ 'visualization',
505
+ ...(config.prompt?.capabilities || [])
506
+ ]
507
+ };
508
+ return new StandardAgent(analysisConfig);
509
+ }
510
+ static createCustomerServiceAgent(config) {
511
+ const serviceConfig = {
512
+ ...config,
513
+ capabilities: [
514
+ 'question_answering',
515
+ 'knowledge_base_search',
516
+ 'issue_escalation',
517
+ 'conversation_management',
518
+ 'sentiment_analysis',
519
+ ...(config.prompt?.capabilities || [])
520
+ ]
521
+ };
522
+ return new StandardAgent(serviceConfig);
523
+ }
524
+ }
525
+ /**
526
+ * Agent builder for fluent configuration
527
+ */
528
+ export class AgentBuilder {
529
+ constructor() {
530
+ this.config = { name: 'unnamed_agent' };
531
+ }
532
+ setName(name) {
533
+ this.config.name = name;
534
+ return this;
535
+ }
536
+ setDescription(description) {
537
+ this.config.description = description;
538
+ return this;
539
+ }
540
+ setLLM(llmConfig) {
541
+ this.config.llm = llmConfig;
542
+ return this;
543
+ }
544
+ setAgentKit(agentKitConfig) {
545
+ this.config.agentKit = agentKitConfig;
546
+ return this;
547
+ }
548
+ setTools(toolsConfig) {
549
+ this.config.tools = toolsConfig;
550
+ return this;
551
+ }
552
+ setPrompt(promptConfig) {
553
+ this.config.prompt = promptConfig;
554
+ return this;
555
+ }
556
+ setMemory(memoryConfig) {
557
+ this.config.memory = memoryConfig;
558
+ return this;
559
+ }
560
+ setServices(servicesConfig) {
561
+ this.config.services = servicesConfig;
562
+ return this;
563
+ }
564
+ addCustomTool(tool) {
565
+ if (!this.config.tools) {
566
+ this.config.tools = {};
567
+ }
568
+ if (!this.config.tools.customTools) {
569
+ this.config.tools.customTools = [];
570
+ }
571
+ this.config.tools.customTools.push(tool);
572
+ return this;
573
+ }
574
+ async build() {
575
+ return new StandardAgent(this.config);
576
+ }
577
+ }
578
+ /**
579
+ * Utility functions for agent management
580
+ */
581
+ export class AgentUtils {
582
+ static validateConfig(config) {
583
+ const errors = [];
584
+ if (!config.name || config.name.trim() === '') {
585
+ errors.push('Agent name is required');
586
+ }
587
+ if (config.tools?.enableAgentKit) {
588
+ if (!config.agentKit?.cdpApiKeyId || !config.agentKit?.cdpApiKeySecret) {
589
+ errors.push('AgentKit requires CDP API credentials');
590
+ }
591
+ }
592
+ if (config.tools?.enableMCP && !config.tools?.mcpServerUrl) {
593
+ errors.push('MCP tools require MCP server URL');
594
+ }
595
+ return {
596
+ valid: errors.length === 0,
597
+ errors
598
+ };
599
+ }
600
+ static getEnvironmentConfig() {
601
+ return {
602
+ name: process.env.AGENT_NAME || 'environment_agent',
603
+ llm: {
604
+ model: process.env.LLM_MODEL || 'gpt-4o-mini',
605
+ openAIApiKey: process.env.OPENAI_API_KEY
606
+ },
607
+ agentKit: {
608
+ networkId: process.env.NETWORK_ID || 'base-sepolia',
609
+ cdpApiKeyId: process.env.CDP_API_KEY_ID,
610
+ cdpApiKeySecret: process.env.CDP_API_KEY_SECRET,
611
+ walletDataFile: process.env.WALLET_DATA_FILE || 'wallet_data.txt'
612
+ },
613
+ tools: {
614
+ enableAgentKit: !!process.env.CDP_API_KEY_ID,
615
+ enableMCP: !!process.env.MCP_SERVER_URL,
616
+ enableRAG: !!process.env.RAG_SERVER_URL,
617
+ mcpServerUrl: process.env.HUMMINGBOT_MCP_URL || 'http://localhost:8000',
618
+ ragServerUrl: process.env.RAG_MCP_URL || 'http://localhost:3002'
619
+ },
620
+ memory: {
621
+ enabled: true,
622
+ persistentThreadId: true,
623
+ maxMessages: parseInt(process.env.MAX_MESSAGES || '100')
624
+ },
625
+ services: {
626
+ messageService: true,
627
+ ragService: !!process.env.RAG_SERVER_URL,
628
+ loggingEnabled: process.env.NODE_ENV !== 'production'
629
+ }
630
+ };
631
+ }
632
+ }
633
+ //# sourceMappingURL=core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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"}