@juspay/neurolink 5.2.0 → 6.0.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 (288) hide show
  1. package/CHANGELOG.md +82 -2
  2. package/dist/chat/client-utils.d.ts +3 -0
  3. package/dist/chat/client-utils.js +22 -5
  4. package/dist/chat/index.d.ts +4 -7
  5. package/dist/chat/index.js +0 -8
  6. package/dist/chat/session-storage.d.ts +2 -2
  7. package/dist/chat/session.d.ts +4 -3
  8. package/dist/chat/session.js +1 -1
  9. package/dist/chat/sse-handler.js +13 -21
  10. package/dist/chat/types.d.ts +3 -2
  11. package/dist/chat/websocket-chat-handler.d.ts +4 -3
  12. package/dist/chat/websocket-chat-handler.js +12 -12
  13. package/dist/cli/commands/config.d.ts +2 -2
  14. package/dist/cli/commands/mcp.d.ts +3 -2
  15. package/dist/cli/commands/mcp.js +39 -29
  16. package/dist/cli/commands/ollama.js +8 -4
  17. package/dist/cli/factories/command-factory.d.ts +2 -1
  18. package/dist/cli/factories/command-factory.js +6 -5
  19. package/dist/cli/index.js +22 -19
  20. package/dist/core/analytics.d.ts +3 -2
  21. package/dist/core/analytics.js +16 -7
  22. package/dist/core/base-provider.d.ts +35 -7
  23. package/dist/core/base-provider.js +57 -23
  24. package/dist/core/constants.d.ts +1 -0
  25. package/dist/core/constants.js +1 -0
  26. package/dist/core/defaults.d.ts +2 -1
  27. package/dist/core/evaluation.d.ts +4 -4
  28. package/dist/core/evaluation.js +17 -7
  29. package/dist/core/factory.d.ts +3 -2
  30. package/dist/core/service-registry.d.ts +4 -4
  31. package/dist/core/types.d.ts +11 -4
  32. package/dist/factories/compatibility-factory.d.ts +16 -1
  33. package/dist/factories/compatibility-factory.js +3 -1
  34. package/dist/factories/provider-factory.d.ts +5 -4
  35. package/dist/factories/provider-factory.js +15 -24
  36. package/dist/factories/provider-generate-factory.js +26 -20
  37. package/dist/lib/chat/client-utils.d.ts +3 -0
  38. package/dist/lib/chat/client-utils.js +22 -5
  39. package/dist/lib/chat/index.d.ts +4 -7
  40. package/dist/lib/chat/index.js +0 -8
  41. package/dist/lib/chat/session-storage.d.ts +2 -2
  42. package/dist/lib/chat/session.d.ts +4 -3
  43. package/dist/lib/chat/session.js +1 -1
  44. package/dist/lib/chat/sse-handler.js +13 -21
  45. package/dist/lib/chat/types.d.ts +3 -2
  46. package/dist/lib/chat/websocket-chat-handler.d.ts +4 -3
  47. package/dist/lib/chat/websocket-chat-handler.js +12 -12
  48. package/dist/lib/core/analytics.d.ts +3 -2
  49. package/dist/lib/core/analytics.js +16 -7
  50. package/dist/lib/core/base-provider.d.ts +35 -7
  51. package/dist/lib/core/base-provider.js +57 -23
  52. package/dist/lib/core/constants.d.ts +1 -0
  53. package/dist/lib/core/constants.js +1 -0
  54. package/dist/lib/core/defaults.d.ts +2 -1
  55. package/dist/lib/core/evaluation.d.ts +4 -4
  56. package/dist/lib/core/evaluation.js +17 -7
  57. package/dist/lib/core/factory.d.ts +3 -2
  58. package/dist/lib/core/service-registry.d.ts +4 -4
  59. package/dist/lib/core/types.d.ts +11 -4
  60. package/dist/lib/factories/compatibility-factory.d.ts +16 -1
  61. package/dist/lib/factories/compatibility-factory.js +3 -1
  62. package/dist/lib/factories/provider-factory.d.ts +5 -4
  63. package/dist/lib/factories/provider-factory.js +15 -24
  64. package/dist/lib/factories/provider-generate-factory.js +26 -20
  65. package/dist/lib/mcp/adapters/plugin-bridge.d.ts +5 -4
  66. package/dist/lib/mcp/adapters/plugin-bridge.js +13 -6
  67. package/dist/lib/mcp/client.d.ts +3 -1
  68. package/dist/lib/mcp/client.js +13 -10
  69. package/dist/lib/mcp/context-manager.d.ts +2 -1
  70. package/dist/lib/mcp/context-manager.js +8 -4
  71. package/dist/lib/mcp/contracts/mcp-contract.d.ts +15 -8
  72. package/dist/lib/mcp/core/plugin-manager.d.ts +3 -2
  73. package/dist/lib/mcp/core/plugin-manager.js +1 -1
  74. package/dist/lib/mcp/demo/plugin-demo.js +3 -1
  75. package/dist/lib/mcp/dynamic-chain-executor.d.ts +64 -40
  76. package/dist/lib/mcp/dynamic-chain-executor.js +3 -3
  77. package/dist/lib/mcp/dynamic-orchestrator.d.ts +14 -8
  78. package/dist/lib/mcp/ecosystem.d.ts +4 -4
  79. package/dist/lib/mcp/error-manager.d.ts +2 -2
  80. package/dist/lib/mcp/error-recovery.d.ts +4 -3
  81. package/dist/lib/mcp/external-client.d.ts +1 -1
  82. package/dist/lib/mcp/external-client.js +14 -10
  83. package/dist/lib/mcp/external-manager.d.ts +3 -3
  84. package/dist/lib/mcp/external-manager.js +9 -3
  85. package/dist/lib/mcp/factory.d.ts +7 -7
  86. package/dist/lib/mcp/function-calling.d.ts +14 -0
  87. package/dist/lib/mcp/function-calling.js +133 -34
  88. package/dist/lib/mcp/health-monitor.d.ts +2 -1
  89. package/dist/lib/mcp/health-monitor.js +16 -7
  90. package/dist/lib/mcp/index.d.ts +5 -5
  91. package/dist/lib/mcp/initialize-tools.d.ts +2 -1
  92. package/dist/lib/mcp/initialize-tools.js +10 -2
  93. package/dist/lib/mcp/manager.d.ts +2 -1
  94. package/dist/lib/mcp/neurolink-mcp-client.d.ts +1 -0
  95. package/dist/lib/mcp/neurolink-mcp-client.js +22 -6
  96. package/dist/lib/mcp/orchestrator.d.ts +13 -12
  97. package/dist/lib/mcp/orchestrator.js +10 -8
  98. package/dist/lib/mcp/plugin-manager.js +4 -2
  99. package/dist/lib/mcp/plugins/core/filesystem-mcp.d.ts +3 -2
  100. package/dist/lib/mcp/plugins/core/filesystem-mcp.js +5 -2
  101. package/dist/lib/mcp/plugins/filesystem-mcp.d.ts +2 -1
  102. package/dist/lib/mcp/registry.d.ts +2 -1
  103. package/dist/lib/mcp/registry.js +2 -1
  104. package/dist/lib/mcp/security-manager.d.ts +4 -2
  105. package/dist/lib/mcp/servers/agent/direct-tools-server.js +18 -6
  106. package/dist/lib/mcp/servers/ai-providers/ai-analysis-tools.d.ts +1 -16
  107. package/dist/lib/mcp/servers/ai-providers/ai-analysis-tools.js +21 -17
  108. package/dist/lib/mcp/servers/ai-providers/ai-core-server.d.ts +2 -2
  109. package/dist/lib/mcp/servers/ai-providers/ai-core-server.js +15 -133
  110. package/dist/lib/mcp/servers/ai-providers/ai-workflow-tools.d.ts +1 -97
  111. package/dist/lib/mcp/servers/ai-providers/ai-workflow-tools.js +18 -18
  112. package/dist/lib/mcp/session-manager.d.ts +4 -3
  113. package/dist/lib/mcp/session-persistence.js +5 -2
  114. package/dist/lib/mcp/tool-integration.d.ts +3 -2
  115. package/dist/lib/mcp/tool-integration.js +3 -1
  116. package/dist/lib/mcp/tool-registry.d.ts +18 -1
  117. package/dist/lib/mcp/tool-registry.js +11 -8
  118. package/dist/lib/mcp/transport-manager.d.ts +2 -1
  119. package/dist/lib/mcp/transport-manager.js +5 -1
  120. package/dist/lib/mcp/unified-mcp.d.ts +5 -5
  121. package/dist/lib/mcp/unified-registry.d.ts +18 -2
  122. package/dist/lib/mcp/unified-registry.js +52 -3
  123. package/dist/lib/neurolink.d.ts +2 -2
  124. package/dist/lib/neurolink.js +40 -15
  125. package/dist/lib/providers/amazon-bedrock.d.ts +1 -1
  126. package/dist/lib/providers/amazon-bedrock.js +8 -7
  127. package/dist/lib/providers/analytics-helper.d.ts +8 -23
  128. package/dist/lib/providers/analytics-helper.js +95 -33
  129. package/dist/lib/providers/anthropic-baseprovider.d.ts +3 -3
  130. package/dist/lib/providers/anthropic-baseprovider.js +6 -5
  131. package/dist/lib/providers/anthropic.d.ts +2 -2
  132. package/dist/lib/providers/anthropic.js +11 -4
  133. package/dist/lib/providers/azure-openai.d.ts +5 -4
  134. package/dist/lib/providers/azure-openai.js +10 -4
  135. package/dist/lib/providers/function-calling-provider.d.ts +66 -4
  136. package/dist/lib/providers/function-calling-provider.js +209 -10
  137. package/dist/lib/providers/google-ai-studio.d.ts +2 -2
  138. package/dist/lib/providers/google-ai-studio.js +9 -3
  139. package/dist/lib/providers/google-vertex.d.ts +2 -2
  140. package/dist/lib/providers/google-vertex.js +18 -12
  141. package/dist/lib/providers/huggingFace.d.ts +1 -1
  142. package/dist/lib/providers/huggingFace.js +8 -4
  143. package/dist/lib/providers/mcp-provider.d.ts +3 -3
  144. package/dist/lib/providers/mcp-provider.js +20 -5
  145. package/dist/lib/providers/mistral.d.ts +34 -27
  146. package/dist/lib/providers/mistral.js +115 -107
  147. package/dist/lib/providers/ollama.d.ts +2 -1
  148. package/dist/lib/providers/ollama.js +43 -3
  149. package/dist/lib/providers/openAI.d.ts +1 -1
  150. package/dist/lib/providers/openAI.js +8 -4
  151. package/dist/lib/proxy/proxy-fetch.js +3 -2
  152. package/dist/lib/sdk/tool-extension.d.ts +12 -12
  153. package/dist/lib/sdk/tool-extension.js +2 -1
  154. package/dist/lib/sdk/tool-registration.d.ts +16 -12
  155. package/dist/lib/sdk/tool-registration.js +3 -2
  156. package/dist/lib/services/streaming/streaming-manager.js +11 -10
  157. package/dist/lib/services/types.d.ts +5 -4
  158. package/dist/lib/services/websocket/websocket-server.d.ts +1 -1
  159. package/dist/lib/services/websocket/websocket-server.js +13 -12
  160. package/dist/lib/telemetry/telemetry-service.js +9 -8
  161. package/dist/lib/types/cli.d.ts +247 -0
  162. package/dist/lib/types/cli.js +22 -0
  163. package/dist/lib/types/common.d.ts +76 -0
  164. package/dist/lib/types/common.js +52 -0
  165. package/dist/lib/types/generate-types.d.ts +6 -6
  166. package/dist/lib/types/index.d.ts +12 -0
  167. package/dist/lib/types/index.js +12 -0
  168. package/dist/lib/types/mcp-types.d.ts +7 -7
  169. package/dist/lib/types/providers.d.ts +158 -0
  170. package/dist/lib/types/providers.js +23 -0
  171. package/dist/lib/types/stream-types.d.ts +4 -3
  172. package/dist/lib/types/tools.d.ts +154 -0
  173. package/dist/lib/types/tools.js +24 -0
  174. package/dist/lib/utils/logger.d.ts +5 -5
  175. package/dist/lib/utils/provider-validation.d.ts +2 -1
  176. package/dist/mcp/adapters/plugin-bridge.d.ts +5 -4
  177. package/dist/mcp/adapters/plugin-bridge.js +13 -6
  178. package/dist/mcp/client.d.ts +3 -1
  179. package/dist/mcp/client.js +13 -10
  180. package/dist/mcp/context-manager.d.ts +2 -1
  181. package/dist/mcp/context-manager.js +8 -4
  182. package/dist/mcp/contracts/mcp-contract.d.ts +15 -8
  183. package/dist/mcp/core/plugin-manager.d.ts +3 -2
  184. package/dist/mcp/core/plugin-manager.js +1 -1
  185. package/dist/mcp/demo/plugin-demo.js +3 -1
  186. package/dist/mcp/dynamic-chain-executor.d.ts +64 -40
  187. package/dist/mcp/dynamic-chain-executor.js +3 -3
  188. package/dist/mcp/dynamic-orchestrator.d.ts +14 -8
  189. package/dist/mcp/dynamic-orchestrator.js +1 -1
  190. package/dist/mcp/ecosystem.d.ts +4 -4
  191. package/dist/mcp/error-manager.d.ts +2 -2
  192. package/dist/mcp/error-recovery.d.ts +4 -3
  193. package/dist/mcp/external-client.d.ts +1 -1
  194. package/dist/mcp/external-client.js +14 -10
  195. package/dist/mcp/external-manager.d.ts +3 -3
  196. package/dist/mcp/external-manager.js +9 -3
  197. package/dist/mcp/factory.d.ts +7 -7
  198. package/dist/mcp/function-calling.d.ts +14 -0
  199. package/dist/mcp/function-calling.js +133 -34
  200. package/dist/mcp/health-monitor.d.ts +2 -1
  201. package/dist/mcp/health-monitor.js +16 -7
  202. package/dist/mcp/index.d.ts +5 -5
  203. package/dist/mcp/initialize-tools.d.ts +2 -1
  204. package/dist/mcp/initialize-tools.js +10 -2
  205. package/dist/mcp/manager.d.ts +2 -1
  206. package/dist/mcp/neurolink-mcp-client.d.ts +1 -0
  207. package/dist/mcp/neurolink-mcp-client.js +22 -6
  208. package/dist/mcp/orchestrator.d.ts +13 -12
  209. package/dist/mcp/orchestrator.js +10 -8
  210. package/dist/mcp/plugin-manager.js +4 -2
  211. package/dist/mcp/plugins/core/filesystem-mcp.d.ts +3 -2
  212. package/dist/mcp/plugins/core/filesystem-mcp.js +5 -2
  213. package/dist/mcp/plugins/filesystem-mcp.d.ts +2 -1
  214. package/dist/mcp/registry.d.ts +2 -1
  215. package/dist/mcp/registry.js +2 -1
  216. package/dist/mcp/security-manager.d.ts +4 -2
  217. package/dist/mcp/servers/agent/direct-tools-server.js +19 -6
  218. package/dist/mcp/servers/ai-providers/ai-analysis-tools.d.ts +1 -16
  219. package/dist/mcp/servers/ai-providers/ai-analysis-tools.js +21 -17
  220. package/dist/mcp/servers/ai-providers/ai-core-server.d.ts +2 -2
  221. package/dist/mcp/servers/ai-providers/ai-core-server.js +15 -132
  222. package/dist/mcp/servers/ai-providers/ai-workflow-tools.d.ts +1 -97
  223. package/dist/mcp/servers/ai-providers/ai-workflow-tools.js +18 -18
  224. package/dist/mcp/session-manager.d.ts +4 -3
  225. package/dist/mcp/session-persistence.js +5 -2
  226. package/dist/mcp/tool-integration.d.ts +3 -2
  227. package/dist/mcp/tool-integration.js +3 -1
  228. package/dist/mcp/tool-registry.d.ts +18 -1
  229. package/dist/mcp/tool-registry.js +11 -8
  230. package/dist/mcp/transport-manager.d.ts +2 -1
  231. package/dist/mcp/transport-manager.js +5 -1
  232. package/dist/mcp/unified-mcp.d.ts +5 -5
  233. package/dist/mcp/unified-registry.d.ts +18 -2
  234. package/dist/mcp/unified-registry.js +52 -3
  235. package/dist/neurolink.d.ts +2 -2
  236. package/dist/neurolink.js +40 -15
  237. package/dist/providers/amazon-bedrock.d.ts +1 -1
  238. package/dist/providers/amazon-bedrock.js +8 -7
  239. package/dist/providers/analytics-helper.d.ts +8 -23
  240. package/dist/providers/analytics-helper.js +95 -33
  241. package/dist/providers/anthropic-baseprovider.d.ts +3 -3
  242. package/dist/providers/anthropic-baseprovider.js +6 -5
  243. package/dist/providers/anthropic.d.ts +2 -2
  244. package/dist/providers/anthropic.js +11 -4
  245. package/dist/providers/azure-openai.d.ts +5 -4
  246. package/dist/providers/azure-openai.js +10 -4
  247. package/dist/providers/function-calling-provider.d.ts +66 -4
  248. package/dist/providers/function-calling-provider.js +209 -10
  249. package/dist/providers/google-ai-studio.d.ts +2 -2
  250. package/dist/providers/google-ai-studio.js +9 -3
  251. package/dist/providers/google-vertex.d.ts +2 -2
  252. package/dist/providers/google-vertex.js +18 -12
  253. package/dist/providers/huggingFace.d.ts +1 -1
  254. package/dist/providers/huggingFace.js +8 -4
  255. package/dist/providers/mcp-provider.d.ts +3 -3
  256. package/dist/providers/mcp-provider.js +20 -5
  257. package/dist/providers/mistral.d.ts +34 -27
  258. package/dist/providers/mistral.js +116 -108
  259. package/dist/providers/ollama.d.ts +2 -1
  260. package/dist/providers/ollama.js +43 -3
  261. package/dist/providers/openAI.d.ts +1 -1
  262. package/dist/providers/openAI.js +8 -4
  263. package/dist/proxy/proxy-fetch.js +3 -2
  264. package/dist/sdk/tool-extension.d.ts +12 -12
  265. package/dist/sdk/tool-extension.js +2 -1
  266. package/dist/sdk/tool-registration.d.ts +16 -12
  267. package/dist/sdk/tool-registration.js +3 -2
  268. package/dist/services/streaming/streaming-manager.js +11 -10
  269. package/dist/services/types.d.ts +5 -4
  270. package/dist/services/websocket/websocket-server.d.ts +1 -1
  271. package/dist/services/websocket/websocket-server.js +14 -12
  272. package/dist/telemetry/telemetry-service.js +9 -8
  273. package/dist/types/cli.d.ts +247 -0
  274. package/dist/types/cli.js +22 -0
  275. package/dist/types/common.d.ts +76 -0
  276. package/dist/types/common.js +52 -0
  277. package/dist/types/generate-types.d.ts +6 -6
  278. package/dist/types/index.d.ts +12 -0
  279. package/dist/types/index.js +12 -0
  280. package/dist/types/mcp-types.d.ts +7 -7
  281. package/dist/types/providers.d.ts +158 -0
  282. package/dist/types/providers.js +23 -0
  283. package/dist/types/stream-types.d.ts +4 -3
  284. package/dist/types/tools.d.ts +154 -0
  285. package/dist/types/tools.js +25 -0
  286. package/dist/utils/logger.d.ts +5 -5
  287. package/dist/utils/provider-validation.d.ts +2 -1
  288. package/package.json +12 -10
@@ -12,7 +12,22 @@ export declare class CompatibilityConversionFactory {
12
12
  /**
13
13
  * Convert GenerateResult to legacy TextGenerationResult format
14
14
  */
15
- static convertGenerateToText(result: GenerateResult): any;
15
+ static convertGenerateToText(result: GenerateResult): {
16
+ content: string;
17
+ provider?: string;
18
+ model?: string;
19
+ usage?: {
20
+ inputTokens: number;
21
+ outputTokens: number;
22
+ totalTokens: number;
23
+ };
24
+ responseTime?: number;
25
+ toolsUsed?: number;
26
+ toolExecutions?: unknown[];
27
+ analytics?: unknown;
28
+ evaluation?: unknown;
29
+ [key: string]: unknown;
30
+ };
16
31
  /**
17
32
  * Convert GenerateOptions to TextGenerationOptions
18
33
  */
@@ -37,7 +37,9 @@ export class CompatibilityConversionFactory {
37
37
  model: result.model,
38
38
  usage: result.usage,
39
39
  responseTime: result.responseTime,
40
- toolsUsed: result.toolsUsed,
40
+ toolsUsed: Array.isArray(result.toolsUsed)
41
+ ? result.toolsUsed.length
42
+ : result.toolsUsed,
41
43
  toolExecutions: result.toolExecutions,
42
44
  enhancedWithTools: result.enhancedWithTools,
43
45
  availableTools: result.availableTools,
@@ -1,10 +1,11 @@
1
1
  import type { AIProvider, AIProviderName } from "../core/types.js";
2
+ import type { UnknownRecord } from "../types/common.js";
2
3
  /**
3
4
  * Provider constructor interface - supports both sync constructors and async factory functions
4
5
  */
5
6
  type ProviderConstructor = {
6
- new (modelName?: string, providerName?: any, sdk?: any): AIProvider;
7
- } | ((modelName?: string, providerName?: any, sdk?: any) => Promise<AIProvider>);
7
+ new (modelName?: string, providerName?: string, sdk?: UnknownRecord): AIProvider;
8
+ } | ((modelName?: string, providerName?: string, sdk?: UnknownRecord) => Promise<AIProvider>);
8
9
  /**
9
10
  * Provider registration entry
10
11
  */
@@ -29,7 +30,7 @@ export declare class ProviderFactory {
29
30
  /**
30
31
  * Create a provider instance
31
32
  */
32
- static createProvider(providerName: AIProviderName | string, modelName?: string, sdk?: any): Promise<AIProvider>;
33
+ static createProvider(providerName: AIProviderName | string, modelName?: string, sdk?: UnknownRecord): Promise<AIProvider>;
33
34
  /**
34
35
  * Check if a provider is registered
35
36
  */
@@ -63,7 +64,7 @@ export declare class ProviderFactory {
63
64
  * Create the best available provider for the given name
64
65
  * Used by NeuroLink SDK for streaming and generation
65
66
  */
66
- static createBestProvider(providerName: AIProviderName | string, modelName?: string, enableMCP?: boolean, sdk?: any): Promise<AIProvider>;
67
+ static createBestProvider(providerName: AIProviderName | string, modelName?: string, enableMCP?: boolean, sdk?: UnknownRecord): Promise<AIProvider>;
67
68
  }
68
69
  /**
69
70
  * Helper function to create providers with backward compatibility
@@ -37,32 +37,23 @@ export class ProviderFactory {
37
37
  }
38
38
  const model = modelName || registration.defaultModel;
39
39
  try {
40
- // Check if constructor is an async factory function or a class constructor
41
- if (typeof registration.constructor === "function") {
42
- // Check if it has a prototype (class constructor) or not (factory function)
43
- if (registration.constructor.prototype &&
44
- registration.constructor.prototype.constructor ===
45
- registration.constructor) {
46
- // It's a class constructor
47
- return new registration.constructor(model, providerName, sdk);
48
- }
49
- else {
50
- // It's a factory function - call it and await if it returns a promise
51
- const result = registration.constructor(model, providerName, sdk);
52
- if (result && typeof result.then === "function") {
53
- // It's a Promise (async factory)
54
- return await result;
55
- }
56
- else {
57
- // It's a sync result, return it
58
- return result;
59
- }
60
- }
40
+ // Try calling as factory function first, then fallback to constructor
41
+ let result;
42
+ try {
43
+ // Try as factory function
44
+ result = registration.constructor(model, providerName, sdk);
61
45
  }
62
- else {
63
- // Fallback - use as class constructor
64
- return new registration.constructor(model, sdk);
46
+ catch (factoryError) {
47
+ // Fallback to constructor
48
+ result = new registration.constructor(model, providerName, sdk);
65
49
  }
50
+ // Only await if result is actually a Promise
51
+ if (result &&
52
+ typeof result === "object" &&
53
+ typeof result.then === "function") {
54
+ return await result;
55
+ }
56
+ return result;
66
57
  }
67
58
  catch (error) {
68
59
  logger.error(`Failed to create provider ${providerName}:`, error);
@@ -37,35 +37,41 @@ export class ProviderGenerateFactory {
37
37
  try {
38
38
  // Use existing generate method for identical performance
39
39
  const textResult = await provider.generate(textOptions);
40
+ if (!textResult) {
41
+ throw new Error("Generate method returned null result");
42
+ }
40
43
  // Convert back to GenerateResult format with type safety
41
44
  const generateResult = {
42
- content: textResult?.content || "",
43
- outputs: { text: textResult?.content || "" },
44
- provider: textResult?.provider,
45
- model: textResult?.model,
46
- usage: textResult?.usage
45
+ content: textResult.content || "",
46
+ outputs: { text: textResult.content || "" },
47
+ provider: textResult.provider,
48
+ model: textResult.model,
49
+ usage: textResult.usage
47
50
  ? {
48
- inputTokens: textResult.usage?.promptTokens || 0,
49
- outputTokens: textResult.usage?.completionTokens || 0,
50
- totalTokens: textResult.usage?.totalTokens || 0,
51
+ inputTokens: textResult.usage.inputTokens || 0,
52
+ outputTokens: textResult.usage.outputTokens || 0,
53
+ totalTokens: textResult.usage.totalTokens || 0,
51
54
  }
52
55
  : undefined,
53
- responseTime: textResult?.responseTime,
54
- toolsUsed: textResult?.toolsUsed,
55
- toolExecutions: textResult?.toolExecutions?.map((te) => ({
56
- name: te.toolName || te.name || "",
57
- input: te.input || {},
58
- output: te.output || te.result,
59
- duration: te.executionTime || te.duration || 0,
60
- })),
61
- enhancedWithTools: textResult?.enhancedWithTools,
62
- availableTools: textResult?.availableTools?.map((at) => ({
56
+ responseTime: textResult.responseTime,
57
+ toolsUsed: textResult.toolsUsed,
58
+ toolExecutions: textResult.toolExecutions?.map((te) => {
59
+ const toolExecution = te;
60
+ return {
61
+ name: toolExecution.toolName || toolExecution.name || "",
62
+ input: toolExecution.input || {},
63
+ output: toolExecution.output || toolExecution.result,
64
+ duration: toolExecution.executionTime || toolExecution.duration || 0,
65
+ };
66
+ }),
67
+ enhancedWithTools: textResult.enhancedWithTools,
68
+ availableTools: textResult.availableTools?.map((at) => ({
63
69
  name: at.name || "",
64
70
  description: at.description || "",
65
71
  parameters: at.parameters || {},
66
72
  })),
67
- analytics: textResult?.analytics,
68
- evaluation: textResult?.evaluation,
73
+ analytics: textResult.analytics,
74
+ evaluation: textResult.evaluation,
69
75
  };
70
76
  return generateResult;
71
77
  }
@@ -63,6 +63,9 @@ export declare class ChatClient {
63
63
  reconnectCount: number;
64
64
  };
65
65
  private handleSSEEvent;
66
+ private isDataEventData;
67
+ private isErrorEventData;
68
+ private isCompleteEventData;
66
69
  private handleDataEvent;
67
70
  private handleErrorEvent;
68
71
  private handleCompleteEvent;
@@ -140,19 +140,36 @@ export class ChatClient {
140
140
  handleSSEEvent(event) {
141
141
  switch (event.type) {
142
142
  case "data":
143
- this.handleDataEvent(event.data);
143
+ if (this.isDataEventData(event.data)) {
144
+ this.handleDataEvent(event.data);
145
+ }
144
146
  break;
145
147
  case "error":
146
- this.handleErrorEvent(event.data);
148
+ if (this.isErrorEventData(event.data)) {
149
+ this.handleErrorEvent(event.data);
150
+ }
147
151
  break;
148
152
  case "complete":
149
- this.handleCompleteEvent(event.data);
153
+ if (this.isCompleteEventData(event.data)) {
154
+ this.handleCompleteEvent(event.data);
155
+ }
150
156
  break;
151
157
  case "heartbeat":
152
158
  // Heartbeat received, connection is alive
153
159
  break;
154
160
  }
155
161
  }
162
+ isDataEventData(data) {
163
+ return (typeof data === "object" &&
164
+ data !== null &&
165
+ typeof data.type === "string");
166
+ }
167
+ isErrorEventData(data) {
168
+ return typeof data === "object" && data !== null;
169
+ }
170
+ isCompleteEventData(data) {
171
+ return typeof data === "object" && data !== null;
172
+ }
156
173
  handleDataEvent(data) {
157
174
  if (data.type === "chunk") {
158
175
  // Handle streaming response chunk
@@ -167,7 +184,7 @@ export class ChatClient {
167
184
  const message = {
168
185
  id: `msg_${Date.now()}_assistant`,
169
186
  role: "assistant",
170
- content: data.content,
187
+ content: data.content || "",
171
188
  timestamp: Date.now(),
172
189
  };
173
190
  this.messages.push(message);
@@ -177,7 +194,7 @@ export class ChatClient {
177
194
  else if (data.type === "start") {
178
195
  // New conversation started
179
196
  const userMessage = {
180
- id: data.messageId,
197
+ id: String(data.messageId || `msg_${Date.now()}_user`),
181
198
  role: "user",
182
199
  content: data.content || "", // Use data content if available
183
200
  timestamp: Date.now(),
@@ -11,17 +11,14 @@ export type { ChatMessage, ChatRequest, SSEOptions, SessionOptions, SSEEvent, Ch
11
11
  /**
12
12
  * Quick setup helper for SSE chat
13
13
  */
14
- export declare function createSSEChat(provider: any, options?: any): Promise<SSEChatHandler>;
14
+ export declare function createSSEChat(provider: unknown, options?: unknown): Promise<SSEChatHandler>;
15
15
  /**
16
16
  * Quick setup helper for chat session
17
17
  */
18
- export declare function createChatSession(sessionId: string, options?: any): Promise<import("./session.js").ChatSession>;
19
- /**
20
- * Enhanced factory function for real-time chat
21
- */
18
+ export declare function createChatSession(sessionId: string, options?: unknown): Promise<import("./session.js").ChatSession>;
22
19
  export declare function createEnhancedChatService(options: {
23
- provider: any;
20
+ provider: unknown;
24
21
  enableSSE?: boolean;
25
22
  enableWebSocket?: boolean;
26
- streamingConfig?: any;
23
+ streamingConfig?: unknown;
27
24
  }): Promise<SSEChatHandler>;
@@ -21,14 +21,6 @@ export async function createChatSession(sessionId, options) {
21
21
  const { ChatSession } = await import("./session.js");
22
22
  return new ChatSession(sessionId, options);
23
23
  }
24
- // Real-time Services (Phase 4) - Temporarily disabled for testing
25
- // export { WebSocketChatHandler } from './websocket-chat-handler.js';
26
- // export { NeuroLinkWebSocketServer } from '../services/websocket/websocket-server.js';
27
- // export { StreamingManager } from '../services/streaming/streaming-manager.js';
28
- // export * from '../services/types.js';
29
- /**
30
- * Enhanced factory function for real-time chat
31
- */
32
24
  export async function createEnhancedChatService(options) {
33
25
  if (options.enableWebSocket) {
34
26
  const { WebSocketChatHandler } = await import("./websocket-chat-handler.js");
@@ -47,10 +47,10 @@ export declare class FileSessionStorage implements SessionStorage {
47
47
  */
48
48
  interface RedisClient {
49
49
  get(key: string): Promise<string | null>;
50
- set(key: string, value: string, options?: any): Promise<any>;
50
+ set(key: string, value: string, options?: unknown): Promise<unknown>;
51
51
  del(key: string): Promise<number>;
52
52
  exists(key: string): Promise<number>;
53
- expire?(key: string, ttl: number): Promise<any>;
53
+ expire?(key: string, ttl: number): Promise<unknown>;
54
54
  keys?(pattern: string): Promise<string[]>;
55
55
  }
56
56
  export declare class RedisSessionStorage implements SessionStorage {
@@ -3,6 +3,7 @@
3
3
  * Chat session management with persistence
4
4
  */
5
5
  import type { ChatMessage, SessionOptions, ChatSessionState } from "./types.js";
6
+ import type { JsonValue } from "../types/common.js";
6
7
  export declare class ChatSession {
7
8
  private sessionId;
8
9
  private messages;
@@ -15,7 +16,7 @@ export declare class ChatSession {
15
16
  /**
16
17
  * Add message to session
17
18
  */
18
- addMessage(role: "user" | "assistant" | "system", content: string, metadata?: any): ChatMessage;
19
+ addMessage(role: "user" | "assistant" | "system", content: string, metadata?: unknown): ChatMessage;
19
20
  /**
20
21
  * Get conversation history
21
22
  */
@@ -27,11 +28,11 @@ export declare class ChatSession {
27
28
  /**
28
29
  * Get session metadata
29
30
  */
30
- getMetadata(): Record<string, any>;
31
+ getMetadata(): Record<string, JsonValue>;
31
32
  /**
32
33
  * Set session metadata
33
34
  */
34
- setMetadata(key: string, value: any): void;
35
+ setMetadata(key: string, value: JsonValue): void;
35
36
  /**
36
37
  * Clear session history
37
38
  */
@@ -36,7 +36,7 @@ export class ChatSession {
36
36
  role,
37
37
  content,
38
38
  timestamp: Date.now(),
39
- metadata,
39
+ metadata: metadata,
40
40
  };
41
41
  this.messages.push(message);
42
42
  this.lastActivity = Date.now();
@@ -49,29 +49,21 @@ export class SSEChatHandler {
49
49
  systemPrompt: options.systemPrompt,
50
50
  });
51
51
  if (aiResponse?.stream) {
52
- // Convert async iterable to readable stream
52
+ // Iterate over the async iterable stream
53
53
  const reader = aiResponse.stream;
54
54
  let fullResponse = "";
55
- try {
56
- while (true) {
57
- const { done, value } = await reader.read();
58
- if (done) {
59
- break;
60
- }
61
- fullResponse += value;
62
- // Send chunk to client
63
- await this.sendEvent(writer, {
64
- type: "data",
65
- data: {
66
- type: "chunk",
67
- content: value,
68
- sessionId,
69
- },
70
- });
71
- }
72
- }
73
- finally {
74
- reader.releaseLock();
55
+ for await (const chunk of reader) {
56
+ const content = chunk.content;
57
+ fullResponse += content;
58
+ // Send chunk to client
59
+ await this.sendEvent(writer, {
60
+ type: "data",
61
+ data: {
62
+ type: "chunk",
63
+ content: content,
64
+ sessionId,
65
+ },
66
+ });
75
67
  }
76
68
  // Add AI response to session
77
69
  const assistantMessage = {
@@ -2,6 +2,7 @@
2
2
  * Phase 3: SSE Chat Utilities
3
3
  * Type definitions for chat infrastructure
4
4
  */
5
+ import type { JsonValue } from "../types/common.js";
5
6
  export interface ChatMessage {
6
7
  id: string;
7
8
  role: "user" | "assistant" | "system";
@@ -41,7 +42,7 @@ export interface SessionOptions {
41
42
  }
42
43
  export interface SSEEvent {
43
44
  type: "data" | "error" | "progress" | "complete" | "heartbeat";
44
- data: any;
45
+ data: JsonValue;
45
46
  id?: string;
46
47
  retry?: number;
47
48
  }
@@ -50,7 +51,7 @@ export interface ChatSessionState {
50
51
  messages: ChatMessage[];
51
52
  createdAt: number;
52
53
  lastActivity: number;
53
- metadata?: Record<string, any>;
54
+ metadata?: Record<string, JsonValue>;
54
55
  }
55
56
  export interface StreamingChatResponse {
56
57
  sessionId: string;
@@ -1,9 +1,10 @@
1
1
  import { SSEChatHandler } from "./sse-handler.js";
2
2
  import type { AIProvider } from "../core/types.js";
3
- import type { WebSocketOptions, ChatRequest, GroupChatRequest, StreamingChatRequest } from "../services/types.js";
4
- import type { SSEOptions } from "./types.js";
3
+ import type { WebSocketOptions, GroupChatRequest, StreamingChatRequest } from "../services/types.js";
4
+ import type { SSEOptions, ChatRequest } from "./types.js";
5
+ import type { UnknownRecord } from "../types/common.js";
5
6
  export interface WebSocketChatOptions {
6
- sseOptions?: any;
7
+ sseOptions?: UnknownRecord;
7
8
  wsOptions?: WebSocketOptions;
8
9
  enableTypingIndicators?: boolean;
9
10
  enablePresenceTracking?: boolean;
@@ -61,7 +61,7 @@ export class WebSocketChatHandler extends SSEChatHandler {
61
61
  });
62
62
  // Generate AI response
63
63
  const result = await this.provider.generate({
64
- prompt: request.prompt,
64
+ prompt: request.message,
65
65
  temperature: request.options?.temperature,
66
66
  maxTokens: request.options?.maxTokens,
67
67
  });
@@ -177,12 +177,8 @@ export class WebSocketChatHandler extends SSEChatHandler {
177
177
  }
178
178
  // Helper methods
179
179
  sendToConnection(connectionId, message) {
180
- // Use the WebSocket server's send method
181
- const ws = this.wsServer.connections?.get(connectionId);
182
- if (ws && ws.readyState === 1) {
183
- // WebSocket.OPEN
184
- ws.send(JSON.stringify(message));
185
- }
180
+ // Use the WebSocket server's public send method
181
+ this.wsServer.sendMessage(connectionId, message);
186
182
  }
187
183
  sendError(connectionId, errorMessage) {
188
184
  const errorMsg = {
@@ -227,18 +223,22 @@ export class WebSocketChatHandler extends SSEChatHandler {
227
223
  });
228
224
  }
229
225
  handleWebSocketChatMessage(connectionId, message) {
230
- switch (message.data?.event) {
226
+ const data = message.data;
227
+ if (!data || typeof data !== "object") {
228
+ return;
229
+ }
230
+ switch (data.event) {
231
231
  case "chat_request":
232
- this.handleWebSocketChatRequest(connectionId, message.data.request);
232
+ this.handleWebSocketChatRequest(connectionId, data.request);
233
233
  break;
234
234
  case "join_room":
235
- this.wsServer.joinRoom(connectionId, message.data.roomId);
235
+ this.wsServer.joinRoom(connectionId, data.roomId);
236
236
  break;
237
237
  case "leave_room":
238
- this.wsServer.leaveRoom(connectionId, message.data.roomId);
238
+ this.wsServer.leaveRoom(connectionId, data.roomId);
239
239
  break;
240
240
  case "typing_start":
241
- this.showTypingIndicator(connectionId, message.data.sender || "user");
241
+ this.showTypingIndicator(connectionId, data.sender || "user");
242
242
  break;
243
243
  case "typing_stop":
244
244
  this.clearTypingIndicator(connectionId);
@@ -4,6 +4,7 @@
4
4
  * Provides lightweight analytics tracking for AI provider usage,
5
5
  * including tokens, costs, performance metrics, and custom context.
6
6
  */
7
+ import type { JsonValue, UnknownRecord } from "../types/common.js";
7
8
  export interface AnalyticsData {
8
9
  provider: string;
9
10
  model: string;
@@ -14,10 +15,10 @@ export interface AnalyticsData {
14
15
  };
15
16
  cost?: number;
16
17
  responseTime: number;
17
- context?: Record<string, any>;
18
+ context?: Record<string, JsonValue>;
18
19
  timestamp: string;
19
20
  }
20
21
  /**
21
22
  * Create analytics data structure from AI response
22
23
  */
23
- export declare function createAnalytics(provider: string, model: string, result: any, responseTime: number, context?: Record<string, any>): AnalyticsData;
24
+ export declare function createAnalytics(provider: string, model: string, result: UnknownRecord, responseTime: number, context?: Record<string, JsonValue>): AnalyticsData;
@@ -51,23 +51,30 @@ export function createAnalytics(provider, model, result, responseTime, context)
51
51
  */
52
52
  function extractTokenUsage(result) {
53
53
  // Handle different response formats
54
- if (result.usage) {
54
+ if (result.usage &&
55
+ typeof result.usage === "object" &&
56
+ result.usage !== null) {
55
57
  const usage = result.usage;
56
58
  // Standard format
57
- if (usage.promptTokens !== undefined &&
58
- usage.completionTokens !== undefined) {
59
+ if (typeof usage.promptTokens === "number" &&
60
+ typeof usage.completionTokens === "number") {
59
61
  return {
60
62
  input: usage.promptTokens || 0,
61
63
  output: usage.completionTokens || 0,
62
- total: usage.totalTokens || usage.promptTokens + usage.completionTokens,
64
+ total: typeof usage.totalTokens === "number"
65
+ ? usage.totalTokens
66
+ : usage.promptTokens + usage.completionTokens,
63
67
  };
64
68
  }
65
69
  // Alternative formats
66
- if (usage.input_tokens !== undefined && usage.output_tokens !== undefined) {
70
+ if (typeof usage.input_tokens === "number" &&
71
+ typeof usage.output_tokens === "number") {
67
72
  return {
68
73
  input: usage.input_tokens || 0,
69
74
  output: usage.output_tokens || 0,
70
- total: usage.total_tokens || usage.input_tokens + usage.output_tokens,
75
+ total: typeof usage.total_tokens === "number"
76
+ ? usage.total_tokens
77
+ : usage.input_tokens + usage.output_tokens,
71
78
  };
72
79
  }
73
80
  // Generic tokens field
@@ -80,7 +87,9 @@ function extractTokenUsage(result) {
80
87
  }
81
88
  }
82
89
  // Fallback: estimate from text length
83
- const textLength = result.text?.length || result.content?.length || 0;
90
+ const textLength = (typeof result.text === "string" ? result.text.length : 0) ||
91
+ (typeof result.content === "string" ? result.content.length : 0) ||
92
+ 0;
84
93
  const estimatedTokens = Math.ceil(textLength / 4); // ~4 chars per token
85
94
  return {
86
95
  input: 0,
@@ -1,8 +1,35 @@
1
1
  import type { ZodType, ZodTypeDef } from "zod";
2
2
  import type { Schema } from "ai";
3
- import type { Tool } from "ai";
4
- import type { AIProvider, TextGenerationOptions, EnhancedGenerateResult, AnalyticsData, AIProviderName } from "../core/types.js";
3
+ import type { Tool, LanguageModel } from "ai";
4
+ import type { AIProvider, TextGenerationOptions, EnhancedGenerateResult, AnalyticsData, AIProviderName, EvaluationData } from "../core/types.js";
5
5
  import type { StreamOptions, StreamResult } from "../types/stream-types.js";
6
+ import type { JsonValue, UnknownRecord } from "../types/common.js";
7
+ import type { ToolResult } from "../types/tools.js";
8
+ /**
9
+ * Interface for SDK with in-memory MCP servers
10
+ */
11
+ export interface NeuroLinkSDK {
12
+ getInMemoryServers?: () => Map<string, {
13
+ server: {
14
+ title?: string;
15
+ description?: string;
16
+ tools?: Map<string, ToolInfo> | Record<string, ToolInfo>;
17
+ };
18
+ category?: string;
19
+ metadata?: UnknownRecord;
20
+ }>;
21
+ }
22
+ /**
23
+ * Interface for tool information in MCP servers
24
+ */
25
+ interface ToolInfo {
26
+ description?: string;
27
+ inputSchema?: ZodType<JsonValue>;
28
+ parameters?: ZodType<JsonValue>;
29
+ execute: (args: JsonValue) => Promise<JsonValue | ToolResult> | JsonValue | ToolResult;
30
+ isImplemented?: boolean;
31
+ metadata?: UnknownRecord;
32
+ }
6
33
  /**
7
34
  * Abstract base class for all AI providers
8
35
  * Tools are integrated as first-class citizens - always available by default
@@ -354,8 +381,8 @@ export declare abstract class BaseProvider implements AIProvider {
354
381
  protected mcpTools?: Record<string, Tool>;
355
382
  protected sessionId?: string;
356
383
  protected userId?: string;
357
- protected sdk?: any;
358
- constructor(modelName?: string, providerName?: AIProviderName, sdk?: any);
384
+ protected sdk?: NeuroLinkSDK;
385
+ constructor(modelName?: string, providerName?: AIProviderName, sdk?: NeuroLinkSDK);
359
386
  /**
360
387
  * Check if this provider supports tool/function calling
361
388
  * Override in subclasses to disable tools for specific providers or models
@@ -392,7 +419,7 @@ export declare abstract class BaseProvider implements AIProvider {
392
419
  * REQUIRED: Every provider MUST implement this method
393
420
  * Returns the Vercel AI SDK model instance for this provider
394
421
  */
395
- protected abstract getAISDKModel(): any | Promise<any>;
422
+ protected abstract getAISDKModel(): LanguageModel | Promise<LanguageModel>;
396
423
  /**
397
424
  * Get all available tools - direct tools are ALWAYS available
398
425
  * MCP tools are added when available (without blocking)
@@ -405,12 +432,12 @@ export declare abstract class BaseProvider implements AIProvider {
405
432
  /**
406
433
  * Provider-specific error handling
407
434
  */
408
- protected abstract handleProviderError(error: any): Error;
435
+ protected abstract handleProviderError(error: unknown): Error;
409
436
  protected normalizeTextOptions(optionsOrPrompt: TextGenerationOptions | string): TextGenerationOptions;
410
437
  protected normalizeStreamOptions(optionsOrPrompt: StreamOptions | string): StreamOptions;
411
438
  protected enhanceResult(result: EnhancedGenerateResult, options: TextGenerationOptions, startTime: number): Promise<EnhancedGenerateResult>;
412
439
  protected createAnalytics(result: EnhancedGenerateResult, responseTime: number, options: TextGenerationOptions): Promise<AnalyticsData>;
413
- protected createEvaluation(result: EnhancedGenerateResult, options: TextGenerationOptions): Promise<any>;
440
+ protected createEvaluation(result: EnhancedGenerateResult, options: TextGenerationOptions): Promise<EvaluationData>;
414
441
  protected validateOptions(options: TextGenerationOptions): void;
415
442
  protected getProviderInfo(): {
416
443
  provider: string;
@@ -421,3 +448,4 @@ export declare abstract class BaseProvider implements AIProvider {
421
448
  */
422
449
  getTimeout(options: TextGenerationOptions | StreamOptions): number;
423
450
  }
451
+ export {};