@juspay/neurolink 6.0.0 → 6.2.0

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 (283) hide show
  1. package/CHANGELOG.md +14 -3
  2. package/dist/cli/commands/config.d.ts +13 -13
  3. package/dist/cli/index.js +3 -9
  4. package/dist/core/analytics.d.ts +11 -1
  5. package/dist/core/analytics.js +2 -2
  6. package/dist/core/base-provider.js +4 -18
  7. package/dist/core/dynamic-models.d.ts +8 -8
  8. package/dist/core/factory.js +3 -11
  9. package/dist/index.d.ts +2 -4
  10. package/dist/index.js +2 -11
  11. package/dist/lib/core/analytics.d.ts +11 -1
  12. package/dist/lib/core/analytics.js +2 -2
  13. package/dist/lib/core/base-provider.js +4 -18
  14. package/dist/lib/core/dynamic-models.d.ts +8 -8
  15. package/dist/lib/core/factory.js +3 -11
  16. package/dist/lib/index.d.ts +2 -4
  17. package/dist/lib/index.js +2 -11
  18. package/dist/lib/mcp/factory.d.ts +1 -1
  19. package/dist/lib/mcp/index.d.ts +7 -19
  20. package/dist/lib/mcp/index.js +15 -56
  21. package/dist/lib/neurolink.d.ts +1 -9
  22. package/dist/lib/neurolink.js +21 -70
  23. package/dist/lib/providers/amazon-bedrock.js +5 -16
  24. package/dist/lib/providers/anthropic-baseprovider.js +3 -21
  25. package/dist/lib/providers/anthropic.js +4 -7
  26. package/dist/lib/providers/azure-openai.js +4 -2
  27. package/dist/lib/providers/google-vertex.js +5 -9
  28. package/dist/lib/providers/huggingFace.js +5 -10
  29. package/dist/lib/providers/mistral.js +5 -8
  30. package/dist/lib/providers/openAI.js +4 -7
  31. package/dist/lib/utils/providerConfig.d.ts +117 -0
  32. package/dist/lib/utils/providerConfig.js +353 -0
  33. package/dist/lib/utils/providerUtils.d.ts +2 -1
  34. package/dist/lib/utils/providerUtils.js +53 -36
  35. package/dist/lib/utils/timeout.d.ts +72 -1
  36. package/dist/lib/utils/timeout.js +203 -2
  37. package/dist/mcp/factory.d.ts +1 -1
  38. package/dist/mcp/index.d.ts +7 -19
  39. package/dist/mcp/index.js +15 -56
  40. package/dist/neurolink.d.ts +1 -9
  41. package/dist/neurolink.js +21 -70
  42. package/dist/providers/amazon-bedrock.js +5 -16
  43. package/dist/providers/anthropic-baseprovider.js +3 -21
  44. package/dist/providers/anthropic.js +4 -7
  45. package/dist/providers/azure-openai.js +4 -2
  46. package/dist/providers/google-vertex.js +5 -9
  47. package/dist/providers/huggingFace.js +5 -10
  48. package/dist/providers/mistral.js +5 -8
  49. package/dist/providers/openAI.js +4 -7
  50. package/dist/utils/providerConfig.d.ts +117 -0
  51. package/dist/utils/providerConfig.js +353 -0
  52. package/dist/utils/providerUtils.d.ts +2 -1
  53. package/dist/utils/providerUtils.js +53 -36
  54. package/dist/utils/timeout.d.ts +72 -1
  55. package/dist/utils/timeout.js +203 -2
  56. package/package.json +2 -1
  57. package/dist/chat/client-utils.d.ts +0 -95
  58. package/dist/chat/client-utils.js +0 -315
  59. package/dist/chat/index.d.ts +0 -24
  60. package/dist/chat/index.js +0 -33
  61. package/dist/chat/session-storage.d.ts +0 -77
  62. package/dist/chat/session-storage.js +0 -233
  63. package/dist/chat/session.d.ts +0 -96
  64. package/dist/chat/session.js +0 -257
  65. package/dist/chat/sse-handler.d.ts +0 -49
  66. package/dist/chat/sse-handler.js +0 -259
  67. package/dist/chat/types.d.ts +0 -74
  68. package/dist/chat/types.js +0 -5
  69. package/dist/chat/websocket-chat-handler.d.ts +0 -37
  70. package/dist/chat/websocket-chat-handler.js +0 -262
  71. package/dist/cli/commands/mcp.d.ts +0 -20
  72. package/dist/cli/commands/mcp.js +0 -1272
  73. package/dist/core/defaults.d.ts +0 -19
  74. package/dist/core/defaults.js +0 -29
  75. package/dist/core/evaluation-config.d.ts +0 -29
  76. package/dist/core/evaluation-config.js +0 -144
  77. package/dist/factories/compatibility-factory.d.ts +0 -35
  78. package/dist/factories/compatibility-factory.js +0 -71
  79. package/dist/factories/provider-generate-factory.d.ts +0 -20
  80. package/dist/factories/provider-generate-factory.js +0 -93
  81. package/dist/lib/chat/client-utils.d.ts +0 -95
  82. package/dist/lib/chat/client-utils.js +0 -315
  83. package/dist/lib/chat/index.d.ts +0 -24
  84. package/dist/lib/chat/index.js +0 -33
  85. package/dist/lib/chat/session-storage.d.ts +0 -77
  86. package/dist/lib/chat/session-storage.js +0 -233
  87. package/dist/lib/chat/session.d.ts +0 -96
  88. package/dist/lib/chat/session.js +0 -257
  89. package/dist/lib/chat/sse-handler.d.ts +0 -49
  90. package/dist/lib/chat/sse-handler.js +0 -259
  91. package/dist/lib/chat/types.d.ts +0 -74
  92. package/dist/lib/chat/types.js +0 -5
  93. package/dist/lib/chat/websocket-chat-handler.d.ts +0 -37
  94. package/dist/lib/chat/websocket-chat-handler.js +0 -262
  95. package/dist/lib/core/defaults.d.ts +0 -19
  96. package/dist/lib/core/defaults.js +0 -29
  97. package/dist/lib/core/evaluation-config.d.ts +0 -29
  98. package/dist/lib/core/evaluation-config.js +0 -144
  99. package/dist/lib/factories/compatibility-factory.d.ts +0 -35
  100. package/dist/lib/factories/compatibility-factory.js +0 -71
  101. package/dist/lib/factories/provider-generate-factory.d.ts +0 -20
  102. package/dist/lib/factories/provider-generate-factory.js +0 -93
  103. package/dist/lib/mcp/adapters/plugin-bridge.d.ts +0 -40
  104. package/dist/lib/mcp/adapters/plugin-bridge.js +0 -89
  105. package/dist/lib/mcp/auto-discovery.d.ts +0 -62
  106. package/dist/lib/mcp/auto-discovery.js +0 -149
  107. package/dist/lib/mcp/client.d.ts +0 -68
  108. package/dist/lib/mcp/client.js +0 -248
  109. package/dist/lib/mcp/config.d.ts +0 -31
  110. package/dist/lib/mcp/config.js +0 -99
  111. package/dist/lib/mcp/context-manager.d.ts +0 -171
  112. package/dist/lib/mcp/context-manager.js +0 -362
  113. package/dist/lib/mcp/contracts/mcp-contract.d.ts +0 -169
  114. package/dist/lib/mcp/contracts/mcp-contract.js +0 -58
  115. package/dist/lib/mcp/core/plugin-manager.d.ts +0 -46
  116. package/dist/lib/mcp/core/plugin-manager.js +0 -110
  117. package/dist/lib/mcp/demo/plugin-demo.d.ts +0 -20
  118. package/dist/lib/mcp/demo/plugin-demo.js +0 -118
  119. package/dist/lib/mcp/dynamic-chain-executor.d.ts +0 -225
  120. package/dist/lib/mcp/dynamic-chain-executor.js +0 -489
  121. package/dist/lib/mcp/dynamic-orchestrator.d.ts +0 -115
  122. package/dist/lib/mcp/dynamic-orchestrator.js +0 -351
  123. package/dist/lib/mcp/ecosystem.d.ts +0 -75
  124. package/dist/lib/mcp/ecosystem.js +0 -161
  125. package/dist/lib/mcp/error-manager.d.ts +0 -254
  126. package/dist/lib/mcp/error-manager.js +0 -501
  127. package/dist/lib/mcp/error-recovery.d.ts +0 -159
  128. package/dist/lib/mcp/error-recovery.js +0 -405
  129. package/dist/lib/mcp/external-client.d.ts +0 -88
  130. package/dist/lib/mcp/external-client.js +0 -331
  131. package/dist/lib/mcp/external-manager.d.ts +0 -112
  132. package/dist/lib/mcp/external-manager.js +0 -308
  133. package/dist/lib/mcp/function-calling.d.ts +0 -65
  134. package/dist/lib/mcp/function-calling.js +0 -642
  135. package/dist/lib/mcp/health-monitor.d.ts +0 -257
  136. package/dist/lib/mcp/health-monitor.js +0 -630
  137. package/dist/lib/mcp/initialize-tools.d.ts +0 -29
  138. package/dist/lib/mcp/initialize-tools.js +0 -261
  139. package/dist/lib/mcp/initialize.d.ts +0 -18
  140. package/dist/lib/mcp/initialize.js +0 -62
  141. package/dist/lib/mcp/manager.d.ts +0 -68
  142. package/dist/lib/mcp/manager.js +0 -176
  143. package/dist/lib/mcp/neurolink-mcp-client.d.ts +0 -97
  144. package/dist/lib/mcp/neurolink-mcp-client.js +0 -462
  145. package/dist/lib/mcp/orchestrator.d.ts +0 -302
  146. package/dist/lib/mcp/orchestrator.js +0 -703
  147. package/dist/lib/mcp/plugin-manager.d.ts +0 -98
  148. package/dist/lib/mcp/plugin-manager.js +0 -296
  149. package/dist/lib/mcp/plugins/core/filesystem-mcp.d.ts +0 -36
  150. package/dist/lib/mcp/plugins/core/filesystem-mcp.js +0 -142
  151. package/dist/lib/mcp/plugins/filesystem-mcp.d.ts +0 -37
  152. package/dist/lib/mcp/plugins/filesystem-mcp.js +0 -54
  153. package/dist/lib/mcp/security-manager.d.ts +0 -87
  154. package/dist/lib/mcp/security-manager.js +0 -344
  155. package/dist/lib/mcp/semaphore-manager.d.ts +0 -137
  156. package/dist/lib/mcp/semaphore-manager.js +0 -329
  157. package/dist/lib/mcp/session-manager.d.ts +0 -187
  158. package/dist/lib/mcp/session-manager.js +0 -400
  159. package/dist/lib/mcp/session-persistence.d.ts +0 -93
  160. package/dist/lib/mcp/session-persistence.js +0 -301
  161. package/dist/lib/mcp/tool-integration.d.ts +0 -58
  162. package/dist/lib/mcp/tool-integration.js +0 -203
  163. package/dist/lib/mcp/transport-manager.d.ts +0 -154
  164. package/dist/lib/mcp/transport-manager.js +0 -334
  165. package/dist/lib/mcp/unified-mcp.d.ts +0 -133
  166. package/dist/lib/mcp/unified-mcp.js +0 -251
  167. package/dist/lib/mcp/unified-registry.d.ts +0 -165
  168. package/dist/lib/mcp/unified-registry.js +0 -538
  169. package/dist/lib/providers/analytics-helper.d.ts +0 -38
  170. package/dist/lib/providers/analytics-helper.js +0 -216
  171. package/dist/lib/providers/function-calling-provider.d.ts +0 -142
  172. package/dist/lib/providers/function-calling-provider.js +0 -630
  173. package/dist/lib/providers/mcp-provider.d.ts +0 -75
  174. package/dist/lib/providers/mcp-provider.js +0 -283
  175. package/dist/lib/providers/timeout-wrapper.d.ts +0 -40
  176. package/dist/lib/providers/timeout-wrapper.js +0 -100
  177. package/dist/lib/sdk/tool-extension.d.ts +0 -181
  178. package/dist/lib/sdk/tool-extension.js +0 -284
  179. package/dist/lib/services/streaming/streaming-manager.d.ts +0 -29
  180. package/dist/lib/services/streaming/streaming-manager.js +0 -245
  181. package/dist/lib/services/types.d.ts +0 -156
  182. package/dist/lib/services/types.js +0 -2
  183. package/dist/lib/services/websocket/websocket-server.d.ts +0 -34
  184. package/dist/lib/services/websocket/websocket-server.js +0 -305
  185. package/dist/lib/utils/provider-validation.d.ts +0 -36
  186. package/dist/lib/utils/provider-validation.js +0 -625
  187. package/dist/lib/utils/providerUtils-fixed.d.ts +0 -8
  188. package/dist/lib/utils/providerUtils-fixed.js +0 -94
  189. package/dist/lib/utils/streaming-utils.d.ts +0 -79
  190. package/dist/lib/utils/streaming-utils.js +0 -198
  191. package/dist/lib/utils/timeout-manager.d.ts +0 -75
  192. package/dist/lib/utils/timeout-manager.js +0 -244
  193. package/dist/mcp/adapters/plugin-bridge.d.ts +0 -40
  194. package/dist/mcp/adapters/plugin-bridge.js +0 -89
  195. package/dist/mcp/auto-discovery.d.ts +0 -62
  196. package/dist/mcp/auto-discovery.js +0 -149
  197. package/dist/mcp/client.d.ts +0 -68
  198. package/dist/mcp/client.js +0 -248
  199. package/dist/mcp/config.d.ts +0 -31
  200. package/dist/mcp/config.js +0 -99
  201. package/dist/mcp/context-manager.d.ts +0 -171
  202. package/dist/mcp/context-manager.js +0 -362
  203. package/dist/mcp/contracts/mcp-contract.d.ts +0 -169
  204. package/dist/mcp/contracts/mcp-contract.js +0 -58
  205. package/dist/mcp/core/plugin-manager.d.ts +0 -46
  206. package/dist/mcp/core/plugin-manager.js +0 -110
  207. package/dist/mcp/demo/plugin-demo.d.ts +0 -20
  208. package/dist/mcp/demo/plugin-demo.js +0 -118
  209. package/dist/mcp/dynamic-chain-executor.d.ts +0 -225
  210. package/dist/mcp/dynamic-chain-executor.js +0 -489
  211. package/dist/mcp/dynamic-orchestrator.d.ts +0 -115
  212. package/dist/mcp/dynamic-orchestrator.js +0 -351
  213. package/dist/mcp/ecosystem.d.ts +0 -75
  214. package/dist/mcp/ecosystem.js +0 -162
  215. package/dist/mcp/error-manager.d.ts +0 -254
  216. package/dist/mcp/error-manager.js +0 -501
  217. package/dist/mcp/error-recovery.d.ts +0 -159
  218. package/dist/mcp/error-recovery.js +0 -405
  219. package/dist/mcp/external-client.d.ts +0 -88
  220. package/dist/mcp/external-client.js +0 -331
  221. package/dist/mcp/external-manager.d.ts +0 -112
  222. package/dist/mcp/external-manager.js +0 -308
  223. package/dist/mcp/function-calling.d.ts +0 -65
  224. package/dist/mcp/function-calling.js +0 -642
  225. package/dist/mcp/health-monitor.d.ts +0 -257
  226. package/dist/mcp/health-monitor.js +0 -630
  227. package/dist/mcp/initialize-tools.d.ts +0 -29
  228. package/dist/mcp/initialize-tools.js +0 -262
  229. package/dist/mcp/initialize.d.ts +0 -18
  230. package/dist/mcp/initialize.js +0 -62
  231. package/dist/mcp/manager.d.ts +0 -68
  232. package/dist/mcp/manager.js +0 -176
  233. package/dist/mcp/neurolink-mcp-client.d.ts +0 -97
  234. package/dist/mcp/neurolink-mcp-client.js +0 -462
  235. package/dist/mcp/orchestrator.d.ts +0 -302
  236. package/dist/mcp/orchestrator.js +0 -703
  237. package/dist/mcp/plugin-manager.d.ts +0 -98
  238. package/dist/mcp/plugin-manager.js +0 -297
  239. package/dist/mcp/plugins/core/filesystem-mcp.d.ts +0 -36
  240. package/dist/mcp/plugins/core/filesystem-mcp.js +0 -142
  241. package/dist/mcp/plugins/core/neurolink-mcp.json +0 -17
  242. package/dist/mcp/plugins/filesystem-mcp.d.ts +0 -37
  243. package/dist/mcp/plugins/filesystem-mcp.js +0 -54
  244. package/dist/mcp/security-manager.d.ts +0 -87
  245. package/dist/mcp/security-manager.js +0 -344
  246. package/dist/mcp/semaphore-manager.d.ts +0 -137
  247. package/dist/mcp/semaphore-manager.js +0 -329
  248. package/dist/mcp/session-manager.d.ts +0 -187
  249. package/dist/mcp/session-manager.js +0 -400
  250. package/dist/mcp/session-persistence.d.ts +0 -93
  251. package/dist/mcp/session-persistence.js +0 -302
  252. package/dist/mcp/tool-integration.d.ts +0 -58
  253. package/dist/mcp/tool-integration.js +0 -203
  254. package/dist/mcp/transport-manager.d.ts +0 -154
  255. package/dist/mcp/transport-manager.js +0 -335
  256. package/dist/mcp/unified-mcp.d.ts +0 -133
  257. package/dist/mcp/unified-mcp.js +0 -251
  258. package/dist/mcp/unified-registry.d.ts +0 -165
  259. package/dist/mcp/unified-registry.js +0 -539
  260. package/dist/providers/analytics-helper.d.ts +0 -38
  261. package/dist/providers/analytics-helper.js +0 -216
  262. package/dist/providers/function-calling-provider.d.ts +0 -142
  263. package/dist/providers/function-calling-provider.js +0 -630
  264. package/dist/providers/mcp-provider.d.ts +0 -75
  265. package/dist/providers/mcp-provider.js +0 -283
  266. package/dist/providers/timeout-wrapper.d.ts +0 -40
  267. package/dist/providers/timeout-wrapper.js +0 -100
  268. package/dist/sdk/tool-extension.d.ts +0 -181
  269. package/dist/sdk/tool-extension.js +0 -284
  270. package/dist/services/streaming/streaming-manager.d.ts +0 -29
  271. package/dist/services/streaming/streaming-manager.js +0 -245
  272. package/dist/services/types.d.ts +0 -156
  273. package/dist/services/types.js +0 -2
  274. package/dist/services/websocket/websocket-server.d.ts +0 -34
  275. package/dist/services/websocket/websocket-server.js +0 -306
  276. package/dist/utils/provider-validation.d.ts +0 -36
  277. package/dist/utils/provider-validation.js +0 -625
  278. package/dist/utils/providerUtils-fixed.d.ts +0 -8
  279. package/dist/utils/providerUtils-fixed.js +0 -94
  280. package/dist/utils/streaming-utils.d.ts +0 -79
  281. package/dist/utils/streaming-utils.js +0 -198
  282. package/dist/utils/timeout-manager.d.ts +0 -75
  283. 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;