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