@juspay/neurolink 6.1.0 → 6.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (283) hide show
  1. package/CHANGELOG.md +10 -6
  2. package/dist/cli/commands/config.d.ts +13 -13
  3. package/dist/cli/index.js +3 -9
  4. package/dist/core/analytics.d.ts +11 -1
  5. package/dist/core/analytics.js +2 -2
  6. package/dist/core/base-provider.js +4 -18
  7. package/dist/core/dynamic-models.d.ts +8 -8
  8. package/dist/core/factory.js +3 -11
  9. package/dist/index.d.ts +2 -4
  10. package/dist/index.js +2 -11
  11. package/dist/lib/core/analytics.d.ts +11 -1
  12. package/dist/lib/core/analytics.js +2 -2
  13. package/dist/lib/core/base-provider.js +4 -18
  14. package/dist/lib/core/dynamic-models.d.ts +8 -8
  15. package/dist/lib/core/factory.js +3 -11
  16. package/dist/lib/index.d.ts +2 -4
  17. package/dist/lib/index.js +2 -11
  18. package/dist/lib/mcp/factory.d.ts +1 -1
  19. package/dist/lib/mcp/index.d.ts +7 -19
  20. package/dist/lib/mcp/index.js +15 -56
  21. package/dist/lib/neurolink.d.ts +1 -9
  22. package/dist/lib/neurolink.js +21 -70
  23. package/dist/lib/providers/amazon-bedrock.js +5 -16
  24. package/dist/lib/providers/anthropic-baseprovider.js +3 -21
  25. package/dist/lib/providers/anthropic.js +4 -7
  26. package/dist/lib/providers/azure-openai.js +4 -2
  27. package/dist/lib/providers/google-vertex.js +5 -9
  28. package/dist/lib/providers/huggingFace.js +5 -10
  29. package/dist/lib/providers/mistral.js +5 -8
  30. package/dist/lib/providers/openAI.js +4 -7
  31. package/dist/lib/utils/providerConfig.d.ts +117 -0
  32. package/dist/lib/utils/providerConfig.js +353 -0
  33. package/dist/lib/utils/providerUtils.d.ts +2 -1
  34. package/dist/lib/utils/providerUtils.js +53 -36
  35. package/dist/lib/utils/timeout.d.ts +72 -1
  36. package/dist/lib/utils/timeout.js +203 -2
  37. package/dist/mcp/factory.d.ts +1 -1
  38. package/dist/mcp/index.d.ts +7 -19
  39. package/dist/mcp/index.js +15 -56
  40. package/dist/neurolink.d.ts +1 -9
  41. package/dist/neurolink.js +21 -70
  42. package/dist/providers/amazon-bedrock.js +5 -16
  43. package/dist/providers/anthropic-baseprovider.js +3 -21
  44. package/dist/providers/anthropic.js +4 -7
  45. package/dist/providers/azure-openai.js +4 -2
  46. package/dist/providers/google-vertex.js +5 -9
  47. package/dist/providers/huggingFace.js +5 -10
  48. package/dist/providers/mistral.js +5 -8
  49. package/dist/providers/openAI.js +4 -7
  50. package/dist/utils/providerConfig.d.ts +117 -0
  51. package/dist/utils/providerConfig.js +353 -0
  52. package/dist/utils/providerUtils.d.ts +2 -1
  53. package/dist/utils/providerUtils.js +53 -36
  54. package/dist/utils/timeout.d.ts +72 -1
  55. package/dist/utils/timeout.js +203 -2
  56. package/package.json +1 -1
  57. package/dist/chat/client-utils.d.ts +0 -95
  58. package/dist/chat/client-utils.js +0 -315
  59. package/dist/chat/index.d.ts +0 -24
  60. package/dist/chat/index.js +0 -33
  61. package/dist/chat/session-storage.d.ts +0 -77
  62. package/dist/chat/session-storage.js +0 -233
  63. package/dist/chat/session.d.ts +0 -96
  64. package/dist/chat/session.js +0 -257
  65. package/dist/chat/sse-handler.d.ts +0 -49
  66. package/dist/chat/sse-handler.js +0 -259
  67. package/dist/chat/types.d.ts +0 -74
  68. package/dist/chat/types.js +0 -5
  69. package/dist/chat/websocket-chat-handler.d.ts +0 -37
  70. package/dist/chat/websocket-chat-handler.js +0 -262
  71. package/dist/cli/commands/mcp.d.ts +0 -20
  72. package/dist/cli/commands/mcp.js +0 -1272
  73. package/dist/core/defaults.d.ts +0 -19
  74. package/dist/core/defaults.js +0 -29
  75. package/dist/core/evaluation-config.d.ts +0 -29
  76. package/dist/core/evaluation-config.js +0 -144
  77. package/dist/factories/compatibility-factory.d.ts +0 -35
  78. package/dist/factories/compatibility-factory.js +0 -71
  79. package/dist/factories/provider-generate-factory.d.ts +0 -20
  80. package/dist/factories/provider-generate-factory.js +0 -93
  81. package/dist/lib/chat/client-utils.d.ts +0 -95
  82. package/dist/lib/chat/client-utils.js +0 -315
  83. package/dist/lib/chat/index.d.ts +0 -24
  84. package/dist/lib/chat/index.js +0 -33
  85. package/dist/lib/chat/session-storage.d.ts +0 -77
  86. package/dist/lib/chat/session-storage.js +0 -233
  87. package/dist/lib/chat/session.d.ts +0 -96
  88. package/dist/lib/chat/session.js +0 -257
  89. package/dist/lib/chat/sse-handler.d.ts +0 -49
  90. package/dist/lib/chat/sse-handler.js +0 -259
  91. package/dist/lib/chat/types.d.ts +0 -74
  92. package/dist/lib/chat/types.js +0 -5
  93. package/dist/lib/chat/websocket-chat-handler.d.ts +0 -37
  94. package/dist/lib/chat/websocket-chat-handler.js +0 -262
  95. package/dist/lib/core/defaults.d.ts +0 -19
  96. package/dist/lib/core/defaults.js +0 -29
  97. package/dist/lib/core/evaluation-config.d.ts +0 -29
  98. package/dist/lib/core/evaluation-config.js +0 -144
  99. package/dist/lib/factories/compatibility-factory.d.ts +0 -35
  100. package/dist/lib/factories/compatibility-factory.js +0 -71
  101. package/dist/lib/factories/provider-generate-factory.d.ts +0 -20
  102. package/dist/lib/factories/provider-generate-factory.js +0 -93
  103. package/dist/lib/mcp/adapters/plugin-bridge.d.ts +0 -40
  104. package/dist/lib/mcp/adapters/plugin-bridge.js +0 -89
  105. package/dist/lib/mcp/auto-discovery.d.ts +0 -62
  106. package/dist/lib/mcp/auto-discovery.js +0 -149
  107. package/dist/lib/mcp/client.d.ts +0 -68
  108. package/dist/lib/mcp/client.js +0 -248
  109. package/dist/lib/mcp/config.d.ts +0 -31
  110. package/dist/lib/mcp/config.js +0 -99
  111. package/dist/lib/mcp/context-manager.d.ts +0 -171
  112. package/dist/lib/mcp/context-manager.js +0 -362
  113. package/dist/lib/mcp/contracts/mcp-contract.d.ts +0 -169
  114. package/dist/lib/mcp/contracts/mcp-contract.js +0 -58
  115. package/dist/lib/mcp/core/plugin-manager.d.ts +0 -46
  116. package/dist/lib/mcp/core/plugin-manager.js +0 -110
  117. package/dist/lib/mcp/demo/plugin-demo.d.ts +0 -20
  118. package/dist/lib/mcp/demo/plugin-demo.js +0 -118
  119. package/dist/lib/mcp/dynamic-chain-executor.d.ts +0 -225
  120. package/dist/lib/mcp/dynamic-chain-executor.js +0 -489
  121. package/dist/lib/mcp/dynamic-orchestrator.d.ts +0 -115
  122. package/dist/lib/mcp/dynamic-orchestrator.js +0 -351
  123. package/dist/lib/mcp/ecosystem.d.ts +0 -75
  124. package/dist/lib/mcp/ecosystem.js +0 -161
  125. package/dist/lib/mcp/error-manager.d.ts +0 -254
  126. package/dist/lib/mcp/error-manager.js +0 -501
  127. package/dist/lib/mcp/error-recovery.d.ts +0 -159
  128. package/dist/lib/mcp/error-recovery.js +0 -405
  129. package/dist/lib/mcp/external-client.d.ts +0 -88
  130. package/dist/lib/mcp/external-client.js +0 -331
  131. package/dist/lib/mcp/external-manager.d.ts +0 -112
  132. package/dist/lib/mcp/external-manager.js +0 -308
  133. package/dist/lib/mcp/function-calling.d.ts +0 -65
  134. package/dist/lib/mcp/function-calling.js +0 -642
  135. package/dist/lib/mcp/health-monitor.d.ts +0 -257
  136. package/dist/lib/mcp/health-monitor.js +0 -630
  137. package/dist/lib/mcp/initialize-tools.d.ts +0 -29
  138. package/dist/lib/mcp/initialize-tools.js +0 -261
  139. package/dist/lib/mcp/initialize.d.ts +0 -18
  140. package/dist/lib/mcp/initialize.js +0 -62
  141. package/dist/lib/mcp/manager.d.ts +0 -68
  142. package/dist/lib/mcp/manager.js +0 -176
  143. package/dist/lib/mcp/neurolink-mcp-client.d.ts +0 -97
  144. package/dist/lib/mcp/neurolink-mcp-client.js +0 -462
  145. package/dist/lib/mcp/orchestrator.d.ts +0 -302
  146. package/dist/lib/mcp/orchestrator.js +0 -703
  147. package/dist/lib/mcp/plugin-manager.d.ts +0 -98
  148. package/dist/lib/mcp/plugin-manager.js +0 -296
  149. package/dist/lib/mcp/plugins/core/filesystem-mcp.d.ts +0 -36
  150. package/dist/lib/mcp/plugins/core/filesystem-mcp.js +0 -142
  151. package/dist/lib/mcp/plugins/filesystem-mcp.d.ts +0 -37
  152. package/dist/lib/mcp/plugins/filesystem-mcp.js +0 -54
  153. package/dist/lib/mcp/security-manager.d.ts +0 -87
  154. package/dist/lib/mcp/security-manager.js +0 -344
  155. package/dist/lib/mcp/semaphore-manager.d.ts +0 -137
  156. package/dist/lib/mcp/semaphore-manager.js +0 -329
  157. package/dist/lib/mcp/session-manager.d.ts +0 -187
  158. package/dist/lib/mcp/session-manager.js +0 -400
  159. package/dist/lib/mcp/session-persistence.d.ts +0 -93
  160. package/dist/lib/mcp/session-persistence.js +0 -301
  161. package/dist/lib/mcp/tool-integration.d.ts +0 -58
  162. package/dist/lib/mcp/tool-integration.js +0 -203
  163. package/dist/lib/mcp/transport-manager.d.ts +0 -154
  164. package/dist/lib/mcp/transport-manager.js +0 -334
  165. package/dist/lib/mcp/unified-mcp.d.ts +0 -133
  166. package/dist/lib/mcp/unified-mcp.js +0 -251
  167. package/dist/lib/mcp/unified-registry.d.ts +0 -165
  168. package/dist/lib/mcp/unified-registry.js +0 -538
  169. package/dist/lib/providers/analytics-helper.d.ts +0 -38
  170. package/dist/lib/providers/analytics-helper.js +0 -216
  171. package/dist/lib/providers/function-calling-provider.d.ts +0 -142
  172. package/dist/lib/providers/function-calling-provider.js +0 -630
  173. package/dist/lib/providers/mcp-provider.d.ts +0 -75
  174. package/dist/lib/providers/mcp-provider.js +0 -283
  175. package/dist/lib/providers/timeout-wrapper.d.ts +0 -40
  176. package/dist/lib/providers/timeout-wrapper.js +0 -100
  177. package/dist/lib/sdk/tool-extension.d.ts +0 -181
  178. package/dist/lib/sdk/tool-extension.js +0 -284
  179. package/dist/lib/services/streaming/streaming-manager.d.ts +0 -29
  180. package/dist/lib/services/streaming/streaming-manager.js +0 -245
  181. package/dist/lib/services/types.d.ts +0 -156
  182. package/dist/lib/services/types.js +0 -2
  183. package/dist/lib/services/websocket/websocket-server.d.ts +0 -34
  184. package/dist/lib/services/websocket/websocket-server.js +0 -305
  185. package/dist/lib/utils/provider-validation.d.ts +0 -36
  186. package/dist/lib/utils/provider-validation.js +0 -625
  187. package/dist/lib/utils/providerUtils-fixed.d.ts +0 -8
  188. package/dist/lib/utils/providerUtils-fixed.js +0 -94
  189. package/dist/lib/utils/streaming-utils.d.ts +0 -79
  190. package/dist/lib/utils/streaming-utils.js +0 -198
  191. package/dist/lib/utils/timeout-manager.d.ts +0 -75
  192. package/dist/lib/utils/timeout-manager.js +0 -244
  193. package/dist/mcp/adapters/plugin-bridge.d.ts +0 -40
  194. package/dist/mcp/adapters/plugin-bridge.js +0 -89
  195. package/dist/mcp/auto-discovery.d.ts +0 -62
  196. package/dist/mcp/auto-discovery.js +0 -149
  197. package/dist/mcp/client.d.ts +0 -68
  198. package/dist/mcp/client.js +0 -248
  199. package/dist/mcp/config.d.ts +0 -31
  200. package/dist/mcp/config.js +0 -99
  201. package/dist/mcp/context-manager.d.ts +0 -171
  202. package/dist/mcp/context-manager.js +0 -362
  203. package/dist/mcp/contracts/mcp-contract.d.ts +0 -169
  204. package/dist/mcp/contracts/mcp-contract.js +0 -58
  205. package/dist/mcp/core/plugin-manager.d.ts +0 -46
  206. package/dist/mcp/core/plugin-manager.js +0 -110
  207. package/dist/mcp/demo/plugin-demo.d.ts +0 -20
  208. package/dist/mcp/demo/plugin-demo.js +0 -118
  209. package/dist/mcp/dynamic-chain-executor.d.ts +0 -225
  210. package/dist/mcp/dynamic-chain-executor.js +0 -489
  211. package/dist/mcp/dynamic-orchestrator.d.ts +0 -115
  212. package/dist/mcp/dynamic-orchestrator.js +0 -351
  213. package/dist/mcp/ecosystem.d.ts +0 -75
  214. package/dist/mcp/ecosystem.js +0 -162
  215. package/dist/mcp/error-manager.d.ts +0 -254
  216. package/dist/mcp/error-manager.js +0 -501
  217. package/dist/mcp/error-recovery.d.ts +0 -159
  218. package/dist/mcp/error-recovery.js +0 -405
  219. package/dist/mcp/external-client.d.ts +0 -88
  220. package/dist/mcp/external-client.js +0 -331
  221. package/dist/mcp/external-manager.d.ts +0 -112
  222. package/dist/mcp/external-manager.js +0 -308
  223. package/dist/mcp/function-calling.d.ts +0 -65
  224. package/dist/mcp/function-calling.js +0 -642
  225. package/dist/mcp/health-monitor.d.ts +0 -257
  226. package/dist/mcp/health-monitor.js +0 -630
  227. package/dist/mcp/initialize-tools.d.ts +0 -29
  228. package/dist/mcp/initialize-tools.js +0 -262
  229. package/dist/mcp/initialize.d.ts +0 -18
  230. package/dist/mcp/initialize.js +0 -62
  231. package/dist/mcp/manager.d.ts +0 -68
  232. package/dist/mcp/manager.js +0 -176
  233. package/dist/mcp/neurolink-mcp-client.d.ts +0 -97
  234. package/dist/mcp/neurolink-mcp-client.js +0 -462
  235. package/dist/mcp/orchestrator.d.ts +0 -302
  236. package/dist/mcp/orchestrator.js +0 -703
  237. package/dist/mcp/plugin-manager.d.ts +0 -98
  238. package/dist/mcp/plugin-manager.js +0 -297
  239. package/dist/mcp/plugins/core/filesystem-mcp.d.ts +0 -36
  240. package/dist/mcp/plugins/core/filesystem-mcp.js +0 -142
  241. package/dist/mcp/plugins/core/neurolink-mcp.json +0 -17
  242. package/dist/mcp/plugins/filesystem-mcp.d.ts +0 -37
  243. package/dist/mcp/plugins/filesystem-mcp.js +0 -54
  244. package/dist/mcp/security-manager.d.ts +0 -87
  245. package/dist/mcp/security-manager.js +0 -344
  246. package/dist/mcp/semaphore-manager.d.ts +0 -137
  247. package/dist/mcp/semaphore-manager.js +0 -329
  248. package/dist/mcp/session-manager.d.ts +0 -187
  249. package/dist/mcp/session-manager.js +0 -400
  250. package/dist/mcp/session-persistence.d.ts +0 -93
  251. package/dist/mcp/session-persistence.js +0 -302
  252. package/dist/mcp/tool-integration.d.ts +0 -58
  253. package/dist/mcp/tool-integration.js +0 -203
  254. package/dist/mcp/transport-manager.d.ts +0 -154
  255. package/dist/mcp/transport-manager.js +0 -335
  256. package/dist/mcp/unified-mcp.d.ts +0 -133
  257. package/dist/mcp/unified-mcp.js +0 -251
  258. package/dist/mcp/unified-registry.d.ts +0 -165
  259. package/dist/mcp/unified-registry.js +0 -539
  260. package/dist/providers/analytics-helper.d.ts +0 -38
  261. package/dist/providers/analytics-helper.js +0 -216
  262. package/dist/providers/function-calling-provider.d.ts +0 -142
  263. package/dist/providers/function-calling-provider.js +0 -630
  264. package/dist/providers/mcp-provider.d.ts +0 -75
  265. package/dist/providers/mcp-provider.js +0 -283
  266. package/dist/providers/timeout-wrapper.d.ts +0 -40
  267. package/dist/providers/timeout-wrapper.js +0 -100
  268. package/dist/sdk/tool-extension.d.ts +0 -181
  269. package/dist/sdk/tool-extension.js +0 -284
  270. package/dist/services/streaming/streaming-manager.d.ts +0 -29
  271. package/dist/services/streaming/streaming-manager.js +0 -245
  272. package/dist/services/types.d.ts +0 -156
  273. package/dist/services/types.js +0 -2
  274. package/dist/services/websocket/websocket-server.d.ts +0 -34
  275. package/dist/services/websocket/websocket-server.js +0 -306
  276. package/dist/utils/provider-validation.d.ts +0 -36
  277. package/dist/utils/provider-validation.js +0 -625
  278. package/dist/utils/providerUtils-fixed.d.ts +0 -8
  279. package/dist/utils/providerUtils-fixed.js +0 -94
  280. package/dist/utils/streaming-utils.d.ts +0 -79
  281. package/dist/utils/streaming-utils.js +0 -198
  282. package/dist/utils/timeout-manager.d.ts +0 -75
  283. package/dist/utils/timeout-manager.js +0 -244
@@ -1,501 +0,0 @@
1
- /**
2
- * NeuroLink MCP Enhanced Error Handling System
3
- * Provides comprehensive error tracking, categorization, and debugging capabilities
4
- * Based on error accumulation patterns from Cline
5
- */
6
- import { ErrorRecovery, defaultErrorRecovery, } from "./error-recovery.js";
7
- /**
8
- * Error categories for classification
9
- */
10
- export var ErrorCategory;
11
- (function (ErrorCategory) {
12
- ErrorCategory["TOOL_ERROR"] = "TOOL_ERROR";
13
- ErrorCategory["NETWORK_ERROR"] = "NETWORK_ERROR";
14
- ErrorCategory["VALIDATION_ERROR"] = "VALIDATION_ERROR";
15
- ErrorCategory["TIMEOUT_ERROR"] = "TIMEOUT_ERROR";
16
- ErrorCategory["PERMISSION_ERROR"] = "PERMISSION_ERROR";
17
- ErrorCategory["CONFIGURATION_ERROR"] = "CONFIGURATION_ERROR";
18
- ErrorCategory["CONNECTION_ERROR"] = "CONNECTION_ERROR";
19
- ErrorCategory["UNKNOWN_ERROR"] = "UNKNOWN_ERROR";
20
- })(ErrorCategory || (ErrorCategory = {}));
21
- /**
22
- * Error severity levels
23
- */
24
- export var ErrorSeverity;
25
- (function (ErrorSeverity) {
26
- ErrorSeverity["LOW"] = "LOW";
27
- ErrorSeverity["MEDIUM"] = "MEDIUM";
28
- ErrorSeverity["HIGH"] = "HIGH";
29
- ErrorSeverity["CRITICAL"] = "CRITICAL";
30
- })(ErrorSeverity || (ErrorSeverity = {}));
31
- /**
32
- * Enhanced Error Manager with accumulation and analysis capabilities
33
- */
34
- export class ErrorManager {
35
- errorHistory = [];
36
- maxHistorySize;
37
- enableStackTrace;
38
- autoRecovery;
39
- errorRateWindow;
40
- errorCounter = 0;
41
- errorFrequency = new Map();
42
- categoryCounts;
43
- severityCounts;
44
- errorRecovery;
45
- constructor(options = {}) {
46
- this.maxHistorySize = options.maxHistorySize || 1000;
47
- this.enableStackTrace = options.enableStackTrace ?? true;
48
- this.autoRecovery = options.autoRecovery ?? false;
49
- this.errorRateWindow = options.errorRateWindow || 60000; // 1 minute default
50
- // Initialize counters
51
- this.categoryCounts = Object.values(ErrorCategory).reduce((acc, category) => ({ ...acc, [category]: 0 }), {});
52
- this.severityCounts = Object.values(ErrorSeverity).reduce((acc, severity) => ({ ...acc, [severity]: 0 }), {});
53
- // Initialize error recovery system
54
- this.errorRecovery = defaultErrorRecovery;
55
- }
56
- /**
57
- * Record an error with context
58
- *
59
- * @param error The error to record
60
- * @param context Additional context about the error
61
- * @returns The created error entry
62
- */
63
- async recordError(error, context = {}) {
64
- // Ensure we have an Error object
65
- let errorObj;
66
- if (error instanceof Error) {
67
- errorObj = error;
68
- }
69
- else if (error && typeof error === "object" && "message" in error) {
70
- // Handle objects with message property
71
- errorObj = new Error(String(error.message));
72
- }
73
- else if (error === null || error === undefined) {
74
- errorObj = new Error("Unknown error");
75
- }
76
- else {
77
- // Convert other types to string
78
- errorObj = new Error(String(error));
79
- }
80
- // Determine category and severity
81
- const category = context.category || this.categorizeError(errorObj);
82
- const severity = context.severity || this.determineSeverity(errorObj, category);
83
- // Create error entry
84
- const entry = {
85
- id: this.generateErrorId(),
86
- timestamp: Date.now(),
87
- category,
88
- severity,
89
- error: errorObj,
90
- context: {
91
- sessionId: context.sessionId,
92
- toolName: context.toolName,
93
- parameters: context.parameters,
94
- executionContext: context.executionContext,
95
- },
96
- };
97
- // Add stack trace if enabled
98
- if (this.enableStackTrace && errorObj.stack) {
99
- entry.stackTrace = errorObj.stack;
100
- }
101
- // Attempt recovery if enabled
102
- if (this.autoRecovery) {
103
- entry.recovery = await this.attemptRecovery(entry);
104
- }
105
- // Add to history (circular buffer)
106
- this.addToHistory(entry);
107
- // Update statistics
108
- this.updateStatistics(entry);
109
- // Log if debug mode
110
- if (process.env.NEUROLINK_DEBUG === "true") {
111
- console.error(`[ErrorManager] ${category} - ${severity}: ${errorObj.message}`, context);
112
- }
113
- return entry;
114
- }
115
- /**
116
- * Get error history
117
- *
118
- * @param filter Optional filter criteria
119
- * @returns Filtered error history
120
- */
121
- getErrorHistory(filter) {
122
- let filtered = [...this.errorHistory];
123
- if (filter) {
124
- if (filter.category) {
125
- filtered = filtered.filter((e) => e.category === filter.category);
126
- }
127
- if (filter.severity) {
128
- filtered = filtered.filter((e) => e.severity === filter.severity);
129
- }
130
- if (filter.sessionId) {
131
- filtered = filtered.filter((e) => e.context.sessionId === filter.sessionId);
132
- }
133
- if (filter.toolName) {
134
- filtered = filtered.filter((e) => e.context.toolName === filter.toolName);
135
- }
136
- if (filter.since) {
137
- filtered = filtered.filter((e) => e.timestamp >= filter.since);
138
- }
139
- if (filter.limit) {
140
- filtered = filtered.slice(-filter.limit);
141
- }
142
- }
143
- return filtered;
144
- }
145
- /**
146
- * Get error statistics
147
- *
148
- * @returns Current error statistics
149
- */
150
- getStats() {
151
- const recentErrors = this.getErrorHistory({
152
- since: Date.now() - this.errorRateWindow,
153
- });
154
- const errorRate = (recentErrors.length / this.errorRateWindow) * 60000; // Per minute
155
- // Find most frequent error
156
- let mostFrequentError;
157
- if (this.errorFrequency.size > 0) {
158
- const [message, count] = Array.from(this.errorFrequency.entries()).sort((a, b) => b[1] - a[1])[0];
159
- const category = this.errorHistory.find((e) => e.error.message === message)?.category ||
160
- ErrorCategory.UNKNOWN_ERROR;
161
- mostFrequentError = { message, count, category };
162
- }
163
- return {
164
- totalErrors: this.errorCounter,
165
- errorsByCategory: { ...this.categoryCounts },
166
- errorsBySeverity: { ...this.severityCounts },
167
- errorRate,
168
- lastError: this.errorHistory[this.errorHistory.length - 1],
169
- mostFrequentError,
170
- };
171
- }
172
- /**
173
- * Clear error history
174
- */
175
- clearHistory() {
176
- this.errorHistory = [];
177
- this.errorFrequency.clear();
178
- if (process.env.NEUROLINK_DEBUG === "true") {
179
- console.log("[ErrorManager] Error history cleared");
180
- }
181
- }
182
- /**
183
- * Get recovery suggestions for an error
184
- *
185
- * @param error The error entry
186
- * @returns Recovery suggestion
187
- */
188
- getRecoverySuggestion(error) {
189
- switch (error.category) {
190
- case ErrorCategory.NETWORK_ERROR:
191
- return "Check network connectivity and retry the operation";
192
- case ErrorCategory.TIMEOUT_ERROR:
193
- return "Increase timeout settings or optimize the operation";
194
- case ErrorCategory.PERMISSION_ERROR:
195
- return "Verify API keys and access permissions";
196
- case ErrorCategory.VALIDATION_ERROR:
197
- return "Check input parameters and data formats";
198
- case ErrorCategory.CONFIGURATION_ERROR:
199
- return "Review configuration settings and environment variables";
200
- case ErrorCategory.TOOL_ERROR:
201
- return "Check tool availability and dependencies";
202
- default:
203
- return "Review error details and contact support if issue persists";
204
- }
205
- }
206
- /**
207
- * Categorize error based on message and type
208
- *
209
- * @private
210
- */
211
- categorizeError(error) {
212
- const message = error.message.toLowerCase();
213
- const name = error.name?.toLowerCase() || "";
214
- if (message.includes("network") ||
215
- message.includes("fetch") ||
216
- message.includes("connection") ||
217
- name.includes("network")) {
218
- return ErrorCategory.NETWORK_ERROR;
219
- }
220
- if (message.includes("timeout") ||
221
- message.includes("timed out") ||
222
- name.includes("timeout")) {
223
- return ErrorCategory.TIMEOUT_ERROR;
224
- }
225
- if (message.includes("permission") ||
226
- message.includes("unauthorized") ||
227
- message.includes("forbidden") ||
228
- message.includes("401") ||
229
- message.includes("403")) {
230
- return ErrorCategory.PERMISSION_ERROR;
231
- }
232
- if (message.includes("validation") ||
233
- message.includes("invalid") ||
234
- message.includes("required") ||
235
- name.includes("validation")) {
236
- return ErrorCategory.VALIDATION_ERROR;
237
- }
238
- if (message.includes("config") ||
239
- message.includes("configuration") ||
240
- message.includes("environment")) {
241
- return ErrorCategory.CONFIGURATION_ERROR;
242
- }
243
- if (message.includes("tool") || message.includes("execution")) {
244
- return ErrorCategory.TOOL_ERROR;
245
- }
246
- return ErrorCategory.UNKNOWN_ERROR;
247
- }
248
- /**
249
- * Determine error severity
250
- *
251
- * @private
252
- */
253
- determineSeverity(error, category) {
254
- // Critical errors
255
- if (category === ErrorCategory.PERMISSION_ERROR ||
256
- category === ErrorCategory.CONFIGURATION_ERROR) {
257
- return ErrorSeverity.CRITICAL;
258
- }
259
- // High severity
260
- if (category === ErrorCategory.NETWORK_ERROR ||
261
- error.message.includes("fatal") ||
262
- error.message.includes("critical")) {
263
- return ErrorSeverity.HIGH;
264
- }
265
- // Medium severity
266
- if (category === ErrorCategory.TIMEOUT_ERROR ||
267
- category === ErrorCategory.TOOL_ERROR) {
268
- return ErrorSeverity.MEDIUM;
269
- }
270
- // Low severity
271
- return ErrorSeverity.LOW;
272
- }
273
- /**
274
- * Add error to circular buffer
275
- *
276
- * @private
277
- */
278
- addToHistory(entry) {
279
- this.errorHistory.push(entry);
280
- // Maintain circular buffer size
281
- if (this.errorHistory.length > this.maxHistorySize) {
282
- this.errorHistory.shift();
283
- }
284
- }
285
- /**
286
- * Update error statistics
287
- *
288
- * @private
289
- */
290
- updateStatistics(entry) {
291
- this.errorCounter++;
292
- this.categoryCounts[entry.category]++;
293
- this.severityCounts[entry.severity]++;
294
- // Update frequency map
295
- const message = entry.error.message;
296
- this.errorFrequency.set(message, (this.errorFrequency.get(message) || 0) + 1);
297
- }
298
- /**
299
- * Attempt automatic recovery
300
- *
301
- * @private
302
- */
303
- async attemptRecovery(entry) {
304
- // Use the enhanced error recovery system
305
- const recoveryResult = await this.errorRecovery.attemptRecovery(entry, entry.context.executionContext);
306
- return {
307
- attempted: true,
308
- successful: recoveryResult.success,
309
- recovered: recoveryResult.recovered,
310
- fallbackUsed: recoveryResult.fallbackUsed,
311
- nextAction: recoveryResult.nextAction,
312
- delay: recoveryResult.delay,
313
- suggestion: recoveryResult.message || this.getRecoverySuggestion(entry),
314
- };
315
- }
316
- /**
317
- * Generate unique error ID
318
- *
319
- * @private
320
- */
321
- generateErrorId() {
322
- return `err-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;
323
- }
324
- /**
325
- * Detect error patterns in recent history
326
- *
327
- * @param timeWindow Time window to analyze (ms)
328
- * @returns Detected patterns with counts and severity
329
- */
330
- detectPatterns(timeWindow = 300000) {
331
- const now = Date.now();
332
- const recentErrors = this.errorHistory.filter((e) => now - e.timestamp <= timeWindow);
333
- // Detect patterns
334
- const patterns = this.errorRecovery.detectPatterns(recentErrors);
335
- const patternResults = patterns.map((pattern) => {
336
- const matchingErrors = recentErrors.filter((e) => pattern.matcher([e]));
337
- return {
338
- pattern: pattern.name,
339
- count: matchingErrors.length,
340
- errors: matchingErrors,
341
- severity: pattern.severity,
342
- recommendation: pattern.description,
343
- };
344
- });
345
- // Detect correlations
346
- const correlations = this.detectCorrelations(recentErrors);
347
- return { patterns: patternResults, correlations };
348
- }
349
- /**
350
- * Detect correlations between errors
351
- *
352
- * @private
353
- */
354
- detectCorrelations(errors) {
355
- const correlations = [];
356
- // Group errors by message
357
- const errorGroups = new Map();
358
- for (const error of errors) {
359
- const key = error.error.message;
360
- if (!errorGroups.has(key)) {
361
- errorGroups.set(key, []);
362
- }
363
- errorGroups.get(key).push(error);
364
- }
365
- // Find correlations based on temporal proximity
366
- const keys = Array.from(errorGroups.keys());
367
- for (let i = 0; i < keys.length; i++) {
368
- for (let j = i + 1; j < keys.length; j++) {
369
- const errors1 = errorGroups.get(keys[i]);
370
- const errors2 = errorGroups.get(keys[j]);
371
- // Calculate correlation based on time proximity
372
- let proximityCount = 0;
373
- for (const e1 of errors1) {
374
- for (const e2 of errors2) {
375
- const timeDiff = Math.abs(e1.timestamp - e2.timestamp);
376
- if (timeDiff < 60000) {
377
- // Within 1 minute
378
- proximityCount++;
379
- }
380
- }
381
- }
382
- const correlation = proximityCount / Math.max(errors1.length, errors2.length);
383
- if (correlation > 0.5) {
384
- correlations.push({
385
- error1: keys[i],
386
- error2: keys[j],
387
- correlation,
388
- });
389
- }
390
- }
391
- }
392
- return correlations;
393
- }
394
- /**
395
- * Get error trends over time
396
- *
397
- * @param bucketSize Time bucket size in ms (default: 1 minute)
398
- * @param timeWindow Total time window to analyze
399
- * @returns Error counts per time bucket
400
- */
401
- getErrorTrends(bucketSize = 60000, timeWindow = 3600000) {
402
- const now = Date.now();
403
- const startTime = now - timeWindow;
404
- const buckets = [];
405
- // Initialize buckets
406
- for (let time = startTime; time < now; time += bucketSize) {
407
- buckets.push({
408
- timestamp: time,
409
- count: 0,
410
- categories: Object.values(ErrorCategory).reduce((acc, cat) => ({ ...acc, [cat]: 0 }), {}),
411
- });
412
- }
413
- // Fill buckets with error counts
414
- for (const error of this.errorHistory) {
415
- if (error.timestamp >= startTime && error.timestamp < now) {
416
- const bucketIndex = Math.floor((error.timestamp - startTime) / bucketSize);
417
- if (bucketIndex >= 0 && bucketIndex < buckets.length) {
418
- buckets[bucketIndex].count++;
419
- buckets[bucketIndex].categories[error.category]++;
420
- }
421
- }
422
- }
423
- return buckets;
424
- }
425
- /**
426
- * Get recovery statistics
427
- *
428
- * @returns Recovery statistics from error recovery system
429
- */
430
- getRecoveryStats() {
431
- return this.errorRecovery.getRecoveryStats();
432
- }
433
- /**
434
- * Reset circuit breaker for specific resource
435
- *
436
- * @param resourceId Resource identifier (usually tool name)
437
- */
438
- resetCircuitBreaker(resourceId) {
439
- this.errorRecovery.resetCircuitBreaker(resourceId);
440
- }
441
- /**
442
- * Get error insights and recommendations
443
- *
444
- * @returns Insights based on error analysis
445
- */
446
- getInsights() {
447
- const stats = this.getStats();
448
- const patterns = this.detectPatterns();
449
- const recoveryStats = this.getRecoveryStats();
450
- const criticalIssues = [];
451
- const recommendations = [];
452
- // Check error rate
453
- if (stats.errorRate > 10) {
454
- criticalIssues.push(`High error rate: ${stats.errorRate.toFixed(1)} errors/minute`);
455
- recommendations.push("Consider implementing rate limiting or increasing resources");
456
- }
457
- // Check critical errors
458
- const criticalCount = stats.errorsBySeverity[ErrorSeverity.CRITICAL] || 0;
459
- if (criticalCount > 0) {
460
- criticalIssues.push(`${criticalCount} critical errors detected`);
461
- recommendations.push("Review and address critical errors immediately");
462
- }
463
- // Check circuit breakers
464
- const openBreakers = Object.entries(recoveryStats.circuitBreakerStates).filter(([_, state]) => state === "OPEN");
465
- if (openBreakers.length > 0) {
466
- criticalIssues.push(`${openBreakers.length} circuit breakers are OPEN`);
467
- recommendations.push(`Services unavailable: ${openBreakers.map(([id]) => id).join(", ")}`);
468
- }
469
- // Check patterns
470
- for (const pattern of patterns.patterns) {
471
- if (pattern.count > 5 && pattern.severity === ErrorSeverity.HIGH) {
472
- recommendations.push(pattern.recommendation);
473
- }
474
- }
475
- // Calculate health score (0-100)
476
- let healthScore = 100;
477
- healthScore -= Math.min(stats.errorRate * 2, 30); // Up to -30 for error rate
478
- healthScore -= criticalCount * 10; // -10 per critical error
479
- healthScore -= openBreakers.length * 15; // -15 per open circuit breaker
480
- healthScore = Math.max(0, healthScore);
481
- return {
482
- criticalIssues,
483
- recommendations: [...new Set(recommendations)], // Remove duplicates
484
- healthScore,
485
- };
486
- }
487
- }
488
- /**
489
- * Default error manager instance
490
- */
491
- export const defaultErrorManager = new ErrorManager();
492
- /**
493
- * Utility function to record error with default manager
494
- *
495
- * @param error Error to record
496
- * @param context Error context
497
- * @returns Error entry
498
- */
499
- export async function recordError(error, context) {
500
- return defaultErrorManager.recordError(error, context);
501
- }
@@ -1,159 +0,0 @@
1
- /**
2
- * NeuroLink Error Recovery System
3
- * Implements circuit breaker, retry strategies, and pattern detection
4
- * Based on resilience patterns from reference implementations
5
- */
6
- import type { ErrorEntry, ErrorSeverity } from "./error-manager.js";
7
- import type { NeuroLinkExecutionContext } from "./factory.js";
8
- import type { UnknownRecord } from "../types/common.js";
9
- /**
10
- * Circuit breaker states
11
- */
12
- export declare enum CircuitState {
13
- CLOSED = "CLOSED",// Normal operation
14
- OPEN = "OPEN",// Failing, reject requests
15
- HALF_OPEN = "HALF_OPEN"
16
- }
17
- /**
18
- * Retry strategy configuration
19
- */
20
- export interface RetryConfig extends UnknownRecord {
21
- maxAttempts: number;
22
- initialDelay: number;
23
- maxDelay: number;
24
- backoffMultiplier: number;
25
- jitter: boolean;
26
- }
27
- /**
28
- * Circuit breaker configuration
29
- */
30
- export interface CircuitBreakerConfig extends UnknownRecord {
31
- failureThreshold: number;
32
- resetTimeout: number;
33
- successThreshold: number;
34
- monitoringPeriod: number;
35
- }
36
- /**
37
- * Error pattern for detection
38
- */
39
- export interface ErrorPattern {
40
- id: string;
41
- name: string;
42
- description: string;
43
- matcher: (errors: ErrorEntry[]) => boolean;
44
- severity: ErrorSeverity;
45
- recoveryStrategy: RecoveryStrategy;
46
- }
47
- /**
48
- * Recovery strategy
49
- */
50
- export interface RecoveryStrategy {
51
- type: "retry" | "circuit-breaker" | "fallback" | "manual";
52
- config?: UnknownRecord;
53
- action?: (context: RecoveryContext) => Promise<RecoveryResult>;
54
- }
55
- /**
56
- * Recovery context
57
- */
58
- export interface RecoveryContext {
59
- error: ErrorEntry;
60
- pattern?: ErrorPattern;
61
- attemptNumber: number;
62
- totalAttempts: number;
63
- previousAttempts: RecoveryAttempt[];
64
- executionContext?: NeuroLinkExecutionContext;
65
- }
66
- /**
67
- * Recovery attempt record
68
- */
69
- export interface RecoveryAttempt {
70
- timestamp: number;
71
- strategy: string;
72
- successful: boolean;
73
- duration: number;
74
- error?: Error;
75
- }
76
- /**
77
- * Recovery result
78
- */
79
- export interface RecoveryResult {
80
- success: boolean;
81
- recovered?: boolean;
82
- fallbackUsed?: boolean;
83
- nextAction?: "retry" | "fail" | "fallback";
84
- delay?: number;
85
- message?: string;
86
- }
87
- /**
88
- * Error Recovery Manager
89
- */
90
- export declare class ErrorRecovery {
91
- private circuitBreakers;
92
- private errorPatterns;
93
- private recoveryHistory;
94
- private defaultRetryConfig;
95
- private defaultCircuitConfig;
96
- constructor();
97
- /**
98
- * Initialize default error patterns
99
- */
100
- private initializeDefaultPatterns;
101
- /**
102
- * Add error pattern
103
- */
104
- addPattern(pattern: ErrorPattern): void;
105
- /**
106
- * Detect patterns in error history
107
- */
108
- detectPatterns(errors: ErrorEntry[]): ErrorPattern[];
109
- /**
110
- * Get circuit breaker for resource
111
- */
112
- private getCircuitBreaker;
113
- /**
114
- * Calculate retry delay with exponential backoff
115
- */
116
- private calculateRetryDelay;
117
- /**
118
- * Attempt recovery for an error
119
- */
120
- attemptRecovery(error: ErrorEntry, context?: NeuroLinkExecutionContext): Promise<RecoveryResult>;
121
- /**
122
- * Execute retry strategy
123
- */
124
- private executeRetryStrategy;
125
- /**
126
- * Execute circuit breaker strategy
127
- */
128
- private executeCircuitBreakerStrategy;
129
- /**
130
- * Execute fallback strategy
131
- */
132
- private executeFallbackStrategy;
133
- /**
134
- * Get default recovery strategy based on error
135
- */
136
- private getDefaultStrategy;
137
- /**
138
- * Get recovery statistics
139
- */
140
- getRecoveryStats(): {
141
- totalAttempts: number;
142
- successfulRecoveries: number;
143
- failedRecoveries: number;
144
- circuitBreakerStates: Record<string, CircuitState>;
145
- patternMatches: Record<string, number>;
146
- };
147
- /**
148
- * Reset circuit breaker
149
- */
150
- resetCircuitBreaker(resourceId: string): void;
151
- /**
152
- * Clear recovery history
153
- */
154
- clearHistory(): void;
155
- }
156
- /**
157
- * Default error recovery instance
158
- */
159
- export declare const defaultErrorRecovery: ErrorRecovery;