@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,50 +1,33 @@
1
1
  /**
2
2
  * Utility functions for AI provider management
3
+ * Consolidated from providerUtils-fixed.ts
3
4
  */
5
+ import { AIProviderFactory } from "../core/factory.js";
4
6
  import { logger } from "./logger.js";
5
7
  /**
6
- * Get the best available provider based on preferences and availability (async)
8
+ * Get the best available provider based on real-time availability checks
9
+ * Enhanced version consolidated from providerUtils-fixed.ts
7
10
  * @param requestedProvider - Optional preferred provider name
8
11
  * @returns The best provider name to use
9
12
  */
10
13
  export async function getBestProvider(requestedProvider) {
11
- // If a specific provider is requested, return it (existing logic)
12
- if (requestedProvider && requestedProvider !== "auto") {
13
- return requestedProvider;
14
- }
15
14
  // 🔧 FIX: Check for explicit default provider in env
16
15
  if (process.env.DEFAULT_PROVIDER &&
17
- isProviderConfigured(process.env.DEFAULT_PROVIDER)) {
16
+ (await isProviderAvailable(process.env.DEFAULT_PROVIDER))) {
18
17
  return process.env.DEFAULT_PROVIDER;
19
18
  }
20
- // 🔧 FIX: Special case for Ollama when explicitly configured
19
+ // 🔧 FIX: Special case for Ollama - prioritize local when available
21
20
  if (process.env.OLLAMA_BASE_URL && process.env.OLLAMA_MODEL) {
22
- // Quick connectivity check for Ollama (non-blocking)
23
21
  try {
24
- const controller = new AbortController();
25
- const timeout = setTimeout(() => controller.abort(), 2000);
26
- let res;
27
- try {
28
- res = await fetch("http://localhost:11434/api/tags", {
29
- method: "GET",
30
- signal: controller.signal,
31
- });
32
- clearTimeout(timeout);
33
- if (res.ok) {
34
- return "ollama"; // Prioritize working local AI
35
- }
36
- }
37
- catch {
38
- clearTimeout(timeout);
39
- // Fall through to cloud providers
22
+ if (await isProviderAvailable("ollama")) {
23
+ logger.debug(`[getBestProvider] Prioritizing working local Ollama`);
24
+ return "ollama"; // Prioritize working local AI
40
25
  }
41
- // Removed redundant if (res.ok) block here
42
26
  }
43
27
  catch {
44
28
  // Fall through to cloud providers
45
29
  }
46
30
  }
47
- // Existing provider priority logic...
48
31
  const providers = [
49
32
  "google-ai",
50
33
  "anthropic",
@@ -56,24 +39,58 @@ export async function getBestProvider(requestedProvider) {
56
39
  "bedrock",
57
40
  "ollama", // Keep as fallback
58
41
  ];
59
- // Check which providers have their required environment variables
42
+ if (requestedProvider && requestedProvider !== "auto") {
43
+ if (await isProviderAvailable(requestedProvider)) {
44
+ logger.debug(`[getBestProvider] Using requested provider: ${requestedProvider}`);
45
+ return requestedProvider;
46
+ }
47
+ else {
48
+ logger.warn(`[getBestProvider] Requested provider '${requestedProvider}' is not available. Falling back to auto-selection.`);
49
+ }
50
+ }
60
51
  for (const provider of providers) {
61
- if (isProviderConfigured(provider)) {
52
+ if (await isProviderAvailable(provider)) {
62
53
  logger.debug(`[getBestProvider] Selected provider: ${provider}`);
63
54
  return provider;
64
55
  }
65
56
  }
66
- // Default to bedrock if nothing is configured
67
- logger.warn("[getBestProvider] No providers configured, defaulting to bedrock");
68
- return "bedrock";
57
+ throw new Error("No available AI providers. Please check your configurations.");
69
58
  }
70
59
  /**
71
- * Check if a provider has the minimum required configuration
72
- * @param provider - Provider name to check
73
- * @returns True if the provider appears to be configured
60
+ * Check if a provider is truly available by performing a quick authentication test.
61
+ * Enhanced function consolidated from providerUtils-fixed.ts
62
+ * @param providerName - The name of the provider to check.
63
+ * @returns True if the provider is available and authenticated.
74
64
  */
75
- function isProviderConfigured(provider) {
76
- return hasProviderEnvVars(provider);
65
+ async function isProviderAvailable(providerName) {
66
+ if (!hasProviderEnvVars(providerName) && providerName !== "ollama") {
67
+ return false;
68
+ }
69
+ if (providerName === "ollama") {
70
+ try {
71
+ const response = await fetch("http://localhost:11434/api/tags", {
72
+ method: "GET",
73
+ signal: AbortSignal.timeout(2000),
74
+ });
75
+ if (response.ok) {
76
+ const { models } = await response.json();
77
+ const defaultOllamaModel = "llama3.2:latest";
78
+ return models.some((m) => m.name === defaultOllamaModel);
79
+ }
80
+ return false;
81
+ }
82
+ catch (error) {
83
+ return false;
84
+ }
85
+ }
86
+ try {
87
+ const provider = await AIProviderFactory.createProvider(providerName);
88
+ await provider.generate({ prompt: "test", maxTokens: 1 });
89
+ return true;
90
+ }
91
+ catch (error) {
92
+ return false;
93
+ }
77
94
  }
78
95
  /**
79
96
  * Check if a provider has the minimum required environment variables
@@ -66,4 +66,75 @@ export declare function getDefaultTimeout(provider: string, operation?: "generat
66
66
  * @returns Promise that rejects with TimeoutError
67
67
  */
68
68
  export declare function createTimeoutPromise(timeout: number | string | undefined, provider: string, operation: "generate" | "stream"): Promise<never> | null;
69
- export { createTimeoutController } from "../providers/timeout-wrapper.js";
69
+ export interface TimeoutConfig {
70
+ operation: string;
71
+ timeout?: number | string;
72
+ gracefulShutdown?: boolean;
73
+ retryOnTimeout?: boolean;
74
+ maxRetries?: number;
75
+ abortSignal?: AbortSignal;
76
+ }
77
+ export interface TimeoutResult<T> {
78
+ success: boolean;
79
+ data?: T;
80
+ error?: Error;
81
+ timedOut: boolean;
82
+ executionTime: number;
83
+ retriesUsed: number;
84
+ }
85
+ /**
86
+ * Enhanced timeout manager with proper cleanup and abort controller integration
87
+ * Consolidated from timeout-manager.ts
88
+ */
89
+ export declare class TimeoutManager {
90
+ private activeTimeouts;
91
+ /**
92
+ * Execute operation with timeout and proper cleanup
93
+ */
94
+ executeWithTimeout<T>(operation: () => Promise<T>, config: TimeoutConfig): Promise<TimeoutResult<T>>;
95
+ private performSingleOperation;
96
+ private getTimeoutMs;
97
+ private generateOperationId;
98
+ private createTimeoutPromise;
99
+ private registerTimeout;
100
+ cleanup(operationId: string): void;
101
+ gracefulShutdown(): void;
102
+ }
103
+ /**
104
+ * Wrapper functions consolidated from timeout-wrapper.ts
105
+ */
106
+ /**
107
+ * Wrap a promise with timeout
108
+ * @param promise - The promise to wrap
109
+ * @param timeout - Timeout duration (number in ms or string with unit)
110
+ * @param provider - Provider name for error messages
111
+ * @param operation - Operation type (generate or stream)
112
+ * @returns The result of the promise or throws TimeoutError
113
+ */
114
+ export declare function withTimeout<T>(promise: Promise<T>, timeout: number | string | undefined, provider: string, operation: "generate" | "stream"): Promise<T>;
115
+ /**
116
+ * Wrap a streaming async generator with timeout
117
+ * @param generator - The async generator to wrap
118
+ * @param timeout - Timeout duration for the entire stream
119
+ * @param provider - Provider name for error messages
120
+ * @returns Wrapped async generator that respects timeout
121
+ */
122
+ export declare function withStreamingTimeout<T>(generator: AsyncGenerator<T>, timeout: number | string | undefined, provider: string): AsyncGenerator<T>;
123
+ /**
124
+ * Create an abort controller with timeout
125
+ * @param timeout - Timeout duration
126
+ * @param provider - Provider name for error messages
127
+ * @param operation - Operation type
128
+ * @returns AbortController and cleanup function
129
+ */
130
+ export declare function createTimeoutController(timeout: number | string | undefined, provider: string, operation: "generate" | "stream"): {
131
+ controller: AbortController;
132
+ cleanup: () => void;
133
+ timeoutMs: number;
134
+ } | null;
135
+ /**
136
+ * Merge abort signals (for combining user abort with timeout)
137
+ * @param signals - Array of abort signals to merge
138
+ * @returns Combined abort controller
139
+ */
140
+ export declare function mergeAbortSignals(signals: (AbortSignal | undefined)[]): AbortController;
@@ -134,5 +134,206 @@ export function createTimeoutPromise(timeout, provider, operation) {
134
134
  }
135
135
  });
136
136
  }
137
- // Re-export createTimeoutController from timeout-wrapper for convenience
138
- export { createTimeoutController } from "../providers/timeout-wrapper.js";
137
+ /**
138
+ * Enhanced timeout manager with proper cleanup and abort controller integration
139
+ * Consolidated from timeout-manager.ts
140
+ */
141
+ export class TimeoutManager {
142
+ activeTimeouts = new Map();
143
+ /**
144
+ * Execute operation with timeout and proper cleanup
145
+ */
146
+ async executeWithTimeout(operation, config) {
147
+ const startTime = Date.now();
148
+ const operationId = this.generateOperationId(config.operation);
149
+ let retriesUsed = 0;
150
+ const maxRetries = config.retryOnTimeout ? (config.maxRetries ?? 1) : 0;
151
+ while (retriesUsed <= maxRetries) {
152
+ try {
153
+ const result = await this.performSingleOperation(operation, config, operationId);
154
+ return {
155
+ success: true,
156
+ data: result,
157
+ timedOut: false,
158
+ executionTime: Date.now() - startTime,
159
+ retriesUsed,
160
+ };
161
+ }
162
+ catch (error) {
163
+ this.cleanup(operationId);
164
+ if (error instanceof TimeoutError && retriesUsed < maxRetries) {
165
+ retriesUsed++;
166
+ continue;
167
+ }
168
+ return {
169
+ success: false,
170
+ error: error instanceof Error ? error : new Error(String(error)),
171
+ timedOut: error instanceof TimeoutError,
172
+ executionTime: Date.now() - startTime,
173
+ retriesUsed,
174
+ };
175
+ }
176
+ }
177
+ return {
178
+ success: false,
179
+ error: new Error("Maximum retries exceeded"),
180
+ timedOut: true,
181
+ executionTime: Date.now() - startTime,
182
+ retriesUsed,
183
+ };
184
+ }
185
+ async performSingleOperation(operation, config, operationId) {
186
+ const timeoutMs = this.getTimeoutMs(config);
187
+ if (!timeoutMs) {
188
+ return await operation();
189
+ }
190
+ const controller = new AbortController();
191
+ const existingSignal = config.abortSignal;
192
+ if (existingSignal) {
193
+ existingSignal.addEventListener("abort", () => {
194
+ controller.abort(existingSignal.reason);
195
+ });
196
+ if (existingSignal.aborted) {
197
+ throw new Error("Operation aborted before execution");
198
+ }
199
+ }
200
+ const timeoutPromise = this.createTimeoutPromise(timeoutMs, operationId);
201
+ this.registerTimeout(operationId, timeoutPromise.timer, controller, () => {
202
+ clearTimeout(timeoutPromise.timer);
203
+ });
204
+ try {
205
+ return await Promise.race([operation(), timeoutPromise.promise]);
206
+ }
207
+ finally {
208
+ this.cleanup(operationId);
209
+ }
210
+ }
211
+ getTimeoutMs(config) {
212
+ return parseTimeout(config.timeout);
213
+ }
214
+ generateOperationId(operation) {
215
+ return `${operation}-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
216
+ }
217
+ createTimeoutPromise(timeoutMs, operationId) {
218
+ let timer;
219
+ const promise = new Promise((_, reject) => {
220
+ timer = setTimeout(() => {
221
+ reject(new TimeoutError(`Operation timeout after ${timeoutMs}ms`, timeoutMs));
222
+ }, timeoutMs);
223
+ });
224
+ return { promise, timer: timer };
225
+ }
226
+ registerTimeout(operationId, timer, controller, cleanup) {
227
+ this.activeTimeouts.set(operationId, { timer, controller, cleanup });
228
+ }
229
+ cleanup(operationId) {
230
+ const timeoutInfo = this.activeTimeouts.get(operationId);
231
+ if (timeoutInfo) {
232
+ timeoutInfo.cleanup();
233
+ this.activeTimeouts.delete(operationId);
234
+ }
235
+ }
236
+ gracefulShutdown() {
237
+ for (const [operationId] of this.activeTimeouts) {
238
+ this.cleanup(operationId);
239
+ }
240
+ }
241
+ }
242
+ /**
243
+ * Wrapper functions consolidated from timeout-wrapper.ts
244
+ */
245
+ /**
246
+ * Wrap a promise with timeout
247
+ * @param promise - The promise to wrap
248
+ * @param timeout - Timeout duration (number in ms or string with unit)
249
+ * @param provider - Provider name for error messages
250
+ * @param operation - Operation type (generate or stream)
251
+ * @returns The result of the promise or throws TimeoutError
252
+ */
253
+ export async function withTimeout(promise, timeout, provider, operation) {
254
+ const timeoutMs = parseTimeout(timeout);
255
+ if (!timeoutMs) {
256
+ return promise;
257
+ }
258
+ const timeoutPromise = new Promise((_, reject) => {
259
+ setTimeout(() => {
260
+ reject(new TimeoutError(`${provider} ${operation} operation timed out after ${timeoutMs}ms`, timeoutMs, provider, operation));
261
+ }, timeoutMs);
262
+ });
263
+ return Promise.race([promise, timeoutPromise]);
264
+ }
265
+ /**
266
+ * Wrap a streaming async generator with timeout
267
+ * @param generator - The async generator to wrap
268
+ * @param timeout - Timeout duration for the entire stream
269
+ * @param provider - Provider name for error messages
270
+ * @returns Wrapped async generator that respects timeout
271
+ */
272
+ export async function* withStreamingTimeout(generator, timeout, provider) {
273
+ const timeoutMs = parseTimeout(timeout);
274
+ if (!timeoutMs) {
275
+ yield* generator;
276
+ return;
277
+ }
278
+ let timeoutId;
279
+ const timeoutPromise = new Promise((_, reject) => {
280
+ timeoutId = setTimeout(() => {
281
+ reject(new TimeoutError(`${provider} streaming operation timed out after ${timeoutMs}ms`, timeoutMs, provider, "stream"));
282
+ }, timeoutMs);
283
+ });
284
+ try {
285
+ for await (const item of generator) {
286
+ const raceResult = await Promise.race([
287
+ Promise.resolve(item),
288
+ timeoutPromise,
289
+ ]);
290
+ yield raceResult;
291
+ }
292
+ }
293
+ finally {
294
+ clearTimeout(timeoutId);
295
+ }
296
+ }
297
+ /**
298
+ * Create an abort controller with timeout
299
+ * @param timeout - Timeout duration
300
+ * @param provider - Provider name for error messages
301
+ * @param operation - Operation type
302
+ * @returns AbortController and cleanup function
303
+ */
304
+ export function createTimeoutController(timeout, provider, operation) {
305
+ const timeoutMs = parseTimeout(timeout);
306
+ if (!timeoutMs) {
307
+ return null;
308
+ }
309
+ const controller = new AbortController();
310
+ const timer = setTimeout(() => {
311
+ controller.abort(new TimeoutError(`${provider} ${operation} operation timed out after ${timeout}`, timeoutMs, provider, operation));
312
+ }, timeoutMs);
313
+ const cleanup = () => {
314
+ clearTimeout(timer);
315
+ };
316
+ return { controller, cleanup, timeoutMs };
317
+ }
318
+ /**
319
+ * Merge abort signals (for combining user abort with timeout)
320
+ * @param signals - Array of abort signals to merge
321
+ * @returns Combined abort controller
322
+ */
323
+ export function mergeAbortSignals(signals) {
324
+ const controller = new AbortController();
325
+ for (const signal of signals) {
326
+ if (signal && !signal.aborted) {
327
+ signal.addEventListener("abort", () => {
328
+ if (!controller.signal.aborted) {
329
+ controller.abort(signal.reason);
330
+ }
331
+ });
332
+ }
333
+ if (signal?.aborted) {
334
+ controller.abort(signal.reason);
335
+ break;
336
+ }
337
+ }
338
+ return controller;
339
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@juspay/neurolink",
3
- "version": "6.0.0",
3
+ "version": "6.2.0",
4
4
  "description": "Universal AI Development Platform with working MCP integration, multi-provider support, and professional CLI. Built-in tools operational, 58+ external MCP servers discoverable. Connect to filesystem, GitHub, database operations, and more. Build, test, and deploy AI applications with 9 major providers: OpenAI, Anthropic, Google AI, AWS Bedrock, Azure, Hugging Face, Ollama, and Mistral AI.",
5
5
  "author": {
6
6
  "name": "Juspay Technologies",
@@ -164,6 +164,7 @@
164
164
  "zod-to-json-schema": "^3.24.5"
165
165
  },
166
166
  "devDependencies": {
167
+ "@changesets/changelog-github": "^0.5.1",
167
168
  "@changesets/cli": "^2.26.2",
168
169
  "@eslint/js": "^9.0.0",
169
170
  "@semantic-release/changelog": "^6.0.3",
@@ -1,95 +0,0 @@
1
- /**
2
- * Phase 3: SSE Chat Utilities
3
- * Client-side utilities for SSE chat integration
4
- */
5
- import type { ChatMessage } from "./types.js";
6
- export interface ChatClientOptions {
7
- endpoint: string;
8
- sessionId: string;
9
- onMessage?: (message: ChatMessage) => void;
10
- onError?: (error: Error) => void;
11
- onConnect?: () => void;
12
- onDisconnect?: () => void;
13
- reconnectAttempts?: number;
14
- reconnectDelay?: number;
15
- }
16
- export interface ChatStreamHook {
17
- messages: ChatMessage[];
18
- isConnected: boolean;
19
- isReconnecting: boolean;
20
- sendMessage: (content: string) => Promise<void>;
21
- disconnect: () => void;
22
- reconnect: () => void;
23
- clearHistory: () => void;
24
- }
25
- /**
26
- * Client for SSE chat communication
27
- */
28
- export declare class ChatClient {
29
- private eventSource?;
30
- private options;
31
- private messages;
32
- private reconnectCount;
33
- private isConnected;
34
- private isReconnecting;
35
- private reconnectTimeout?;
36
- constructor(options: ChatClientOptions);
37
- /**
38
- * Connect to SSE endpoint
39
- */
40
- connect(): void;
41
- /**
42
- * Send message to chat
43
- */
44
- sendMessage(content: string): Promise<void>;
45
- /**
46
- * Disconnect from SSE endpoint
47
- */
48
- disconnect(): void;
49
- /**
50
- * Get message history
51
- */
52
- getMessages(): ChatMessage[];
53
- /**
54
- * Clear message history
55
- */
56
- clearMessages(): void;
57
- /**
58
- * Check connection status
59
- */
60
- getConnectionStatus(): {
61
- connected: boolean;
62
- reconnecting: boolean;
63
- reconnectCount: number;
64
- };
65
- private handleSSEEvent;
66
- private isDataEventData;
67
- private isErrorEventData;
68
- private isCompleteEventData;
69
- private handleDataEvent;
70
- private handleErrorEvent;
71
- private handleCompleteEvent;
72
- private scheduleReconnect;
73
- }
74
- /**
75
- * Create chat client instance
76
- */
77
- export declare function createChatClient(options: ChatClientOptions): ChatClient;
78
- /**
79
- * React-style hook for chat streaming (can be adapted for other frameworks)
80
- */
81
- export declare function useChatStream(options: ChatClientOptions): ChatStreamHook;
82
- /**
83
- * Utility for creating SSE EventSource with automatic reconnection
84
- */
85
- export declare function createSSEConnection(url: string, options?: {
86
- onMessage?: (event: MessageEvent) => void;
87
- onError?: (error: Error) => void;
88
- onOpen?: () => void;
89
- reconnect?: boolean;
90
- maxReconnectAttempts?: number;
91
- }): {
92
- connect: () => void;
93
- disconnect: () => void;
94
- isConnected: () => boolean;
95
- };