@juspay/neurolink 6.1.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 +10 -6
  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 +1 -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,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;