@juspay/neurolink 3.0.1 → 4.1.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 (232) hide show
  1. package/CHANGELOG.md +66 -6
  2. package/README.md +318 -27
  3. package/dist/agent/direct-tools.d.ts +6 -6
  4. package/dist/chat/client-utils.d.ts +92 -0
  5. package/dist/chat/client-utils.js +298 -0
  6. package/dist/chat/index.d.ts +27 -0
  7. package/dist/chat/index.js +41 -0
  8. package/dist/chat/session-storage.d.ts +77 -0
  9. package/dist/chat/session-storage.js +233 -0
  10. package/dist/chat/session.d.ts +95 -0
  11. package/dist/chat/session.js +257 -0
  12. package/dist/chat/sse-handler.d.ts +49 -0
  13. package/dist/chat/sse-handler.js +266 -0
  14. package/dist/chat/types.d.ts +73 -0
  15. package/dist/chat/types.js +5 -0
  16. package/dist/chat/websocket-chat-handler.d.ts +36 -0
  17. package/dist/chat/websocket-chat-handler.js +262 -0
  18. package/dist/cli/commands/config.js +12 -12
  19. package/dist/cli/commands/mcp.js +3 -4
  20. package/dist/cli/index.d.ts +0 -7
  21. package/dist/cli/index.js +247 -28
  22. package/dist/config/configManager.d.ts +60 -0
  23. package/dist/config/configManager.js +300 -0
  24. package/dist/config/types.d.ts +136 -0
  25. package/dist/config/types.js +43 -0
  26. package/dist/core/analytics.d.ts +23 -0
  27. package/dist/core/analytics.js +131 -0
  28. package/dist/core/constants.d.ts +41 -0
  29. package/dist/core/constants.js +50 -0
  30. package/dist/core/defaults.d.ts +18 -0
  31. package/dist/core/defaults.js +29 -0
  32. package/dist/core/evaluation-config.d.ts +29 -0
  33. package/dist/core/evaluation-config.js +144 -0
  34. package/dist/core/evaluation-providers.d.ts +30 -0
  35. package/dist/core/evaluation-providers.js +187 -0
  36. package/dist/core/evaluation.d.ts +117 -0
  37. package/dist/core/evaluation.js +528 -0
  38. package/dist/core/factory.js +33 -25
  39. package/dist/core/types.d.ts +165 -6
  40. package/dist/core/types.js +3 -4
  41. package/dist/index.d.ts +9 -4
  42. package/dist/index.js +25 -4
  43. package/dist/lib/agent/direct-tools.d.ts +6 -6
  44. package/dist/lib/chat/client-utils.d.ts +92 -0
  45. package/dist/lib/chat/client-utils.js +298 -0
  46. package/dist/lib/chat/index.d.ts +27 -0
  47. package/dist/lib/chat/index.js +41 -0
  48. package/dist/lib/chat/session-storage.d.ts +77 -0
  49. package/dist/lib/chat/session-storage.js +233 -0
  50. package/dist/lib/chat/session.d.ts +95 -0
  51. package/dist/lib/chat/session.js +257 -0
  52. package/dist/lib/chat/sse-handler.d.ts +49 -0
  53. package/dist/lib/chat/sse-handler.js +266 -0
  54. package/dist/lib/chat/types.d.ts +73 -0
  55. package/dist/lib/chat/types.js +5 -0
  56. package/dist/lib/chat/websocket-chat-handler.d.ts +36 -0
  57. package/dist/lib/chat/websocket-chat-handler.js +262 -0
  58. package/dist/lib/config/configManager.d.ts +60 -0
  59. package/dist/lib/config/configManager.js +300 -0
  60. package/dist/lib/config/types.d.ts +136 -0
  61. package/dist/lib/config/types.js +43 -0
  62. package/dist/lib/core/analytics.d.ts +23 -0
  63. package/dist/lib/core/analytics.js +131 -0
  64. package/dist/lib/core/constants.d.ts +41 -0
  65. package/dist/lib/core/constants.js +50 -0
  66. package/dist/lib/core/defaults.d.ts +18 -0
  67. package/dist/lib/core/defaults.js +29 -0
  68. package/dist/lib/core/evaluation-config.d.ts +29 -0
  69. package/dist/lib/core/evaluation-config.js +144 -0
  70. package/dist/lib/core/evaluation-providers.d.ts +30 -0
  71. package/dist/lib/core/evaluation-providers.js +187 -0
  72. package/dist/lib/core/evaluation.d.ts +117 -0
  73. package/dist/lib/core/evaluation.js +528 -0
  74. package/dist/lib/core/factory.js +33 -26
  75. package/dist/lib/core/types.d.ts +165 -6
  76. package/dist/lib/core/types.js +3 -4
  77. package/dist/lib/index.d.ts +9 -4
  78. package/dist/lib/index.js +25 -4
  79. package/dist/lib/mcp/contracts/mcpContract.d.ts +118 -0
  80. package/dist/lib/mcp/contracts/mcpContract.js +5 -0
  81. package/dist/lib/mcp/dynamic-chain-executor.d.ts +201 -0
  82. package/dist/lib/mcp/dynamic-chain-executor.js +489 -0
  83. package/dist/lib/mcp/dynamic-orchestrator.d.ts +109 -0
  84. package/dist/lib/mcp/dynamic-orchestrator.js +351 -0
  85. package/dist/lib/mcp/error-manager.d.ts +254 -0
  86. package/dist/lib/mcp/error-manager.js +501 -0
  87. package/dist/lib/mcp/error-recovery.d.ts +158 -0
  88. package/dist/lib/mcp/error-recovery.js +405 -0
  89. package/dist/lib/mcp/function-calling.js +11 -3
  90. package/dist/lib/mcp/health-monitor.d.ts +256 -0
  91. package/dist/lib/mcp/health-monitor.js +621 -0
  92. package/dist/lib/mcp/logging.js +5 -0
  93. package/dist/lib/mcp/neurolink-mcp-client.js +2 -1
  94. package/dist/lib/mcp/orchestrator.d.ts +136 -5
  95. package/dist/lib/mcp/orchestrator.js +332 -16
  96. package/dist/lib/mcp/registry.d.ts +71 -16
  97. package/dist/lib/mcp/registry.js +104 -6
  98. package/dist/lib/mcp/semaphore-manager.d.ts +137 -0
  99. package/dist/lib/mcp/semaphore-manager.js +329 -0
  100. package/dist/lib/mcp/servers/ai-providers/ai-workflow-tools.d.ts +2 -2
  101. package/dist/lib/mcp/servers/ai-providers/ai-workflow-tools.js +5 -4
  102. package/dist/lib/mcp/session-manager.d.ts +186 -0
  103. package/dist/lib/mcp/session-manager.js +400 -0
  104. package/dist/lib/mcp/session-persistence.d.ts +93 -0
  105. package/dist/lib/mcp/session-persistence.js +298 -0
  106. package/dist/lib/mcp/tool-integration.js +1 -1
  107. package/dist/lib/mcp/tool-registry.d.ts +55 -34
  108. package/dist/lib/mcp/tool-registry.js +111 -97
  109. package/dist/lib/mcp/transport-manager.d.ts +153 -0
  110. package/dist/lib/mcp/transport-manager.js +330 -0
  111. package/dist/lib/mcp/unified-mcp.js +6 -1
  112. package/dist/lib/mcp/unified-registry.d.ts +54 -5
  113. package/dist/lib/mcp/unified-registry.js +139 -6
  114. package/dist/lib/neurolink.d.ts +101 -0
  115. package/dist/lib/neurolink.js +147 -1
  116. package/dist/lib/providers/agent-enhanced-provider.d.ts +11 -2
  117. package/dist/lib/providers/agent-enhanced-provider.js +86 -15
  118. package/dist/lib/providers/amazonBedrock.d.ts +9 -1
  119. package/dist/lib/providers/amazonBedrock.js +26 -2
  120. package/dist/lib/providers/analytics-helper.d.ts +53 -0
  121. package/dist/lib/providers/analytics-helper.js +151 -0
  122. package/dist/lib/providers/anthropic.d.ts +11 -1
  123. package/dist/lib/providers/anthropic.js +29 -4
  124. package/dist/lib/providers/azureOpenAI.d.ts +3 -1
  125. package/dist/lib/providers/azureOpenAI.js +28 -4
  126. package/dist/lib/providers/function-calling-provider.d.ts +9 -1
  127. package/dist/lib/providers/function-calling-provider.js +14 -1
  128. package/dist/lib/providers/googleAIStudio.d.ts +15 -1
  129. package/dist/lib/providers/googleAIStudio.js +32 -2
  130. package/dist/lib/providers/googleVertexAI.d.ts +9 -1
  131. package/dist/lib/providers/googleVertexAI.js +31 -2
  132. package/dist/lib/providers/huggingFace.d.ts +3 -1
  133. package/dist/lib/providers/huggingFace.js +26 -3
  134. package/dist/lib/providers/mcp-provider.d.ts +9 -1
  135. package/dist/lib/providers/mcp-provider.js +12 -0
  136. package/dist/lib/providers/mistralAI.d.ts +3 -1
  137. package/dist/lib/providers/mistralAI.js +25 -2
  138. package/dist/lib/providers/ollama.d.ts +3 -1
  139. package/dist/lib/providers/ollama.js +27 -4
  140. package/dist/lib/providers/openAI.d.ts +15 -1
  141. package/dist/lib/providers/openAI.js +32 -2
  142. package/dist/lib/proxy/proxy-fetch.js +8 -7
  143. package/dist/lib/services/streaming/streaming-manager.d.ts +29 -0
  144. package/dist/lib/services/streaming/streaming-manager.js +244 -0
  145. package/dist/lib/services/types.d.ts +155 -0
  146. package/dist/lib/services/types.js +2 -0
  147. package/dist/lib/services/websocket/websocket-server.d.ts +34 -0
  148. package/dist/lib/services/websocket/websocket-server.js +304 -0
  149. package/dist/lib/telemetry/index.d.ts +15 -0
  150. package/dist/lib/telemetry/index.js +22 -0
  151. package/dist/lib/telemetry/telemetry-service.d.ts +47 -0
  152. package/dist/lib/telemetry/telemetry-service.js +259 -0
  153. package/dist/lib/utils/streaming-utils.d.ts +67 -0
  154. package/dist/lib/utils/streaming-utils.js +201 -0
  155. package/dist/mcp/contracts/mcpContract.d.ts +118 -0
  156. package/dist/mcp/contracts/mcpContract.js +5 -0
  157. package/dist/mcp/dynamic-chain-executor.d.ts +201 -0
  158. package/dist/mcp/dynamic-chain-executor.js +489 -0
  159. package/dist/mcp/dynamic-orchestrator.d.ts +109 -0
  160. package/dist/mcp/dynamic-orchestrator.js +351 -0
  161. package/dist/mcp/error-manager.d.ts +254 -0
  162. package/dist/mcp/error-manager.js +501 -0
  163. package/dist/mcp/error-recovery.d.ts +158 -0
  164. package/dist/mcp/error-recovery.js +405 -0
  165. package/dist/mcp/function-calling.js +11 -3
  166. package/dist/mcp/health-monitor.d.ts +256 -0
  167. package/dist/mcp/health-monitor.js +621 -0
  168. package/dist/mcp/logging.js +5 -0
  169. package/dist/mcp/neurolink-mcp-client.js +2 -1
  170. package/dist/mcp/orchestrator.d.ts +136 -5
  171. package/dist/mcp/orchestrator.js +332 -16
  172. package/dist/mcp/plugins/core/neurolink-mcp.json +15 -15
  173. package/dist/mcp/registry.d.ts +71 -16
  174. package/dist/mcp/registry.js +104 -6
  175. package/dist/mcp/semaphore-manager.d.ts +137 -0
  176. package/dist/mcp/semaphore-manager.js +329 -0
  177. package/dist/mcp/servers/ai-providers/ai-workflow-tools.d.ts +2 -2
  178. package/dist/mcp/servers/ai-providers/ai-workflow-tools.js +5 -4
  179. package/dist/mcp/session-manager.d.ts +186 -0
  180. package/dist/mcp/session-manager.js +400 -0
  181. package/dist/mcp/session-persistence.d.ts +93 -0
  182. package/dist/mcp/session-persistence.js +299 -0
  183. package/dist/mcp/tool-integration.js +1 -1
  184. package/dist/mcp/tool-registry.d.ts +55 -34
  185. package/dist/mcp/tool-registry.js +111 -97
  186. package/dist/mcp/transport-manager.d.ts +153 -0
  187. package/dist/mcp/transport-manager.js +331 -0
  188. package/dist/mcp/unified-mcp.js +6 -1
  189. package/dist/mcp/unified-registry.d.ts +54 -5
  190. package/dist/mcp/unified-registry.js +139 -6
  191. package/dist/neurolink.d.ts +101 -0
  192. package/dist/neurolink.js +147 -1
  193. package/dist/providers/agent-enhanced-provider.d.ts +11 -2
  194. package/dist/providers/agent-enhanced-provider.js +86 -15
  195. package/dist/providers/amazonBedrock.d.ts +9 -1
  196. package/dist/providers/amazonBedrock.js +26 -2
  197. package/dist/providers/analytics-helper.d.ts +53 -0
  198. package/dist/providers/analytics-helper.js +151 -0
  199. package/dist/providers/anthropic.d.ts +11 -1
  200. package/dist/providers/anthropic.js +29 -4
  201. package/dist/providers/azureOpenAI.d.ts +3 -1
  202. package/dist/providers/azureOpenAI.js +29 -4
  203. package/dist/providers/function-calling-provider.d.ts +9 -1
  204. package/dist/providers/function-calling-provider.js +14 -1
  205. package/dist/providers/googleAIStudio.d.ts +15 -1
  206. package/dist/providers/googleAIStudio.js +32 -2
  207. package/dist/providers/googleVertexAI.d.ts +9 -1
  208. package/dist/providers/googleVertexAI.js +31 -2
  209. package/dist/providers/huggingFace.d.ts +3 -1
  210. package/dist/providers/huggingFace.js +26 -3
  211. package/dist/providers/mcp-provider.d.ts +9 -1
  212. package/dist/providers/mcp-provider.js +12 -0
  213. package/dist/providers/mistralAI.d.ts +3 -1
  214. package/dist/providers/mistralAI.js +25 -2
  215. package/dist/providers/ollama.d.ts +3 -1
  216. package/dist/providers/ollama.js +27 -4
  217. package/dist/providers/openAI.d.ts +15 -1
  218. package/dist/providers/openAI.js +33 -2
  219. package/dist/proxy/proxy-fetch.js +8 -7
  220. package/dist/services/streaming/streaming-manager.d.ts +29 -0
  221. package/dist/services/streaming/streaming-manager.js +244 -0
  222. package/dist/services/types.d.ts +155 -0
  223. package/dist/services/types.js +2 -0
  224. package/dist/services/websocket/websocket-server.d.ts +34 -0
  225. package/dist/services/websocket/websocket-server.js +304 -0
  226. package/dist/telemetry/index.d.ts +15 -0
  227. package/dist/telemetry/index.js +22 -0
  228. package/dist/telemetry/telemetry-service.d.ts +47 -0
  229. package/dist/telemetry/telemetry-service.js +261 -0
  230. package/dist/utils/streaming-utils.d.ts +67 -0
  231. package/dist/utils/streaming-utils.js +201 -0
  232. package/package.json +245 -228
@@ -1,16 +1,25 @@
1
1
  /**
2
- * MCP Registry - Plugin Registration and Management
2
+ * MCP Registry - Industry Standard Interface with camelCase
3
3
  */
4
- import type { DiscoveredMCP } from "./contracts/mcp-contract.js";
4
+ import type { DiscoveredMcp, ExecutionContext, ToolInfo } from "./contracts/mcpContract.js";
5
+ /**
6
+ * MCP Registry interface with optional methods for maximum flexibility
7
+ */
8
+ export interface McpRegistry {
9
+ registerServer?(serverId: string, serverConfig?: unknown, context?: ExecutionContext): Promise<void>;
10
+ executeTool?<T = unknown>(toolName: string, args?: unknown, context?: ExecutionContext): Promise<T>;
11
+ listTools?(context?: ExecutionContext): Promise<ToolInfo[]>;
12
+ }
5
13
  /**
6
14
  * Simple MCP registry for plugin management
15
+ * Maintains backward compatibility with existing code
7
16
  */
8
- export declare class MCPRegistry {
17
+ export declare class MCPRegistry implements McpRegistry {
9
18
  private plugins;
10
19
  /**
11
20
  * Register a plugin
12
21
  */
13
- register(plugin: DiscoveredMCP): void;
22
+ register(plugin: DiscoveredMcp): void;
14
23
  /**
15
24
  * Unregister a plugin
16
25
  */
@@ -18,11 +27,11 @@ export declare class MCPRegistry {
18
27
  /**
19
28
  * Get a plugin
20
29
  */
21
- get(name: string): DiscoveredMCP | undefined;
30
+ get(name: string): DiscoveredMcp | undefined;
22
31
  /**
23
32
  * List all plugins
24
33
  */
25
- list(): DiscoveredMCP[];
34
+ list(): DiscoveredMcp[];
26
35
  /**
27
36
  * Check if plugin exists
28
37
  */
@@ -31,17 +40,63 @@ export declare class MCPRegistry {
31
40
  * Clear all plugins
32
41
  */
33
42
  clear(): void;
43
+ /**
44
+ * Register a server (compatible with new interface)
45
+ */
46
+ registerServer(serverId: string, serverConfig?: unknown, context?: ExecutionContext): Promise<void>;
47
+ /**
48
+ * Execute a tool (mock implementation for tests)
49
+ */
50
+ executeTool<T = unknown>(toolName: string, args?: unknown, context?: ExecutionContext): Promise<T>;
51
+ /**
52
+ * List all tools (compatible with new interface)
53
+ */
54
+ listTools(context?: ExecutionContext): Promise<ToolInfo[]>;
55
+ /**
56
+ * Register a server (legacy sync version)
57
+ */
58
+ registerServerSync(plugin: DiscoveredMcp): void;
59
+ /**
60
+ * Execute a tool (legacy sync version)
61
+ */
62
+ executeToolSync(toolName: string, args?: unknown): any;
63
+ /**
64
+ * List all tools (legacy sync version)
65
+ */
66
+ listToolsSync(): Array<{
67
+ name: string;
68
+ description?: string;
69
+ }>;
70
+ /**
71
+ * List all registered server IDs
72
+ *
73
+ * Returns an array of server IDs that are currently registered in the MCP registry.
74
+ * This complements listTools() by providing server-level information, while listTools()
75
+ * provides tool-level information across all servers.
76
+ *
77
+ * @returns Array of registered server identifier strings
78
+ * @see listTools() for getting detailed tool information from all servers
79
+ * @see list() for getting complete server metadata objects
80
+ *
81
+ * @example
82
+ * ```typescript
83
+ * const serverIds = registry.listServers();
84
+ * // ['ai-core', 'external-api', 'database-connector']
85
+ *
86
+ * // Compare with listTools() for comprehensive overview:
87
+ * const servers = registry.listServers(); // ['server1', 'server2']
88
+ * const tools = await registry.listTools(); // [{ name: 'tool1', serverId: 'server1' }, ...]
89
+ * ```
90
+ */
91
+ listServers(): string[];
34
92
  }
35
93
  /**
36
- * Default registry instance
94
+ * Enhanced MCP Registry implementation with config integration
95
+ * Will be implemented in Phase 3.2
37
96
  */
38
- export declare const mcpRegistry: MCPRegistry;
39
- export type MCPToolRegistry = MCPRegistry;
40
- export declare const defaultToolRegistry: MCPRegistry;
41
- export { mcpRegistry as defaultMCPRegistry };
42
- export interface ToolExecutionOptions {
43
- preferredSource?: string;
44
- fallbackEnabled?: boolean;
45
- validateBeforeExecution?: boolean;
46
- timeoutMs?: number;
97
+ export declare class McpRegistryImpl implements McpRegistry {
98
+ private baseRegistry;
99
+ registerServer(serverId: string, serverConfig?: unknown, context?: ExecutionContext): Promise<void>;
100
+ executeTool<T = unknown>(toolName: string, args?: unknown, context?: ExecutionContext): Promise<T>;
101
+ listTools(context?: ExecutionContext): Promise<ToolInfo[]>;
47
102
  }
@@ -1,9 +1,10 @@
1
1
  /**
2
- * MCP Registry - Plugin Registration and Management
2
+ * MCP Registry - Industry Standard Interface with camelCase
3
3
  */
4
4
  import { registryLogger } from "./logging.js";
5
5
  /**
6
6
  * Simple MCP registry for plugin management
7
+ * Maintains backward compatibility with existing code
7
8
  */
8
9
  export class MCPRegistry {
9
10
  plugins = new Map();
@@ -49,11 +50,108 @@ export class MCPRegistry {
49
50
  this.plugins.clear();
50
51
  registryLogger.info("Registry cleared");
51
52
  }
53
+ /**
54
+ * Register a server (compatible with new interface)
55
+ */
56
+ async registerServer(serverId, serverConfig, context) {
57
+ const plugin = {
58
+ metadata: {
59
+ name: serverId,
60
+ description: typeof serverConfig === "object" && serverConfig
61
+ ? serverConfig.description || "No description"
62
+ : "No description",
63
+ },
64
+ tools: typeof serverConfig === "object" && serverConfig
65
+ ? serverConfig.tools
66
+ : {},
67
+ configuration: typeof serverConfig === "object" && serverConfig
68
+ ? serverConfig
69
+ : {},
70
+ };
71
+ this.register(plugin);
72
+ }
73
+ /**
74
+ * Execute a tool (mock implementation for tests)
75
+ */
76
+ async executeTool(toolName, args, context) {
77
+ registryLogger.info(`Executing tool: ${toolName}`);
78
+ return { result: `Mock execution of ${toolName}`, args };
79
+ }
80
+ /**
81
+ * List all tools (compatible with new interface)
82
+ */
83
+ async listTools(context) {
84
+ const tools = this.list().map((plugin) => ({
85
+ name: plugin.metadata.name,
86
+ description: plugin.metadata.description || "No description",
87
+ serverId: plugin.metadata.name,
88
+ category: "general",
89
+ }));
90
+ return tools;
91
+ }
92
+ // Legacy methods for backward compatibility
93
+ /**
94
+ * Register a server (legacy sync version)
95
+ */
96
+ registerServerSync(plugin) {
97
+ this.register(plugin);
98
+ }
99
+ /**
100
+ * Execute a tool (legacy sync version)
101
+ */
102
+ executeToolSync(toolName, args) {
103
+ registryLogger.info(`Executing tool (sync): ${toolName}`);
104
+ return { result: `Mock execution of ${toolName}`, args };
105
+ }
106
+ /**
107
+ * List all tools (legacy sync version)
108
+ */
109
+ listToolsSync() {
110
+ const tools = this.list().map((plugin) => ({
111
+ name: plugin.metadata.name,
112
+ description: plugin.metadata.description || "No description",
113
+ }));
114
+ return tools;
115
+ }
116
+ /**
117
+ * List all registered server IDs
118
+ *
119
+ * Returns an array of server IDs that are currently registered in the MCP registry.
120
+ * This complements listTools() by providing server-level information, while listTools()
121
+ * provides tool-level information across all servers.
122
+ *
123
+ * @returns Array of registered server identifier strings
124
+ * @see listTools() for getting detailed tool information from all servers
125
+ * @see list() for getting complete server metadata objects
126
+ *
127
+ * @example
128
+ * ```typescript
129
+ * const serverIds = registry.listServers();
130
+ * // ['ai-core', 'external-api', 'database-connector']
131
+ *
132
+ * // Compare with listTools() for comprehensive overview:
133
+ * const servers = registry.listServers(); // ['server1', 'server2']
134
+ * const tools = await registry.listTools(); // [{ name: 'tool1', serverId: 'server1' }, ...]
135
+ * ```
136
+ */
137
+ listServers() {
138
+ return Array.from(this.plugins.keys());
139
+ }
52
140
  }
53
141
  /**
54
- * Default registry instance
142
+ * Enhanced MCP Registry implementation with config integration
143
+ * Will be implemented in Phase 3.2
55
144
  */
56
- export const mcpRegistry = new MCPRegistry();
57
- export const defaultToolRegistry = mcpRegistry;
58
- // Additional exports for compatibility
59
- export { mcpRegistry as defaultMCPRegistry };
145
+ export class McpRegistryImpl {
146
+ baseRegistry = new MCPRegistry();
147
+ // Additional implementation will be added in Phase 3.2
148
+ async registerServer(serverId, serverConfig, context) {
149
+ return this.baseRegistry.registerServer(serverId, serverConfig, context);
150
+ }
151
+ async executeTool(toolName, args, context) {
152
+ return this.baseRegistry.executeTool(toolName, args, context);
153
+ }
154
+ async listTools(context) {
155
+ return this.baseRegistry.listTools(context);
156
+ }
157
+ }
@@ -0,0 +1,137 @@
1
+ /**
2
+ * NeuroLink MCP Semaphore Manager
3
+ * Prevents race conditions in concurrent tool executions using a robust semaphore pattern
4
+ * Based on proven patterns from 1MCP reference implementation
5
+ */
6
+ import type { NeuroLinkExecutionContext } from "./factory.js";
7
+ /**
8
+ * Semaphore operation result
9
+ */
10
+ export interface SemaphoreResult<T> {
11
+ success: boolean;
12
+ result?: T;
13
+ error?: Error;
14
+ waitTime: number;
15
+ executionTime: number;
16
+ queueDepth: number;
17
+ }
18
+ /**
19
+ * Semaphore statistics
20
+ */
21
+ export interface SemaphoreStats {
22
+ activeOperations: number;
23
+ queuedOperations: number;
24
+ totalOperations: number;
25
+ totalWaitTime: number;
26
+ averageWaitTime: number;
27
+ peakQueueDepth: number;
28
+ lastActivity: number;
29
+ }
30
+ /**
31
+ * Semaphore Manager for concurrent operation control
32
+ * Implements the proven semaphore pattern from 1MCP to prevent race conditions
33
+ */
34
+ export declare class SemaphoreManager {
35
+ private locks;
36
+ private queues;
37
+ private stats;
38
+ private globalStats;
39
+ /**
40
+ * Acquire a semaphore and execute an operation
41
+ * Ensures exclusive access to resources identified by the key
42
+ *
43
+ * @param key Unique identifier for the resource
44
+ * @param operation Async operation to execute with exclusive access
45
+ * @param context Optional execution context for enhanced tracking
46
+ * @returns Result of the operation with timing metrics
47
+ */
48
+ acquire<T>(key: string, operation: () => Promise<T>, context?: NeuroLinkExecutionContext): Promise<SemaphoreResult<T>>;
49
+ /**
50
+ * Try to acquire a semaphore without waiting
51
+ * Returns immediately if the resource is locked
52
+ *
53
+ * @param key Unique identifier for the resource
54
+ * @param operation Async operation to execute if lock is available
55
+ * @param context Optional execution context
56
+ * @returns Result of the operation or null if resource is locked
57
+ */
58
+ tryAcquire<T>(key: string, operation: () => Promise<T>, context?: NeuroLinkExecutionContext): Promise<SemaphoreResult<T> | null>;
59
+ /**
60
+ * Check if a resource is currently locked
61
+ *
62
+ * @param key Resource identifier
63
+ * @returns True if the resource is locked
64
+ */
65
+ isLocked(key: string): boolean;
66
+ /**
67
+ * Get the current queue depth for a resource
68
+ *
69
+ * @param key Resource identifier
70
+ * @returns Number of operations waiting for this resource
71
+ */
72
+ getQueueDepth(key: string): number;
73
+ /**
74
+ * Get statistics for a specific resource or global stats
75
+ *
76
+ * @param key Optional resource identifier
77
+ * @returns Semaphore statistics
78
+ */
79
+ getStats(key?: string): SemaphoreStats;
80
+ /**
81
+ * Clear all semaphores (use with caution)
82
+ * This will reject all pending operations
83
+ */
84
+ clearAll(): void;
85
+ /**
86
+ * Update queue depth statistics
87
+ *
88
+ * @private
89
+ */
90
+ private updateQueueDepth;
91
+ /**
92
+ * Increment active operations counter
93
+ *
94
+ * @private
95
+ */
96
+ private incrementActiveOperations;
97
+ /**
98
+ * Decrement active operations counter
99
+ *
100
+ * @private
101
+ */
102
+ private decrementActiveOperations;
103
+ /**
104
+ * Update timing statistics
105
+ *
106
+ * @private
107
+ */
108
+ private updateStats;
109
+ /**
110
+ * Create empty statistics object
111
+ *
112
+ * @private
113
+ */
114
+ private createEmptyStats;
115
+ }
116
+ /**
117
+ * Default semaphore manager instance
118
+ */
119
+ export declare const defaultSemaphoreManager: SemaphoreManager;
120
+ /**
121
+ * Utility function to acquire semaphore with default manager
122
+ *
123
+ * @param key Resource identifier
124
+ * @param operation Operation to execute
125
+ * @param context Optional execution context
126
+ * @returns Operation result with metrics
127
+ */
128
+ export declare function acquireSemaphore<T>(key: string, operation: () => Promise<T>, context?: NeuroLinkExecutionContext): Promise<SemaphoreResult<T>>;
129
+ /**
130
+ * Utility function to try acquiring semaphore without waiting
131
+ *
132
+ * @param key Resource identifier
133
+ * @param operation Operation to execute
134
+ * @param context Optional execution context
135
+ * @returns Operation result or null if locked
136
+ */
137
+ export declare function tryAcquireSemaphore<T>(key: string, operation: () => Promise<T>, context?: NeuroLinkExecutionContext): Promise<SemaphoreResult<T> | null>;