@juspay/neurolink 6.1.0 → 6.2.1
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.
- package/CHANGELOG.md +16 -6
- package/dist/agent/direct-tools.js +6 -5
- package/dist/cli/commands/config.d.ts +13 -13
- package/dist/cli/index.js +3 -9
- package/dist/config/configManager.js +11 -10
- package/dist/core/analytics.d.ts +11 -1
- package/dist/core/analytics.js +2 -2
- package/dist/core/base-provider.js +4 -18
- package/dist/core/dynamic-models.d.ts +8 -8
- package/dist/core/factory.js +3 -11
- package/dist/index.d.ts +2 -4
- package/dist/index.js +2 -11
- package/dist/lib/agent/direct-tools.js +6 -5
- package/dist/lib/config/configManager.js +11 -10
- package/dist/lib/core/analytics.d.ts +11 -1
- package/dist/lib/core/analytics.js +2 -2
- package/dist/lib/core/base-provider.js +4 -18
- package/dist/lib/core/dynamic-models.d.ts +8 -8
- package/dist/lib/core/factory.js +3 -11
- package/dist/lib/index.d.ts +2 -4
- package/dist/lib/index.js +2 -11
- package/dist/lib/mcp/factory.d.ts +1 -1
- package/dist/lib/mcp/index.d.ts +9 -21
- package/dist/lib/mcp/index.js +16 -57
- package/dist/lib/mcp/registry.js +1 -1
- package/dist/lib/mcp/servers/ai-providers/ai-analysis-tools.js +2 -1
- package/dist/lib/mcp/tool-registry.js +1 -1
- package/dist/lib/neurolink.d.ts +1 -9
- package/dist/lib/neurolink.js +22 -71
- package/dist/lib/providers/amazon-bedrock.js +5 -16
- package/dist/lib/providers/anthropic-baseprovider.js +3 -21
- package/dist/lib/providers/anthropic.js +4 -7
- package/dist/lib/providers/azure-openai.js +6 -3
- package/dist/lib/providers/google-vertex.js +5 -9
- package/dist/lib/providers/huggingFace.js +5 -10
- package/dist/lib/providers/mistral.js +5 -8
- package/dist/lib/providers/openAI.js +4 -7
- package/dist/lib/telemetry/index.js +2 -1
- package/dist/lib/utils/logger.d.ts +62 -2
- package/dist/lib/utils/logger.js +174 -9
- package/dist/lib/utils/providerConfig.d.ts +117 -0
- package/dist/lib/utils/providerConfig.js +353 -0
- package/dist/lib/utils/providerUtils.d.ts +2 -1
- package/dist/lib/utils/providerUtils.js +53 -36
- package/dist/lib/utils/timeout.d.ts +72 -1
- package/dist/lib/utils/timeout.js +203 -2
- package/dist/mcp/factory.d.ts +1 -1
- package/dist/mcp/index.d.ts +9 -21
- package/dist/mcp/index.js +16 -57
- package/dist/mcp/registry.js +1 -1
- package/dist/mcp/servers/ai-providers/ai-analysis-tools.js +2 -1
- package/dist/mcp/tool-registry.js +1 -1
- package/dist/neurolink.d.ts +1 -9
- package/dist/neurolink.js +22 -71
- package/dist/providers/amazon-bedrock.js +5 -16
- package/dist/providers/anthropic-baseprovider.js +3 -21
- package/dist/providers/anthropic.js +4 -7
- package/dist/providers/azure-openai.js +6 -3
- package/dist/providers/google-vertex.js +5 -9
- package/dist/providers/huggingFace.js +5 -10
- package/dist/providers/mistral.js +5 -8
- package/dist/providers/openAI.js +4 -7
- package/dist/telemetry/index.js +2 -1
- package/dist/utils/logger.d.ts +62 -2
- package/dist/utils/logger.js +174 -9
- package/dist/utils/providerConfig.d.ts +117 -0
- package/dist/utils/providerConfig.js +353 -0
- package/dist/utils/providerUtils.d.ts +2 -1
- package/dist/utils/providerUtils.js +53 -36
- package/dist/utils/timeout.d.ts +72 -1
- package/dist/utils/timeout.js +203 -2
- package/package.json +1 -1
- package/dist/chat/client-utils.d.ts +0 -95
- package/dist/chat/client-utils.js +0 -315
- package/dist/chat/index.d.ts +0 -24
- package/dist/chat/index.js +0 -33
- package/dist/chat/session-storage.d.ts +0 -77
- package/dist/chat/session-storage.js +0 -233
- package/dist/chat/session.d.ts +0 -96
- package/dist/chat/session.js +0 -257
- package/dist/chat/sse-handler.d.ts +0 -49
- package/dist/chat/sse-handler.js +0 -259
- package/dist/chat/types.d.ts +0 -74
- package/dist/chat/types.js +0 -5
- package/dist/chat/websocket-chat-handler.d.ts +0 -37
- package/dist/chat/websocket-chat-handler.js +0 -262
- package/dist/cli/commands/mcp.d.ts +0 -20
- package/dist/cli/commands/mcp.js +0 -1272
- package/dist/core/defaults.d.ts +0 -19
- package/dist/core/defaults.js +0 -29
- package/dist/core/evaluation-config.d.ts +0 -29
- package/dist/core/evaluation-config.js +0 -144
- package/dist/factories/compatibility-factory.d.ts +0 -35
- package/dist/factories/compatibility-factory.js +0 -71
- package/dist/factories/provider-generate-factory.d.ts +0 -20
- package/dist/factories/provider-generate-factory.js +0 -93
- package/dist/lib/chat/client-utils.d.ts +0 -95
- package/dist/lib/chat/client-utils.js +0 -315
- package/dist/lib/chat/index.d.ts +0 -24
- package/dist/lib/chat/index.js +0 -33
- package/dist/lib/chat/session-storage.d.ts +0 -77
- package/dist/lib/chat/session-storage.js +0 -233
- package/dist/lib/chat/session.d.ts +0 -96
- package/dist/lib/chat/session.js +0 -257
- package/dist/lib/chat/sse-handler.d.ts +0 -49
- package/dist/lib/chat/sse-handler.js +0 -259
- package/dist/lib/chat/types.d.ts +0 -74
- package/dist/lib/chat/types.js +0 -5
- package/dist/lib/chat/websocket-chat-handler.d.ts +0 -37
- package/dist/lib/chat/websocket-chat-handler.js +0 -262
- package/dist/lib/core/defaults.d.ts +0 -19
- package/dist/lib/core/defaults.js +0 -29
- package/dist/lib/core/evaluation-config.d.ts +0 -29
- package/dist/lib/core/evaluation-config.js +0 -144
- package/dist/lib/factories/compatibility-factory.d.ts +0 -35
- package/dist/lib/factories/compatibility-factory.js +0 -71
- package/dist/lib/factories/provider-generate-factory.d.ts +0 -20
- package/dist/lib/factories/provider-generate-factory.js +0 -93
- package/dist/lib/mcp/adapters/plugin-bridge.d.ts +0 -40
- package/dist/lib/mcp/adapters/plugin-bridge.js +0 -89
- package/dist/lib/mcp/auto-discovery.d.ts +0 -62
- package/dist/lib/mcp/auto-discovery.js +0 -149
- package/dist/lib/mcp/client.d.ts +0 -68
- package/dist/lib/mcp/client.js +0 -248
- package/dist/lib/mcp/config.d.ts +0 -31
- package/dist/lib/mcp/config.js +0 -99
- package/dist/lib/mcp/context-manager.d.ts +0 -171
- package/dist/lib/mcp/context-manager.js +0 -362
- package/dist/lib/mcp/contracts/mcp-contract.d.ts +0 -169
- package/dist/lib/mcp/contracts/mcp-contract.js +0 -58
- package/dist/lib/mcp/core/plugin-manager.d.ts +0 -46
- package/dist/lib/mcp/core/plugin-manager.js +0 -110
- package/dist/lib/mcp/demo/plugin-demo.d.ts +0 -20
- package/dist/lib/mcp/demo/plugin-demo.js +0 -118
- package/dist/lib/mcp/dynamic-chain-executor.d.ts +0 -225
- package/dist/lib/mcp/dynamic-chain-executor.js +0 -489
- package/dist/lib/mcp/dynamic-orchestrator.d.ts +0 -115
- package/dist/lib/mcp/dynamic-orchestrator.js +0 -351
- package/dist/lib/mcp/ecosystem.d.ts +0 -75
- package/dist/lib/mcp/ecosystem.js +0 -161
- package/dist/lib/mcp/error-manager.d.ts +0 -254
- package/dist/lib/mcp/error-manager.js +0 -501
- package/dist/lib/mcp/error-recovery.d.ts +0 -159
- package/dist/lib/mcp/error-recovery.js +0 -405
- package/dist/lib/mcp/external-client.d.ts +0 -88
- package/dist/lib/mcp/external-client.js +0 -331
- package/dist/lib/mcp/external-manager.d.ts +0 -112
- package/dist/lib/mcp/external-manager.js +0 -308
- package/dist/lib/mcp/function-calling.d.ts +0 -65
- package/dist/lib/mcp/function-calling.js +0 -642
- package/dist/lib/mcp/health-monitor.d.ts +0 -257
- package/dist/lib/mcp/health-monitor.js +0 -630
- package/dist/lib/mcp/initialize-tools.d.ts +0 -29
- package/dist/lib/mcp/initialize-tools.js +0 -261
- package/dist/lib/mcp/initialize.d.ts +0 -18
- package/dist/lib/mcp/initialize.js +0 -62
- package/dist/lib/mcp/logging.d.ts +0 -38
- package/dist/lib/mcp/logging.js +0 -100
- package/dist/lib/mcp/manager.d.ts +0 -68
- package/dist/lib/mcp/manager.js +0 -176
- package/dist/lib/mcp/neurolink-mcp-client.d.ts +0 -97
- package/dist/lib/mcp/neurolink-mcp-client.js +0 -462
- package/dist/lib/mcp/orchestrator.d.ts +0 -302
- package/dist/lib/mcp/orchestrator.js +0 -703
- package/dist/lib/mcp/plugin-manager.d.ts +0 -98
- package/dist/lib/mcp/plugin-manager.js +0 -296
- package/dist/lib/mcp/plugins/core/filesystem-mcp.d.ts +0 -36
- package/dist/lib/mcp/plugins/core/filesystem-mcp.js +0 -142
- package/dist/lib/mcp/plugins/filesystem-mcp.d.ts +0 -37
- package/dist/lib/mcp/plugins/filesystem-mcp.js +0 -54
- package/dist/lib/mcp/security-manager.d.ts +0 -87
- package/dist/lib/mcp/security-manager.js +0 -344
- package/dist/lib/mcp/semaphore-manager.d.ts +0 -137
- package/dist/lib/mcp/semaphore-manager.js +0 -329
- package/dist/lib/mcp/session-manager.d.ts +0 -187
- package/dist/lib/mcp/session-manager.js +0 -400
- package/dist/lib/mcp/session-persistence.d.ts +0 -93
- package/dist/lib/mcp/session-persistence.js +0 -301
- package/dist/lib/mcp/tool-integration.d.ts +0 -58
- package/dist/lib/mcp/tool-integration.js +0 -203
- package/dist/lib/mcp/transport-manager.d.ts +0 -154
- package/dist/lib/mcp/transport-manager.js +0 -334
- package/dist/lib/mcp/unified-mcp.d.ts +0 -133
- package/dist/lib/mcp/unified-mcp.js +0 -251
- package/dist/lib/mcp/unified-registry.d.ts +0 -165
- package/dist/lib/mcp/unified-registry.js +0 -538
- package/dist/lib/providers/analytics-helper.d.ts +0 -38
- package/dist/lib/providers/analytics-helper.js +0 -216
- package/dist/lib/providers/function-calling-provider.d.ts +0 -142
- package/dist/lib/providers/function-calling-provider.js +0 -630
- package/dist/lib/providers/mcp-provider.d.ts +0 -75
- package/dist/lib/providers/mcp-provider.js +0 -283
- package/dist/lib/providers/timeout-wrapper.d.ts +0 -40
- package/dist/lib/providers/timeout-wrapper.js +0 -100
- package/dist/lib/sdk/tool-extension.d.ts +0 -181
- package/dist/lib/sdk/tool-extension.js +0 -284
- package/dist/lib/services/streaming/streaming-manager.d.ts +0 -29
- package/dist/lib/services/streaming/streaming-manager.js +0 -245
- package/dist/lib/services/types.d.ts +0 -156
- package/dist/lib/services/types.js +0 -2
- package/dist/lib/services/websocket/websocket-server.d.ts +0 -34
- package/dist/lib/services/websocket/websocket-server.js +0 -305
- package/dist/lib/utils/provider-validation.d.ts +0 -36
- package/dist/lib/utils/provider-validation.js +0 -625
- package/dist/lib/utils/providerUtils-fixed.d.ts +0 -8
- package/dist/lib/utils/providerUtils-fixed.js +0 -94
- package/dist/lib/utils/streaming-utils.d.ts +0 -79
- package/dist/lib/utils/streaming-utils.js +0 -198
- package/dist/lib/utils/timeout-manager.d.ts +0 -75
- package/dist/lib/utils/timeout-manager.js +0 -244
- package/dist/mcp/adapters/plugin-bridge.d.ts +0 -40
- package/dist/mcp/adapters/plugin-bridge.js +0 -89
- package/dist/mcp/auto-discovery.d.ts +0 -62
- package/dist/mcp/auto-discovery.js +0 -149
- package/dist/mcp/client.d.ts +0 -68
- package/dist/mcp/client.js +0 -248
- package/dist/mcp/config.d.ts +0 -31
- package/dist/mcp/config.js +0 -99
- package/dist/mcp/context-manager.d.ts +0 -171
- package/dist/mcp/context-manager.js +0 -362
- package/dist/mcp/contracts/mcp-contract.d.ts +0 -169
- package/dist/mcp/contracts/mcp-contract.js +0 -58
- package/dist/mcp/core/plugin-manager.d.ts +0 -46
- package/dist/mcp/core/plugin-manager.js +0 -110
- package/dist/mcp/demo/plugin-demo.d.ts +0 -20
- package/dist/mcp/demo/plugin-demo.js +0 -118
- package/dist/mcp/dynamic-chain-executor.d.ts +0 -225
- package/dist/mcp/dynamic-chain-executor.js +0 -489
- package/dist/mcp/dynamic-orchestrator.d.ts +0 -115
- package/dist/mcp/dynamic-orchestrator.js +0 -351
- package/dist/mcp/ecosystem.d.ts +0 -75
- package/dist/mcp/ecosystem.js +0 -162
- package/dist/mcp/error-manager.d.ts +0 -254
- package/dist/mcp/error-manager.js +0 -501
- package/dist/mcp/error-recovery.d.ts +0 -159
- package/dist/mcp/error-recovery.js +0 -405
- package/dist/mcp/external-client.d.ts +0 -88
- package/dist/mcp/external-client.js +0 -331
- package/dist/mcp/external-manager.d.ts +0 -112
- package/dist/mcp/external-manager.js +0 -308
- package/dist/mcp/function-calling.d.ts +0 -65
- package/dist/mcp/function-calling.js +0 -642
- package/dist/mcp/health-monitor.d.ts +0 -257
- package/dist/mcp/health-monitor.js +0 -630
- package/dist/mcp/initialize-tools.d.ts +0 -29
- package/dist/mcp/initialize-tools.js +0 -262
- package/dist/mcp/initialize.d.ts +0 -18
- package/dist/mcp/initialize.js +0 -62
- package/dist/mcp/logging.d.ts +0 -38
- package/dist/mcp/logging.js +0 -100
- package/dist/mcp/manager.d.ts +0 -68
- package/dist/mcp/manager.js +0 -176
- package/dist/mcp/neurolink-mcp-client.d.ts +0 -97
- package/dist/mcp/neurolink-mcp-client.js +0 -462
- package/dist/mcp/orchestrator.d.ts +0 -302
- package/dist/mcp/orchestrator.js +0 -703
- package/dist/mcp/plugin-manager.d.ts +0 -98
- package/dist/mcp/plugin-manager.js +0 -297
- package/dist/mcp/plugins/core/filesystem-mcp.d.ts +0 -36
- package/dist/mcp/plugins/core/filesystem-mcp.js +0 -142
- package/dist/mcp/plugins/core/neurolink-mcp.json +0 -17
- package/dist/mcp/plugins/filesystem-mcp.d.ts +0 -37
- package/dist/mcp/plugins/filesystem-mcp.js +0 -54
- package/dist/mcp/security-manager.d.ts +0 -87
- package/dist/mcp/security-manager.js +0 -344
- package/dist/mcp/semaphore-manager.d.ts +0 -137
- package/dist/mcp/semaphore-manager.js +0 -329
- package/dist/mcp/session-manager.d.ts +0 -187
- package/dist/mcp/session-manager.js +0 -400
- package/dist/mcp/session-persistence.d.ts +0 -93
- package/dist/mcp/session-persistence.js +0 -302
- package/dist/mcp/tool-integration.d.ts +0 -58
- package/dist/mcp/tool-integration.js +0 -203
- package/dist/mcp/transport-manager.d.ts +0 -154
- package/dist/mcp/transport-manager.js +0 -335
- package/dist/mcp/unified-mcp.d.ts +0 -133
- package/dist/mcp/unified-mcp.js +0 -251
- package/dist/mcp/unified-registry.d.ts +0 -165
- package/dist/mcp/unified-registry.js +0 -539
- package/dist/providers/analytics-helper.d.ts +0 -38
- package/dist/providers/analytics-helper.js +0 -216
- package/dist/providers/function-calling-provider.d.ts +0 -142
- package/dist/providers/function-calling-provider.js +0 -630
- package/dist/providers/mcp-provider.d.ts +0 -75
- package/dist/providers/mcp-provider.js +0 -283
- package/dist/providers/timeout-wrapper.d.ts +0 -40
- package/dist/providers/timeout-wrapper.js +0 -100
- package/dist/sdk/tool-extension.d.ts +0 -181
- package/dist/sdk/tool-extension.js +0 -284
- package/dist/services/streaming/streaming-manager.d.ts +0 -29
- package/dist/services/streaming/streaming-manager.js +0 -245
- package/dist/services/types.d.ts +0 -156
- package/dist/services/types.js +0 -2
- package/dist/services/websocket/websocket-server.d.ts +0 -34
- package/dist/services/websocket/websocket-server.js +0 -306
- package/dist/utils/provider-validation.d.ts +0 -36
- package/dist/utils/provider-validation.js +0 -625
- package/dist/utils/providerUtils-fixed.d.ts +0 -8
- package/dist/utils/providerUtils-fixed.js +0 -94
- package/dist/utils/streaming-utils.d.ts +0 -79
- package/dist/utils/streaming-utils.js +0 -198
- package/dist/utils/timeout-manager.d.ts +0 -75
- 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 { 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;
|