@juspay/neurolink 6.1.0 → 6.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.
Files changed (303) hide show
  1. package/CHANGELOG.md +16 -6
  2. package/dist/agent/direct-tools.js +6 -5
  3. package/dist/cli/commands/config.d.ts +13 -13
  4. package/dist/cli/index.js +3 -9
  5. package/dist/config/configManager.js +11 -10
  6. package/dist/core/analytics.d.ts +11 -1
  7. package/dist/core/analytics.js +2 -2
  8. package/dist/core/base-provider.js +4 -18
  9. package/dist/core/dynamic-models.d.ts +8 -8
  10. package/dist/core/factory.js +3 -11
  11. package/dist/index.d.ts +2 -4
  12. package/dist/index.js +2 -11
  13. package/dist/lib/agent/direct-tools.js +6 -5
  14. package/dist/lib/config/configManager.js +11 -10
  15. package/dist/lib/core/analytics.d.ts +11 -1
  16. package/dist/lib/core/analytics.js +2 -2
  17. package/dist/lib/core/base-provider.js +4 -18
  18. package/dist/lib/core/dynamic-models.d.ts +8 -8
  19. package/dist/lib/core/factory.js +3 -11
  20. package/dist/lib/index.d.ts +2 -4
  21. package/dist/lib/index.js +2 -11
  22. package/dist/lib/mcp/factory.d.ts +1 -1
  23. package/dist/lib/mcp/index.d.ts +9 -21
  24. package/dist/lib/mcp/index.js +16 -57
  25. package/dist/lib/mcp/registry.js +1 -1
  26. package/dist/lib/mcp/servers/ai-providers/ai-analysis-tools.js +2 -1
  27. package/dist/lib/mcp/tool-registry.js +1 -1
  28. package/dist/lib/neurolink.d.ts +1 -9
  29. package/dist/lib/neurolink.js +22 -71
  30. package/dist/lib/providers/amazon-bedrock.js +5 -16
  31. package/dist/lib/providers/anthropic-baseprovider.js +3 -21
  32. package/dist/lib/providers/anthropic.js +4 -7
  33. package/dist/lib/providers/azure-openai.js +6 -3
  34. package/dist/lib/providers/google-vertex.js +5 -9
  35. package/dist/lib/providers/huggingFace.js +5 -10
  36. package/dist/lib/providers/mistral.js +5 -8
  37. package/dist/lib/providers/openAI.js +4 -7
  38. package/dist/lib/telemetry/index.js +2 -1
  39. package/dist/lib/utils/logger.d.ts +62 -2
  40. package/dist/lib/utils/logger.js +174 -9
  41. package/dist/lib/utils/providerConfig.d.ts +117 -0
  42. package/dist/lib/utils/providerConfig.js +353 -0
  43. package/dist/lib/utils/providerUtils.d.ts +2 -1
  44. package/dist/lib/utils/providerUtils.js +53 -36
  45. package/dist/lib/utils/timeout.d.ts +72 -1
  46. package/dist/lib/utils/timeout.js +203 -2
  47. package/dist/mcp/factory.d.ts +1 -1
  48. package/dist/mcp/index.d.ts +9 -21
  49. package/dist/mcp/index.js +16 -57
  50. package/dist/mcp/registry.js +1 -1
  51. package/dist/mcp/servers/ai-providers/ai-analysis-tools.js +2 -1
  52. package/dist/mcp/tool-registry.js +1 -1
  53. package/dist/neurolink.d.ts +1 -9
  54. package/dist/neurolink.js +22 -71
  55. package/dist/providers/amazon-bedrock.js +5 -16
  56. package/dist/providers/anthropic-baseprovider.js +3 -21
  57. package/dist/providers/anthropic.js +4 -7
  58. package/dist/providers/azure-openai.js +6 -3
  59. package/dist/providers/google-vertex.js +5 -9
  60. package/dist/providers/huggingFace.js +5 -10
  61. package/dist/providers/mistral.js +5 -8
  62. package/dist/providers/openAI.js +4 -7
  63. package/dist/telemetry/index.js +2 -1
  64. package/dist/utils/logger.d.ts +62 -2
  65. package/dist/utils/logger.js +174 -9
  66. package/dist/utils/providerConfig.d.ts +117 -0
  67. package/dist/utils/providerConfig.js +353 -0
  68. package/dist/utils/providerUtils.d.ts +2 -1
  69. package/dist/utils/providerUtils.js +53 -36
  70. package/dist/utils/timeout.d.ts +72 -1
  71. package/dist/utils/timeout.js +203 -2
  72. package/package.json +1 -1
  73. package/dist/chat/client-utils.d.ts +0 -95
  74. package/dist/chat/client-utils.js +0 -315
  75. package/dist/chat/index.d.ts +0 -24
  76. package/dist/chat/index.js +0 -33
  77. package/dist/chat/session-storage.d.ts +0 -77
  78. package/dist/chat/session-storage.js +0 -233
  79. package/dist/chat/session.d.ts +0 -96
  80. package/dist/chat/session.js +0 -257
  81. package/dist/chat/sse-handler.d.ts +0 -49
  82. package/dist/chat/sse-handler.js +0 -259
  83. package/dist/chat/types.d.ts +0 -74
  84. package/dist/chat/types.js +0 -5
  85. package/dist/chat/websocket-chat-handler.d.ts +0 -37
  86. package/dist/chat/websocket-chat-handler.js +0 -262
  87. package/dist/cli/commands/mcp.d.ts +0 -20
  88. package/dist/cli/commands/mcp.js +0 -1272
  89. package/dist/core/defaults.d.ts +0 -19
  90. package/dist/core/defaults.js +0 -29
  91. package/dist/core/evaluation-config.d.ts +0 -29
  92. package/dist/core/evaluation-config.js +0 -144
  93. package/dist/factories/compatibility-factory.d.ts +0 -35
  94. package/dist/factories/compatibility-factory.js +0 -71
  95. package/dist/factories/provider-generate-factory.d.ts +0 -20
  96. package/dist/factories/provider-generate-factory.js +0 -93
  97. package/dist/lib/chat/client-utils.d.ts +0 -95
  98. package/dist/lib/chat/client-utils.js +0 -315
  99. package/dist/lib/chat/index.d.ts +0 -24
  100. package/dist/lib/chat/index.js +0 -33
  101. package/dist/lib/chat/session-storage.d.ts +0 -77
  102. package/dist/lib/chat/session-storage.js +0 -233
  103. package/dist/lib/chat/session.d.ts +0 -96
  104. package/dist/lib/chat/session.js +0 -257
  105. package/dist/lib/chat/sse-handler.d.ts +0 -49
  106. package/dist/lib/chat/sse-handler.js +0 -259
  107. package/dist/lib/chat/types.d.ts +0 -74
  108. package/dist/lib/chat/types.js +0 -5
  109. package/dist/lib/chat/websocket-chat-handler.d.ts +0 -37
  110. package/dist/lib/chat/websocket-chat-handler.js +0 -262
  111. package/dist/lib/core/defaults.d.ts +0 -19
  112. package/dist/lib/core/defaults.js +0 -29
  113. package/dist/lib/core/evaluation-config.d.ts +0 -29
  114. package/dist/lib/core/evaluation-config.js +0 -144
  115. package/dist/lib/factories/compatibility-factory.d.ts +0 -35
  116. package/dist/lib/factories/compatibility-factory.js +0 -71
  117. package/dist/lib/factories/provider-generate-factory.d.ts +0 -20
  118. package/dist/lib/factories/provider-generate-factory.js +0 -93
  119. package/dist/lib/mcp/adapters/plugin-bridge.d.ts +0 -40
  120. package/dist/lib/mcp/adapters/plugin-bridge.js +0 -89
  121. package/dist/lib/mcp/auto-discovery.d.ts +0 -62
  122. package/dist/lib/mcp/auto-discovery.js +0 -149
  123. package/dist/lib/mcp/client.d.ts +0 -68
  124. package/dist/lib/mcp/client.js +0 -248
  125. package/dist/lib/mcp/config.d.ts +0 -31
  126. package/dist/lib/mcp/config.js +0 -99
  127. package/dist/lib/mcp/context-manager.d.ts +0 -171
  128. package/dist/lib/mcp/context-manager.js +0 -362
  129. package/dist/lib/mcp/contracts/mcp-contract.d.ts +0 -169
  130. package/dist/lib/mcp/contracts/mcp-contract.js +0 -58
  131. package/dist/lib/mcp/core/plugin-manager.d.ts +0 -46
  132. package/dist/lib/mcp/core/plugin-manager.js +0 -110
  133. package/dist/lib/mcp/demo/plugin-demo.d.ts +0 -20
  134. package/dist/lib/mcp/demo/plugin-demo.js +0 -118
  135. package/dist/lib/mcp/dynamic-chain-executor.d.ts +0 -225
  136. package/dist/lib/mcp/dynamic-chain-executor.js +0 -489
  137. package/dist/lib/mcp/dynamic-orchestrator.d.ts +0 -115
  138. package/dist/lib/mcp/dynamic-orchestrator.js +0 -351
  139. package/dist/lib/mcp/ecosystem.d.ts +0 -75
  140. package/dist/lib/mcp/ecosystem.js +0 -161
  141. package/dist/lib/mcp/error-manager.d.ts +0 -254
  142. package/dist/lib/mcp/error-manager.js +0 -501
  143. package/dist/lib/mcp/error-recovery.d.ts +0 -159
  144. package/dist/lib/mcp/error-recovery.js +0 -405
  145. package/dist/lib/mcp/external-client.d.ts +0 -88
  146. package/dist/lib/mcp/external-client.js +0 -331
  147. package/dist/lib/mcp/external-manager.d.ts +0 -112
  148. package/dist/lib/mcp/external-manager.js +0 -308
  149. package/dist/lib/mcp/function-calling.d.ts +0 -65
  150. package/dist/lib/mcp/function-calling.js +0 -642
  151. package/dist/lib/mcp/health-monitor.d.ts +0 -257
  152. package/dist/lib/mcp/health-monitor.js +0 -630
  153. package/dist/lib/mcp/initialize-tools.d.ts +0 -29
  154. package/dist/lib/mcp/initialize-tools.js +0 -261
  155. package/dist/lib/mcp/initialize.d.ts +0 -18
  156. package/dist/lib/mcp/initialize.js +0 -62
  157. package/dist/lib/mcp/logging.d.ts +0 -38
  158. package/dist/lib/mcp/logging.js +0 -100
  159. package/dist/lib/mcp/manager.d.ts +0 -68
  160. package/dist/lib/mcp/manager.js +0 -176
  161. package/dist/lib/mcp/neurolink-mcp-client.d.ts +0 -97
  162. package/dist/lib/mcp/neurolink-mcp-client.js +0 -462
  163. package/dist/lib/mcp/orchestrator.d.ts +0 -302
  164. package/dist/lib/mcp/orchestrator.js +0 -703
  165. package/dist/lib/mcp/plugin-manager.d.ts +0 -98
  166. package/dist/lib/mcp/plugin-manager.js +0 -296
  167. package/dist/lib/mcp/plugins/core/filesystem-mcp.d.ts +0 -36
  168. package/dist/lib/mcp/plugins/core/filesystem-mcp.js +0 -142
  169. package/dist/lib/mcp/plugins/filesystem-mcp.d.ts +0 -37
  170. package/dist/lib/mcp/plugins/filesystem-mcp.js +0 -54
  171. package/dist/lib/mcp/security-manager.d.ts +0 -87
  172. package/dist/lib/mcp/security-manager.js +0 -344
  173. package/dist/lib/mcp/semaphore-manager.d.ts +0 -137
  174. package/dist/lib/mcp/semaphore-manager.js +0 -329
  175. package/dist/lib/mcp/session-manager.d.ts +0 -187
  176. package/dist/lib/mcp/session-manager.js +0 -400
  177. package/dist/lib/mcp/session-persistence.d.ts +0 -93
  178. package/dist/lib/mcp/session-persistence.js +0 -301
  179. package/dist/lib/mcp/tool-integration.d.ts +0 -58
  180. package/dist/lib/mcp/tool-integration.js +0 -203
  181. package/dist/lib/mcp/transport-manager.d.ts +0 -154
  182. package/dist/lib/mcp/transport-manager.js +0 -334
  183. package/dist/lib/mcp/unified-mcp.d.ts +0 -133
  184. package/dist/lib/mcp/unified-mcp.js +0 -251
  185. package/dist/lib/mcp/unified-registry.d.ts +0 -165
  186. package/dist/lib/mcp/unified-registry.js +0 -538
  187. package/dist/lib/providers/analytics-helper.d.ts +0 -38
  188. package/dist/lib/providers/analytics-helper.js +0 -216
  189. package/dist/lib/providers/function-calling-provider.d.ts +0 -142
  190. package/dist/lib/providers/function-calling-provider.js +0 -630
  191. package/dist/lib/providers/mcp-provider.d.ts +0 -75
  192. package/dist/lib/providers/mcp-provider.js +0 -283
  193. package/dist/lib/providers/timeout-wrapper.d.ts +0 -40
  194. package/dist/lib/providers/timeout-wrapper.js +0 -100
  195. package/dist/lib/sdk/tool-extension.d.ts +0 -181
  196. package/dist/lib/sdk/tool-extension.js +0 -284
  197. package/dist/lib/services/streaming/streaming-manager.d.ts +0 -29
  198. package/dist/lib/services/streaming/streaming-manager.js +0 -245
  199. package/dist/lib/services/types.d.ts +0 -156
  200. package/dist/lib/services/types.js +0 -2
  201. package/dist/lib/services/websocket/websocket-server.d.ts +0 -34
  202. package/dist/lib/services/websocket/websocket-server.js +0 -305
  203. package/dist/lib/utils/provider-validation.d.ts +0 -36
  204. package/dist/lib/utils/provider-validation.js +0 -625
  205. package/dist/lib/utils/providerUtils-fixed.d.ts +0 -8
  206. package/dist/lib/utils/providerUtils-fixed.js +0 -94
  207. package/dist/lib/utils/streaming-utils.d.ts +0 -79
  208. package/dist/lib/utils/streaming-utils.js +0 -198
  209. package/dist/lib/utils/timeout-manager.d.ts +0 -75
  210. package/dist/lib/utils/timeout-manager.js +0 -244
  211. package/dist/mcp/adapters/plugin-bridge.d.ts +0 -40
  212. package/dist/mcp/adapters/plugin-bridge.js +0 -89
  213. package/dist/mcp/auto-discovery.d.ts +0 -62
  214. package/dist/mcp/auto-discovery.js +0 -149
  215. package/dist/mcp/client.d.ts +0 -68
  216. package/dist/mcp/client.js +0 -248
  217. package/dist/mcp/config.d.ts +0 -31
  218. package/dist/mcp/config.js +0 -99
  219. package/dist/mcp/context-manager.d.ts +0 -171
  220. package/dist/mcp/context-manager.js +0 -362
  221. package/dist/mcp/contracts/mcp-contract.d.ts +0 -169
  222. package/dist/mcp/contracts/mcp-contract.js +0 -58
  223. package/dist/mcp/core/plugin-manager.d.ts +0 -46
  224. package/dist/mcp/core/plugin-manager.js +0 -110
  225. package/dist/mcp/demo/plugin-demo.d.ts +0 -20
  226. package/dist/mcp/demo/plugin-demo.js +0 -118
  227. package/dist/mcp/dynamic-chain-executor.d.ts +0 -225
  228. package/dist/mcp/dynamic-chain-executor.js +0 -489
  229. package/dist/mcp/dynamic-orchestrator.d.ts +0 -115
  230. package/dist/mcp/dynamic-orchestrator.js +0 -351
  231. package/dist/mcp/ecosystem.d.ts +0 -75
  232. package/dist/mcp/ecosystem.js +0 -162
  233. package/dist/mcp/error-manager.d.ts +0 -254
  234. package/dist/mcp/error-manager.js +0 -501
  235. package/dist/mcp/error-recovery.d.ts +0 -159
  236. package/dist/mcp/error-recovery.js +0 -405
  237. package/dist/mcp/external-client.d.ts +0 -88
  238. package/dist/mcp/external-client.js +0 -331
  239. package/dist/mcp/external-manager.d.ts +0 -112
  240. package/dist/mcp/external-manager.js +0 -308
  241. package/dist/mcp/function-calling.d.ts +0 -65
  242. package/dist/mcp/function-calling.js +0 -642
  243. package/dist/mcp/health-monitor.d.ts +0 -257
  244. package/dist/mcp/health-monitor.js +0 -630
  245. package/dist/mcp/initialize-tools.d.ts +0 -29
  246. package/dist/mcp/initialize-tools.js +0 -262
  247. package/dist/mcp/initialize.d.ts +0 -18
  248. package/dist/mcp/initialize.js +0 -62
  249. package/dist/mcp/logging.d.ts +0 -38
  250. package/dist/mcp/logging.js +0 -100
  251. package/dist/mcp/manager.d.ts +0 -68
  252. package/dist/mcp/manager.js +0 -176
  253. package/dist/mcp/neurolink-mcp-client.d.ts +0 -97
  254. package/dist/mcp/neurolink-mcp-client.js +0 -462
  255. package/dist/mcp/orchestrator.d.ts +0 -302
  256. package/dist/mcp/orchestrator.js +0 -703
  257. package/dist/mcp/plugin-manager.d.ts +0 -98
  258. package/dist/mcp/plugin-manager.js +0 -297
  259. package/dist/mcp/plugins/core/filesystem-mcp.d.ts +0 -36
  260. package/dist/mcp/plugins/core/filesystem-mcp.js +0 -142
  261. package/dist/mcp/plugins/core/neurolink-mcp.json +0 -17
  262. package/dist/mcp/plugins/filesystem-mcp.d.ts +0 -37
  263. package/dist/mcp/plugins/filesystem-mcp.js +0 -54
  264. package/dist/mcp/security-manager.d.ts +0 -87
  265. package/dist/mcp/security-manager.js +0 -344
  266. package/dist/mcp/semaphore-manager.d.ts +0 -137
  267. package/dist/mcp/semaphore-manager.js +0 -329
  268. package/dist/mcp/session-manager.d.ts +0 -187
  269. package/dist/mcp/session-manager.js +0 -400
  270. package/dist/mcp/session-persistence.d.ts +0 -93
  271. package/dist/mcp/session-persistence.js +0 -302
  272. package/dist/mcp/tool-integration.d.ts +0 -58
  273. package/dist/mcp/tool-integration.js +0 -203
  274. package/dist/mcp/transport-manager.d.ts +0 -154
  275. package/dist/mcp/transport-manager.js +0 -335
  276. package/dist/mcp/unified-mcp.d.ts +0 -133
  277. package/dist/mcp/unified-mcp.js +0 -251
  278. package/dist/mcp/unified-registry.d.ts +0 -165
  279. package/dist/mcp/unified-registry.js +0 -539
  280. package/dist/providers/analytics-helper.d.ts +0 -38
  281. package/dist/providers/analytics-helper.js +0 -216
  282. package/dist/providers/function-calling-provider.d.ts +0 -142
  283. package/dist/providers/function-calling-provider.js +0 -630
  284. package/dist/providers/mcp-provider.d.ts +0 -75
  285. package/dist/providers/mcp-provider.js +0 -283
  286. package/dist/providers/timeout-wrapper.d.ts +0 -40
  287. package/dist/providers/timeout-wrapper.js +0 -100
  288. package/dist/sdk/tool-extension.d.ts +0 -181
  289. package/dist/sdk/tool-extension.js +0 -284
  290. package/dist/services/streaming/streaming-manager.d.ts +0 -29
  291. package/dist/services/streaming/streaming-manager.js +0 -245
  292. package/dist/services/types.d.ts +0 -156
  293. package/dist/services/types.js +0 -2
  294. package/dist/services/websocket/websocket-server.d.ts +0 -34
  295. package/dist/services/websocket/websocket-server.js +0 -306
  296. package/dist/utils/provider-validation.d.ts +0 -36
  297. package/dist/utils/provider-validation.js +0 -625
  298. package/dist/utils/providerUtils-fixed.d.ts +0 -8
  299. package/dist/utils/providerUtils-fixed.js +0 -94
  300. package/dist/utils/streaming-utils.d.ts +0 -79
  301. package/dist/utils/streaming-utils.js +0 -198
  302. package/dist/utils/timeout-manager.d.ts +0 -75
  303. package/dist/utils/timeout-manager.js +0 -244
@@ -1,462 +0,0 @@
1
- /**
2
- * NeuroLink MCP Client with Automatic Tool Detection
3
- * Implements automatic tool execution based on prompt analysis
4
- * Following Lighthouse's pattern of prompt-based tool invocation
5
- */
6
- import { EventEmitter } from "events";
7
- import { logger } from "../utils/logger.js";
8
- import { v4 as uuidv4 } from "uuid";
9
- import { DEFAULT_MAX_TOKENS } from "../core/constants.js";
10
- /**
11
- * NeuroLink MCP Client with Automatic Tool Detection
12
- */
13
- export class NeuroLinkMCPClient extends EventEmitter {
14
- provider;
15
- tools = new Map();
16
- toolPatterns = [];
17
- config;
18
- sessionId;
19
- executionCount = 0;
20
- constructor(config) {
21
- super();
22
- this.provider = config.provider;
23
- this.config = config;
24
- this.sessionId = config.sessionId || uuidv4();
25
- this.initializeDefaultPatterns();
26
- logger.info(`[NeuroLink MCP Client] Initialized with automatic tool detection`, {
27
- sessionId: this.sessionId,
28
- provider: config.providerName,
29
- model: config.modelName,
30
- });
31
- }
32
- /**
33
- * Initialize default tool detection patterns
34
- */
35
- initializeDefaultPatterns() {
36
- // NO HARDCODED PATTERNS! Let AI decide which tools to use
37
- // This is TRUE automatic tool detection
38
- }
39
- /**
40
- * Register a tool with automatic detection patterns
41
- */
42
- registerTool(tool, patterns) {
43
- this.tools.set(tool.name, tool);
44
- // Add custom patterns if provided
45
- if (patterns) {
46
- this.toolPatterns.push(patterns);
47
- }
48
- logger.debug(`[NeuroLink MCP Client] Registered tool: ${tool.name}`, {
49
- hasPatterns: !!patterns,
50
- sessionId: this.sessionId,
51
- });
52
- this.emit("tool:registered", { toolName: tool.name });
53
- }
54
- /**
55
- * Extract tool parameters using AI
56
- * No hardcoded patterns - let AI figure out the parameters
57
- */
58
- async extractToolParameters(toolName, tool, prompt) {
59
- // If the tool has no input schema, no parameters needed
60
- if (!tool.inputSchema) {
61
- return {};
62
- }
63
- // Get the schema information
64
- let schemaDescription = "";
65
- try {
66
- // Convert schema to a readable format
67
- if (typeof tool.inputSchema === "object" && tool.inputSchema !== null) {
68
- schemaDescription = JSON.stringify(tool.inputSchema, null, 2);
69
- }
70
- }
71
- catch (error) {
72
- logger.warn(`[NeuroLink MCP Client] Could not serialize schema for ${toolName}`);
73
- return {};
74
- }
75
- // Ask AI to extract parameters
76
- const extractionPrompt = `Extract the parameters needed for the tool "${toolName}" from the user prompt.
77
-
78
- Tool: ${toolName}
79
- Description: ${tool.description}
80
- Input Schema: ${schemaDescription}
81
-
82
- User prompt: "${prompt}"
83
-
84
- Instructions:
85
- 1. Analyze the user prompt to extract values for the tool parameters
86
- 2. Return ONLY a JSON object with the extracted parameters
87
- 3. If a parameter cannot be extracted from the prompt, omit it or use a reasonable default
88
- 4. Make sure the JSON is valid and matches the schema
89
-
90
- Examples:
91
- - Prompt: "What's the weather in New York?" → {"location": "New York"}
92
- - Prompt: "Calculate 5 + 3" → {"expression": "5 + 3"}
93
- - Prompt: "What time is it?" → {} (no parameters needed)
94
-
95
- Response (JSON object only):`;
96
- try {
97
- const response = await this.provider.generate({
98
- prompt: extractionPrompt,
99
- temperature: 0,
100
- maxTokens: 200,
101
- });
102
- if (response?.content) {
103
- // Extract JSON object from response
104
- const match = response.content.match(/\{([^}]*)\}/);
105
- if (match) {
106
- try {
107
- const params = JSON.parse(match[0]);
108
- logger.debug(`[NeuroLink MCP Client] Extracted parameters for ${toolName}`, params);
109
- return params;
110
- }
111
- catch (parseError) {
112
- logger.error(`[NeuroLink MCP Client] Failed to parse parameters`, parseError);
113
- }
114
- }
115
- }
116
- }
117
- catch (error) {
118
- logger.error(`[NeuroLink MCP Client] Failed to extract parameters with AI`, error);
119
- }
120
- return {};
121
- }
122
- /**
123
- * Analyze prompt to detect required tools
124
- * TRUE AUTOMATIC DETECTION - AI decides which tools to use
125
- */
126
- async analyzePrompt(prompt) {
127
- const detectedTools = [];
128
- // No patterns! Always use AI to detect tools
129
- if (this.tools.size > 0) {
130
- const toolList = Array.from(this.tools.values()).map((tool) => ({
131
- name: tool.name,
132
- description: tool.description,
133
- }));
134
- const analysisPrompt = `Analyze this user prompt and determine which tools should be used to answer it properly.
135
-
136
- User prompt: "${prompt}"
137
-
138
- Available tools:
139
- ${toolList.map((t) => `- ${t.name}: ${t.description}`).join("\n")}
140
-
141
- Instructions:
142
- 1. Analyze what the user is asking for
143
- 2. Determine which tools would be helpful to answer the question
144
- 3. Return ONLY a JSON array of tool names that should be used
145
- 4. If no tools are needed, return an empty array []
146
- 5. Be selective - only choose tools that are directly relevant
147
-
148
- Examples:
149
- - "What time is it?" → ["neurolink-utility_get-current-time"]
150
- - "Calculate 5 + 3" → ["neurolink-utility_calculator"]
151
- - "What is the capital of France?" → []
152
- - "What's the weather in NYC?" → ["neurolink-utility_get-weather"]
153
-
154
- Response (JSON array only):`;
155
- try {
156
- const response = await this.provider.generate({
157
- prompt: analysisPrompt,
158
- temperature: 0,
159
- maxTokens: 200,
160
- });
161
- if (response?.content) {
162
- // Extract JSON array from response
163
- const match = response.content.match(/\[([^\]]*)\]/);
164
- if (match) {
165
- try {
166
- const toolNames = JSON.parse(match[0]);
167
- // Filter to only include tools that actually exist
168
- const validTools = toolNames.filter((name) => {
169
- // Check exact match first
170
- if (this.tools.has(name)) {
171
- return true;
172
- }
173
- // Check for partial matches (e.g., "get-current-time" matches "neurolink-utility_get-current-time")
174
- for (const [registeredName] of this.tools) {
175
- if (registeredName.endsWith(`_${name}`) ||
176
- registeredName.includes(name)) {
177
- // Replace with the full registered name
178
- const index = toolNames.indexOf(name);
179
- if (index !== -1) {
180
- toolNames[index] = registeredName;
181
- }
182
- return true;
183
- }
184
- }
185
- return false;
186
- });
187
- detectedTools.push(...validTools);
188
- }
189
- catch (parseError) {
190
- logger.error(`[NeuroLink MCP Client] Failed to parse tool names`, parseError);
191
- }
192
- }
193
- }
194
- }
195
- catch (error) {
196
- logger.error(`[NeuroLink MCP Client] Failed to analyze prompt with AI`, error);
197
- }
198
- }
199
- logger.info(`[NeuroLink MCP Client] AI detected tools for prompt`, {
200
- prompt: prompt.substring(0, 50),
201
- detectedTools,
202
- sessionId: this.sessionId,
203
- });
204
- return detectedTools;
205
- }
206
- /**
207
- * Execute detected tools
208
- */
209
- async executeTools(toolNames, prompt) {
210
- const results = [];
211
- for (const toolName of toolNames) {
212
- const tool = this.tools.get(toolName);
213
- if (!tool) {
214
- logger.warn(`[NeuroLink MCP Client] Tool not found: ${toolName}`);
215
- continue;
216
- }
217
- // Extract parameters for the tool using AI
218
- const params = await this.extractToolParameters(toolName, tool, prompt);
219
- // Create execution context
220
- const context = {
221
- sessionId: this.sessionId,
222
- userId: this.config.userId || "anonymous",
223
- organizationId: this.config.organizationId || "default",
224
- aiProvider: this.config.providerName || "unknown",
225
- modelId: this.config.modelName,
226
- timestamp: Date.now(),
227
- // Required properties
228
- secureFS: {
229
- readFile: async () => {
230
- throw new Error("secureFS not configured");
231
- },
232
- writeFile: async () => {
233
- throw new Error("secureFS not configured");
234
- },
235
- readdir: async () => {
236
- throw new Error("secureFS not configured");
237
- },
238
- stat: async () => {
239
- throw new Error("secureFS not configured");
240
- },
241
- mkdir: async () => {
242
- throw new Error("secureFS not configured");
243
- },
244
- exists: async () => false,
245
- },
246
- path: {
247
- join: (...paths) => {
248
- const pathModule = require("path");
249
- return pathModule.join(...paths);
250
- },
251
- resolve: (...paths) => {
252
- const pathModule = require("path");
253
- return pathModule.resolve(...paths);
254
- },
255
- relative: (from, to) => {
256
- const pathModule = require("path");
257
- return pathModule.relative(from, to);
258
- },
259
- dirname: (pathArg) => {
260
- const pathModule = require("path");
261
- return pathModule.dirname(pathArg);
262
- },
263
- basename: (pathArg, ext) => {
264
- const pathModule = require("path");
265
- return pathModule.basename(pathArg, ext);
266
- },
267
- },
268
- grantedPermissions: [],
269
- log: console.log,
270
- };
271
- // Emit tool start event
272
- this.executionCount++;
273
- const executionId = `exec-${this.executionCount}`;
274
- this.emit("tool:start", {
275
- executionId,
276
- toolName,
277
- params,
278
- });
279
- const startTime = Date.now();
280
- try {
281
- // Execute the tool
282
- const result = await tool.execute(params, context);
283
- const executionTime = Date.now() - startTime;
284
- results.push({
285
- toolName,
286
- result,
287
- executionTime,
288
- });
289
- // Emit tool end event
290
- this.emit("tool:end", {
291
- executionId,
292
- toolName,
293
- result,
294
- executionTime,
295
- });
296
- logger.info(`[NeuroLink MCP Client] Tool executed successfully`, {
297
- toolName,
298
- executionTime,
299
- success: result.success,
300
- });
301
- }
302
- catch (error) {
303
- const executionTime = Date.now() - startTime;
304
- const errorResult = {
305
- success: false,
306
- error: error instanceof Error ? error.message : String(error),
307
- };
308
- results.push({
309
- toolName,
310
- result: errorResult,
311
- executionTime,
312
- });
313
- // Emit tool error event
314
- this.emit("tool:error", {
315
- executionId,
316
- toolName,
317
- error: errorResult.error,
318
- executionTime,
319
- });
320
- logger.error(`[NeuroLink MCP Client] Tool execution failed`, {
321
- toolName,
322
- error: errorResult.error,
323
- executionTime,
324
- });
325
- }
326
- }
327
- return results;
328
- }
329
- /**
330
- * Generate response with tool results incorporated
331
- */
332
- async generateResponse(prompt, toolResults) {
333
- // If no tools were used, generate regular response
334
- if (toolResults.length === 0) {
335
- const response = await this.provider.generate({ prompt });
336
- return response?.content || "";
337
- }
338
- // Extract human-readable results from tool executions
339
- const toolResultsText = toolResults
340
- .map((tr) => {
341
- if (tr.result.success && tr.result.data) {
342
- // Check if tool result has a displayString or other human-readable format
343
- const data = tr.result.data;
344
- // For time tool, use the displayString
345
- if (data.displayString) {
346
- return data.displayString;
347
- }
348
- // For other tools, try to extract meaningful text
349
- if (data.formatted) {
350
- return data.formatted;
351
- }
352
- // For complex results, create a summary
353
- if (typeof data === "object") {
354
- // Try to find the most relevant field
355
- if (data.result) {
356
- return String(data.result);
357
- }
358
- if (data.output) {
359
- return String(data.output);
360
- }
361
- if (data.text) {
362
- return String(data.text);
363
- }
364
- if (data.value) {
365
- return String(data.value);
366
- }
367
- // For time-specific fields
368
- if (data.localTime) {
369
- return `The current time is ${data.localTime} in ${data.actualTimezone || data.requestedTimezone}`;
370
- }
371
- }
372
- // Fallback to stringified result
373
- return JSON.stringify(data);
374
- }
375
- else {
376
- return `Tool ${tr.toolName} failed: ${tr.result.error}`;
377
- }
378
- })
379
- .join("\n");
380
- // For single tool results with displayString, return directly
381
- if (toolResults.length === 1) {
382
- const toolResult = toolResults[0];
383
- if (toolResult.result.success && toolResult.result.data) {
384
- const data = toolResult.result.data;
385
- if (typeof data.displayString === "string") {
386
- return data.displayString;
387
- }
388
- }
389
- }
390
- // For more complex queries, let the AI incorporate the results
391
- const enhancedPrompt = `User question: ${prompt}
392
-
393
- Tool results: ${toolResultsText}
394
-
395
- Please provide a natural response based on the tool results.`;
396
- // Generate final response
397
- const response = await this.provider.generate({
398
- prompt: enhancedPrompt,
399
- temperature: 0.7,
400
- maxTokens: DEFAULT_MAX_TOKENS,
401
- });
402
- return response?.content || toolResultsText;
403
- }
404
- /**
405
- * Send a prompt and automatically execute any needed tools
406
- */
407
- async sendPrompt(prompt) {
408
- logger.info(`[NeuroLink MCP Client] Processing prompt with automatic tool detection`, {
409
- prompt: prompt.substring(0, 100),
410
- sessionId: this.sessionId,
411
- });
412
- // Step 1: Analyze prompt for tool needs
413
- const toolsNeeded = await this.analyzePrompt(prompt);
414
- // Step 2: Execute tools if needed
415
- const toolResults = await this.executeTools(toolsNeeded, prompt);
416
- // Step 3: Generate response with tool results
417
- const response = await this.generateResponse(prompt, toolResults);
418
- return response;
419
- }
420
- /**
421
- * Get registered tools
422
- */
423
- getTools() {
424
- const tools = {};
425
- for (const [name, tool] of this.tools) {
426
- tools[name] = {
427
- name: name, // Include the tool name as a property
428
- description: tool.description,
429
- inputSchema: tool.inputSchema,
430
- };
431
- }
432
- return tools;
433
- }
434
- /**
435
- * Get session statistics
436
- */
437
- getStats() {
438
- return {
439
- sessionId: this.sessionId,
440
- toolCount: this.tools.size,
441
- patternCount: this.toolPatterns.length,
442
- executionCount: this.executionCount,
443
- provider: this.config.providerName,
444
- model: this.config.modelName,
445
- };
446
- }
447
- /**
448
- * Clean up resources
449
- */
450
- async cleanup() {
451
- this.tools.clear();
452
- this.toolPatterns = [];
453
- this.removeAllListeners();
454
- logger.info(`[NeuroLink MCP Client] Cleaned up session ${this.sessionId}`);
455
- }
456
- }
457
- /**
458
- * Create a new NeuroLink MCP Client instance
459
- */
460
- export function createNeuroLinkMCPClient(config) {
461
- return new NeuroLinkMCPClient(config);
462
- }