@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,538 +0,0 @@
1
- /**
2
- * Unified MCP Registry - Combines Multiple Registration Sources
3
- */
4
- import { autoRegisterMCPServers, } from "./auto-discovery.js";
5
- import { unifiedRegistryLogger } from "./logging.js";
6
- import { MCPToolRegistry, defaultToolRegistry, } from "./tool-registry.js";
7
- import { TransportManager, TransportConfigSchema, } from "./transport-manager.js";
8
- import { Client } from "@modelcontextprotocol/sdk/client/index.js";
9
- import { ErrorManager } from "./error-manager.js";
10
- import * as fs from "fs";
11
- import * as path from "path";
12
- /**
13
- * Unified registry combining multiple sources
14
- */
15
- export class UnifiedMCPRegistry extends MCPToolRegistry {
16
- errorManager;
17
- autoDiscoveryEnabled = true;
18
- autoDiscoveredServers = [];
19
- manualServers = new Map();
20
- availableServers = new Set();
21
- transportManager;
22
- activeConnections = new Map();
23
- constructor(errorManager = new ErrorManager()) {
24
- super();
25
- this.errorManager = errorManager;
26
- this.transportManager = new TransportManager(this.errorManager);
27
- }
28
- /**
29
- * Initialize with auto-discovery and manual config
30
- */
31
- async initialize(options = {}) {
32
- unifiedRegistryLogger.info("Initializing unified MCP registry...");
33
- // Import ProviderRegistry to check options
34
- const { ProviderRegistry } = await import("../factories/provider-registry.js");
35
- const registryOptions = ProviderRegistry.getOptions();
36
- // Only load manual config if explicitly enabled (CLI mode)
37
- if (registryOptions.enableManualMCP) {
38
- unifiedRegistryLogger.info("Manual MCP config enabled - loading .mcp-config.json");
39
- await this.loadManualConfig();
40
- await this.connectManualServers();
41
- }
42
- else {
43
- unifiedRegistryLogger.debug("Manual MCP config disabled - skipping .mcp-config.json");
44
- }
45
- if (this.autoDiscoveryEnabled) {
46
- const result = await autoRegisterMCPServers(options);
47
- unifiedRegistryLogger.info(`Auto-discovery complete: ${result.registered} registered, ${result.failed} failed`);
48
- // Register discovered plugins
49
- for (const plugin of result.plugins) {
50
- this.register(plugin);
51
- this.autoDiscoveredServers.push(plugin);
52
- this.availableServers.add(plugin.metadata.name);
53
- }
54
- }
55
- }
56
- /**
57
- * Load servers from .mcp-config.json
58
- */
59
- async loadManualConfig() {
60
- const configPath = path.join(process.cwd(), ".mcp-config.json");
61
- try {
62
- await fs.promises.access(configPath, fs.constants.F_OK);
63
- }
64
- catch {
65
- unifiedRegistryLogger.debug("No .mcp-config.json found");
66
- return;
67
- }
68
- try {
69
- const configContent = await fs.promises.readFile(configPath, "utf-8");
70
- const config = JSON.parse(configContent);
71
- if (!config.mcpServers) {
72
- unifiedRegistryLogger.debug("No mcpServers section in config");
73
- return;
74
- }
75
- unifiedRegistryLogger.info(`Loading ${Object.keys(config.mcpServers).length} servers from .mcp-config.json`);
76
- for (const [serverId, serverConfig] of Object.entries(config.mcpServers)) {
77
- try {
78
- // Convert server config to DiscoveredMCP format
79
- const discoveredMcp = {
80
- metadata: {
81
- name: serverId,
82
- version: "1.0.0",
83
- main: "index.js",
84
- engine: { neurolink: ">=4.0.0" },
85
- description: `MCP server: ${serverId}`,
86
- permissions: ["filesystem", "network"],
87
- },
88
- entryPath: serverConfig.command || "npx",
89
- source: "project",
90
- constructor: undefined,
91
- };
92
- // Register the server
93
- this.register(discoveredMcp);
94
- this.manualServers.set(serverId, serverConfig);
95
- this.availableServers.add(serverId);
96
- unifiedRegistryLogger.debug(`Registered manual server: ${serverId}`);
97
- }
98
- catch (error) {
99
- unifiedRegistryLogger.error(`Failed to register server ${serverId}:`, error instanceof Error ? error.message : String(error));
100
- }
101
- }
102
- unifiedRegistryLogger.info(`Manual config loaded: ${this.manualServers.size} servers registered`);
103
- }
104
- catch (error) {
105
- unifiedRegistryLogger.error("Failed to load manual config:", error instanceof Error ? error.message : String(error));
106
- }
107
- }
108
- /**
109
- * Connect to manually configured servers
110
- */
111
- async connectManualServers() {
112
- for (const [serverId, serverConfig] of this.manualServers.entries()) {
113
- try {
114
- unifiedRegistryLogger.info(`Connecting to manual server: ${serverId}`);
115
- // Use addExternalServer method which properly establishes connections
116
- await this.addExternalServer(serverId, {
117
- type: "stdio",
118
- command: serverConfig.command || "npx",
119
- args: serverConfig.args || [],
120
- env: serverConfig.env,
121
- });
122
- unifiedRegistryLogger.info(`Successfully connected manual server: ${serverId}`);
123
- }
124
- catch (error) {
125
- unifiedRegistryLogger.error(`Failed to connect manual server ${serverId}:`, error instanceof Error ? error.message : String(error));
126
- // Remove from available servers if connection fails
127
- this.availableServers.delete(serverId);
128
- }
129
- }
130
- }
131
- /**
132
- * Enable or disable auto-discovery
133
- */
134
- setAutoDiscovery(enabled) {
135
- this.autoDiscoveryEnabled = enabled;
136
- unifiedRegistryLogger.info(`Auto-discovery ${enabled ? "enabled" : "disabled"}`);
137
- }
138
- /**
139
- * Refresh discovery
140
- */
141
- async refresh(options = {}) {
142
- this.clear();
143
- this.autoDiscoveredServers = [];
144
- this.availableServers.clear();
145
- await this.initialize(options);
146
- }
147
- /**
148
- * Get total server count
149
- */
150
- getTotalServerCount() {
151
- return this.list().length + this.manualServers.size;
152
- }
153
- /**
154
- * Get available server count
155
- */
156
- getAvailableServerCount() {
157
- return this.availableServers.size;
158
- }
159
- /**
160
- * Get auto-discovered servers
161
- */
162
- getAutoDiscoveredServers() {
163
- return this.autoDiscoveredServers;
164
- }
165
- /**
166
- * Get manual servers
167
- */
168
- getManualServers() {
169
- return this.manualServers;
170
- }
171
- /**
172
- * List all tools from all registered plugins
173
- */
174
- async listAllTools() {
175
- const allTools = [];
176
- try {
177
- // FIXED: Get built-in tools from defaultToolRegistry where they are actually registered
178
- const builtInTools = await defaultToolRegistry.listTools();
179
- allTools.push(...builtInTools.map((tool) => ({
180
- ...tool,
181
- id: tool.name,
182
- serverId: tool.serverId || "built-in",
183
- source: "built-in",
184
- isExternal: false,
185
- })));
186
- unifiedRegistryLogger.debug(`Found ${builtInTools.length} built-in tools from defaultToolRegistry`);
187
- }
188
- catch (error) {
189
- unifiedRegistryLogger.warn("Failed to get built-in tools:", error);
190
- }
191
- // FIXED: Get tools from external servers with proper error handling
192
- // Use the internal plugin registry for accurate server listing
193
- const plugins = Array.from(this.plugins.values());
194
- const externalToolPromises = [];
195
- for (const plugin of plugins) {
196
- if (plugin.metadata?.name &&
197
- this.availableServers.has(plugin.metadata.name)) {
198
- const connection = this.activeConnections.get(plugin.metadata.name);
199
- if (connection) {
200
- externalToolPromises.push(connection
201
- .listTools()
202
- .then((response) => {
203
- const serverTools = response.tools || [];
204
- allTools.push(...serverTools.map((tool) => ({
205
- name: tool.name,
206
- description: tool.description,
207
- inputSchema: tool.inputSchema,
208
- serverId: plugin.metadata.name,
209
- id: `${plugin.metadata.name}.${tool.name}`,
210
- source: "external",
211
- isExternal: true,
212
- })));
213
- unifiedRegistryLogger.debug(`Found ${serverTools.length} tools from ${plugin.metadata.name}`);
214
- })
215
- .catch((error) => {
216
- unifiedRegistryLogger.warn(`Failed to get tools from ${plugin.metadata.name}:`, error);
217
- }));
218
- }
219
- }
220
- }
221
- await Promise.all(externalToolPromises);
222
- unifiedRegistryLogger.info(`Total tools available: ${allTools.length}`);
223
- return allTools;
224
- }
225
- /**
226
- * Execute a tool through the registry with fallback to direct MCP execution
227
- */
228
- async executeTool(toolName, args, context) {
229
- unifiedRegistryLogger.info(`Executing tool: ${toolName}`);
230
- // STEP 1: Try built-in tools first from defaultToolRegistry
231
- try {
232
- const result = await defaultToolRegistry.executeTool(toolName, args, context);
233
- unifiedRegistryLogger.info(`Tool ${toolName} executed successfully via defaultToolRegistry`);
234
- return result;
235
- }
236
- catch (builtInError) {
237
- unifiedRegistryLogger.debug(`Built-in tool execution failed: ${builtInError.message}`);
238
- }
239
- // STEP 2: Try external MCP servers
240
- try {
241
- const result = await this.executeToolViaMCPServer(toolName, args, context);
242
- unifiedRegistryLogger.info(`Tool ${toolName} executed successfully via external MCP server`);
243
- return result;
244
- }
245
- catch (externalError) {
246
- unifiedRegistryLogger.debug(`External MCP execution failed: ${externalError.message}`);
247
- }
248
- // STEP 3: Comprehensive error with available tools
249
- const availableTools = await this.listAllTools();
250
- const toolNames = availableTools.map((t) => t.name).join(", ");
251
- const builtInTools = availableTools
252
- .filter((t) => !t.isExternal)
253
- .map((t) => t.name)
254
- .join(", ");
255
- const externalTools = availableTools
256
- .filter((t) => t.isExternal)
257
- .map((t) => `${t.serverId}.${t.name}`)
258
- .join(", ");
259
- const errorMessage = [
260
- `Tool '${toolName}' not found in any registry.`,
261
- `Available built-in tools: ${builtInTools || "none"}`,
262
- `Available external tools: ${externalTools || "none"}`,
263
- `Connected servers: ${Array.from(this.availableServers).join(", ") || "none"}`,
264
- ].join("\n");
265
- throw new Error(errorMessage);
266
- }
267
- /**
268
- * Execute tool via direct MCP server connection (fallback)
269
- */
270
- async executeToolViaMCPServer(toolName, args, context) {
271
- const configPath = path.join(process.cwd(), ".mcp-config.json");
272
- if (!fs.existsSync(configPath)) {
273
- throw new Error(`Tool '${toolName}' not found and no .mcp-config.json for fallback`);
274
- }
275
- const configContent = fs.readFileSync(configPath, "utf-8");
276
- const config = JSON.parse(configContent);
277
- if (!config.mcpServers) {
278
- throw new Error(`Tool '${toolName}' not found and no servers configured`);
279
- }
280
- // Try each configured server
281
- const errors = [];
282
- for (const [serverId, serverConfig] of Object.entries(config.mcpServers)) {
283
- try {
284
- unifiedRegistryLogger.debug(`Trying tool ${toolName} on server ${serverId}`);
285
- // Import the executeMCPTool function
286
- const { executeMCPTool } = await import("../../cli/commands/mcp.js");
287
- const typedServerConfig = serverConfig;
288
- const mcpServerConfig = {
289
- name: serverId,
290
- command: (typeof typedServerConfig.command === "string"
291
- ? typedServerConfig.command
292
- : "npx"),
293
- args: (Array.isArray(typedServerConfig.args)
294
- ? typedServerConfig.args
295
- : []),
296
- env: (typeof typedServerConfig.env === "object" &&
297
- typedServerConfig.env
298
- ? typedServerConfig.env
299
- : {}),
300
- cwd: typeof typedServerConfig.cwd === "string"
301
- ? typedServerConfig.cwd
302
- : undefined,
303
- transport: typedServerConfig.transport || "stdio",
304
- };
305
- const result = await executeMCPTool(mcpServerConfig, toolName, this.toJsonValue(args || {}));
306
- // Convert to ToolResult format
307
- const toolResult = {
308
- success: true,
309
- data: result,
310
- metadata: { toolName, serverId, sessionId: context?.sessionId },
311
- };
312
- unifiedRegistryLogger.info(`Tool ${toolName} executed successfully via server ${serverId}`);
313
- return toolResult;
314
- }
315
- catch (serverError) {
316
- const errorMsg = serverError instanceof Error
317
- ? serverError.message
318
- : String(serverError);
319
- errors.push(`${serverId}: ${errorMsg}`);
320
- unifiedRegistryLogger.debug(`Tool ${toolName} failed on server ${serverId}: ${errorMsg}`);
321
- }
322
- }
323
- throw new Error(`Tool '${toolName}' not found on any configured MCP server. Errors: ${errors.join("; ")}`);
324
- }
325
- /**
326
- * Lazily activate a server by ID
327
- */
328
- async lazyActivateServer(serverId) {
329
- unifiedRegistryLogger.info(`Lazy activating server: ${serverId}`);
330
- // Check if already activated
331
- if (this.availableServers.has(serverId)) {
332
- return true;
333
- }
334
- // Try to find and activate
335
- const plugin = this.get(serverId);
336
- if (plugin) {
337
- try {
338
- // Mark as available (initialization happens elsewhere)
339
- this.availableServers.add(serverId);
340
- return true;
341
- }
342
- catch (error) {
343
- unifiedRegistryLogger.error(`Failed to activate server ${serverId}:`, error);
344
- }
345
- }
346
- return false;
347
- }
348
- /**
349
- * Register a manual server
350
- */
351
- registerManualServer(id, server) {
352
- this.manualServers.set(id, server);
353
- this.availableServers.add(id);
354
- }
355
- /**
356
- * Get registry statistics (override parent method)
357
- */
358
- getStats() {
359
- // Return full stats interface as expected by MCPOrchestrator
360
- return super.getStats();
361
- }
362
- /**
363
- * Get detailed registry statistics
364
- */
365
- async getDetailedStats() {
366
- const plugins = this.list();
367
- const bySource = {};
368
- const byType = {};
369
- for (const plugin of plugins) {
370
- const source = plugin.source ||
371
- "unknown";
372
- bySource[source] = (bySource[source] || 0) + 1;
373
- // Extract type from name or metadata
374
- const type = plugin.metadata.name.split("/")[1]?.split("-")[0] || "unknown";
375
- byType[type] = (byType[type] || 0) + 1;
376
- }
377
- return {
378
- total: plugins.length,
379
- bySource,
380
- byType,
381
- manual: { servers: this.manualServers.size },
382
- auto: { servers: this.autoDiscoveredServers.length },
383
- tools: 0, // Will be populated when tools are registered
384
- };
385
- }
386
- /**
387
- * Add external MCP server programmatically
388
- *
389
- * @param serverId - Unique server identifier
390
- * @param config - Server configuration (stdio, sse, or http)
391
- */
392
- async addExternalServer(serverId, config) {
393
- unifiedRegistryLogger.info(`Adding external server: ${serverId} (${config.type})`);
394
- // Create server metadata
395
- const serverMeta = {
396
- metadata: {
397
- name: serverId,
398
- version: "1.0.0",
399
- main: "index.js",
400
- engine: { neurolink: ">=4.0.0" },
401
- description: `External ${config.type} server: ${serverId}`,
402
- permissions: ["network", "filesystem"],
403
- },
404
- entryPath: "",
405
- source: "installed",
406
- constructor: undefined,
407
- };
408
- // Register in internal registry
409
- this.register(serverMeta);
410
- this.manualServers.set(serverId, {
411
- ...config,
412
- name: serverId,
413
- command: config.command || "npx",
414
- });
415
- this.availableServers.add(serverId);
416
- // Establish actual connection to make server immediately reachable
417
- try {
418
- // Validate config for stdio transport (most common case)
419
- if (config.type === "stdio" && !config.command) {
420
- throw new Error("Command is required for stdio transport");
421
- }
422
- // Create transport with proper type validation
423
- // Validate config shape before creating transport
424
- const validatedConfig = TransportConfigSchema.parse(config);
425
- const transport = await this.transportManager.createTransport(validatedConfig);
426
- const client = new Client({
427
- name: "neurolink-client",
428
- version: "4.1.0",
429
- }, {
430
- capabilities: {
431
- tools: {},
432
- logging: {},
433
- },
434
- });
435
- // Connect the client
436
- await client.connect(transport);
437
- this.activeConnections.set(serverId, client);
438
- unifiedRegistryLogger.info(`Successfully connected to external server: ${serverId}`);
439
- unifiedRegistryLogger.info(`Successfully added external server: ${serverId}`);
440
- }
441
- catch (error) {
442
- const errorMessage = error instanceof Error ? error.message : String(error);
443
- unifiedRegistryLogger.warn(`Failed to establish connection to ${serverId}: ${errorMessage}. Server registered but not connected.`);
444
- unifiedRegistryLogger.info(`Successfully registered external server: ${serverId} but connection failed.`);
445
- }
446
- }
447
- /**
448
- * Get active connection for a server
449
- */
450
- getConnection(serverId) {
451
- return this.activeConnections.get(serverId);
452
- }
453
- /**
454
- * Check if server is actively connected
455
- */
456
- isConnected(serverId) {
457
- return this.activeConnections.has(serverId);
458
- }
459
- /**
460
- * Clear all registries and active connections (synchronous, preserves base API contract)
461
- */
462
- /**
463
- * Clear registries without closing connections (internal use)
464
- */
465
- clearRegistriesOnly() {
466
- super.clear();
467
- this.autoDiscoveredServers = [];
468
- this.manualServers.clear();
469
- this.availableServers.clear();
470
- }
471
- /**
472
- * Clear all registries and initiate async connection cleanup
473
- */
474
- clear() {
475
- // Close all active connections before clearing registries to prevent resource leaks
476
- const closePromises = [];
477
- for (const [serverId, client] of this.activeConnections) {
478
- closePromises.push(client.close().catch((error) => {
479
- const errorMessage = error instanceof Error ? error.message : String(error);
480
- unifiedRegistryLogger.warn(`Failed to close connection for ${serverId}: ${errorMessage}`);
481
- }));
482
- }
483
- // Handle async cleanup without blocking synchronous clear()
484
- Promise.allSettled(closePromises).then(() => {
485
- this.activeConnections.clear();
486
- });
487
- // Clear registries after initiating connection cleanup
488
- this.clearRegistriesOnly();
489
- }
490
- /**
491
- * Clear all registries and close active connections asynchronously
492
- */
493
- async clearAsync() {
494
- // Close all active connections first
495
- for (const [serverId, client] of this.activeConnections) {
496
- try {
497
- await client.close();
498
- }
499
- catch (error) {
500
- const errorMessage = error instanceof Error ? error.message : String(error);
501
- unifiedRegistryLogger.warn(`Failed to close connection for ${serverId}: ${errorMessage}`);
502
- }
503
- }
504
- this.activeConnections.clear();
505
- // Clear registries without attempting to close connections again
506
- this.clearRegistriesOnly();
507
- }
508
- /**
509
- * Convert unknown arguments to JsonValue for CLI compatibility
510
- * Attempts to serialize complex types to JSON-safe format
511
- */
512
- toJsonValue(args) {
513
- try {
514
- // First try to use it directly if it's already a JsonValue
515
- if (args === null ||
516
- typeof args === "string" ||
517
- typeof args === "number" ||
518
- typeof args === "boolean") {
519
- return args;
520
- }
521
- // For objects and arrays, try JSON round-trip to ensure serialization
522
- if (typeof args === "object") {
523
- return JSON.parse(JSON.stringify(args));
524
- }
525
- // For other types, convert to string
526
- return String(args);
527
- }
528
- catch (error) {
529
- // If serialization fails, return empty object as fallback
530
- unifiedRegistryLogger.warn("Failed to convert args to JsonValue, using empty object:", error);
531
- return {};
532
- }
533
- }
534
- }
535
- /**
536
- * Default unified registry instance
537
- */
538
- export const unifiedRegistry = new UnifiedMCPRegistry();
@@ -1,38 +0,0 @@
1
- /**
2
- * Enhanced Analytics Helper for All Providers
3
- * Ensures consistent analytics data format across providers
4
- * Integrates with Universal Evaluation System
5
- */
6
- import type { UnknownRecord } from "../types/common.js";
7
- import type { AnalyticsData as CoreAnalyticsData } from "../core/types.js";
8
- export interface AnalyticsData extends CoreAnalyticsData {
9
- evaluation?: {
10
- relevanceScore: number;
11
- accuracyScore: number;
12
- completenessScore: number;
13
- overall: number;
14
- evaluationProvider?: string;
15
- evaluationTime?: number;
16
- evaluationAttempt?: number;
17
- };
18
- costDetails?: UnknownRecord;
19
- }
20
- /**
21
- * Create standardized analytics data from provider response
22
- */
23
- export declare function createAnalytics(provider: string, model: string, result: unknown, responseTime: number, context?: Record<string, unknown>): AnalyticsData;
24
- /**
25
- * Create enhanced analytics data with accurate cost calculations (async version)
26
- */
27
- export declare function createEnhancedAnalytics(provider: string, model: string, result: unknown, responseTime: number, context?: Record<string, unknown>): Promise<AnalyticsData>;
28
- /**
29
- * Calculate enhanced cost details using provider configurations
30
- */
31
- export declare function calculateEnhancedCost(provider: string, inputTokens: number, outputTokens: number): Promise<{
32
- costDetails: UnknownRecord;
33
- estimatedCost: number;
34
- }>;
35
- /**
36
- * Enhance analytics with evaluation data
37
- */
38
- export declare function enhanceAnalyticsWithEvaluation(analytics: AnalyticsData, evaluationResult: UnknownRecord): AnalyticsData;