claude-flow 2.0.0-alpha.63 → 2.0.0-alpha.65
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 +52 -0
- package/bin/claude-flow +1 -1
- package/dist/api/claude-api-errors.d.ts +115 -0
- package/dist/api/claude-api-errors.d.ts.map +1 -0
- package/dist/api/claude-api-errors.js +198 -0
- package/dist/api/claude-api-errors.js.map +1 -0
- package/dist/api/claude-client-enhanced.d.ts +109 -0
- package/dist/api/claude-client-enhanced.d.ts.map +1 -0
- package/dist/api/claude-client-enhanced.js +479 -0
- package/dist/api/claude-client-enhanced.js.map +1 -0
- package/dist/api/claude-client.d.ts +42 -0
- package/dist/api/claude-client.d.ts.map +1 -1
- package/dist/api/claude-client.js +217 -14
- package/dist/api/claude-client.js.map +1 -1
- package/dist/cli/commands/hive-mind/pause.d.ts.map +1 -1
- package/dist/cli/commands/hive-mind/pause.js +6 -5
- package/dist/cli/commands/hive-mind/pause.js.map +1 -1
- package/dist/cli/commands/hive-mind/ps.js.map +1 -1
- package/dist/cli/commands/hive-mind/resume.d.ts.map +1 -1
- package/dist/cli/commands/hive-mind/resume.js +4 -3
- package/dist/cli/commands/hive-mind/resume.js.map +1 -1
- package/dist/cli/commands/hive-mind/stop.js.map +1 -1
- package/dist/cli/repl.d.ts.map +1 -1
- package/dist/cli/repl.js +44 -22
- package/dist/cli/repl.js.map +1 -1
- package/dist/cli/simple-cli.js +4 -3
- package/dist/cli/simple-cli.js.map +1 -1
- package/dist/cli/simple-commands/coordination.js +60 -40
- package/dist/cli/simple-commands/coordination.js.map +1 -1
- package/dist/cli/simple-commands/hive-mind/auto-save-middleware.d.ts +3 -4
- package/dist/cli/simple-commands/hive-mind/auto-save-middleware.d.ts.map +1 -1
- package/dist/cli/simple-commands/hive-mind/auto-save-middleware.js +6 -6
- package/dist/cli/simple-commands/hive-mind/auto-save-middleware.js.map +1 -1
- package/dist/cli/simple-commands/hive-mind/mcp-wrapper.d.ts +1 -1
- package/dist/cli/simple-commands/hive-mind/mcp-wrapper.d.ts.map +1 -1
- package/dist/cli/simple-commands/hive-mind/mcp-wrapper.js +64 -7
- package/dist/cli/simple-commands/hive-mind/mcp-wrapper.js.map +1 -1
- package/dist/cli/simple-commands/hive-mind/session-manager.d.ts +139 -0
- package/dist/cli/simple-commands/hive-mind/session-manager.d.ts.map +1 -0
- package/dist/cli/simple-commands/hive-mind/session-manager.js +308 -95
- package/dist/cli/simple-commands/hive-mind/session-manager.js.map +1 -1
- package/dist/cli/simple-commands/hive-mind.d.ts.map +1 -1
- package/dist/cli/simple-commands/hive-mind.js +88 -10
- package/dist/cli/simple-commands/hive-mind.js.map +1 -1
- package/dist/cli/simple-commands/init/claude-commands/optimized-slash-commands.d.ts.map +1 -1
- package/dist/cli/simple-commands/init/claude-commands/optimized-slash-commands.js +45 -22
- package/dist/cli/simple-commands/init/claude-commands/optimized-slash-commands.js.map +1 -1
- package/dist/cli/simple-commands/init/claude-commands/slash-commands.d.ts.map +1 -1
- package/dist/cli/simple-commands/init/claude-commands/slash-commands.js +34 -13
- package/dist/cli/simple-commands/init/claude-commands/slash-commands.js.map +1 -1
- package/dist/cli/simple-commands/init/claude-commands/sparc-commands.d.ts.map +1 -1
- package/dist/cli/simple-commands/init/claude-commands/sparc-commands.js +107 -30
- package/dist/cli/simple-commands/init/claude-commands/sparc-commands.js.map +1 -1
- package/dist/cli/simple-commands/init/copy-revised-templates.d.ts +29 -0
- package/dist/cli/simple-commands/init/copy-revised-templates.d.ts.map +1 -0
- package/dist/cli/simple-commands/init/copy-revised-templates.js +159 -0
- package/dist/cli/simple-commands/init/copy-revised-templates.js.map +1 -0
- package/dist/cli/simple-commands/init/index.d.ts.map +1 -1
- package/dist/cli/simple-commands/init/index.js +139 -196
- package/dist/cli/simple-commands/init/index.js.map +1 -1
- package/dist/cli/simple-commands/init/template-copier.d.ts +27 -0
- package/dist/cli/simple-commands/init/template-copier.d.ts.map +1 -0
- package/dist/cli/simple-commands/init/template-copier.js +510 -0
- package/dist/cli/simple-commands/init/template-copier.js.map +1 -0
- package/dist/cli/simple-commands/init/templates/sparc-modes.d.ts.map +1 -1
- package/dist/cli/simple-commands/init/templates/sparc-modes.js +634 -23
- package/dist/cli/simple-commands/init/templates/sparc-modes.js.map +1 -1
- package/dist/cli/simple-orchestrator.d.ts.map +1 -1
- package/dist/cli/simple-orchestrator.js +2 -1
- package/dist/cli/simple-orchestrator.js.map +1 -1
- package/dist/cli/ui/compatible-ui.js +1 -1
- package/dist/cli/ui/compatible-ui.js.map +1 -1
- package/dist/cli/ui/index.d.ts.map +1 -1
- package/dist/cli/ui/index.js +4 -2
- package/dist/cli/ui/index.js.map +1 -1
- package/dist/cli/utils/environment-detector.d.ts +5 -0
- package/dist/cli/utils/environment-detector.d.ts.map +1 -1
- package/dist/cli/utils/environment-detector.js.map +1 -1
- package/dist/core/logger.d.ts +2 -0
- package/dist/core/logger.d.ts.map +1 -1
- package/dist/core/logger.js +3 -0
- package/dist/core/logger.js.map +1 -1
- package/dist/hive-mind/core/DatabaseManager.d.ts +6 -0
- package/dist/hive-mind/core/DatabaseManager.d.ts.map +1 -1
- package/dist/hive-mind/core/DatabaseManager.js +66 -15
- package/dist/hive-mind/core/DatabaseManager.js.map +1 -1
- package/dist/memory/backends/sqlite.d.ts +1 -0
- package/dist/memory/backends/sqlite.d.ts.map +1 -1
- package/dist/memory/backends/sqlite.js +17 -2
- package/dist/memory/backends/sqlite.js.map +1 -1
- package/package.json +1 -1
- package/src/cli/commands/hive-mind/pause.ts +6 -5
- package/src/cli/commands/hive-mind/ps.ts +4 -4
- package/src/cli/commands/hive-mind/resume.ts +4 -3
- package/src/cli/commands/hive-mind/stop.ts +1 -1
- package/src/cli/help-text.js +2 -2
- package/src/cli/repl.ts +44 -22
- package/src/cli/simple-cli.js +1 -1
- package/src/cli/simple-cli.ts +11 -10
- package/src/cli/simple-commands/init/index.js +1 -0
- package/src/cli/simple-commands/init/templates/claude-flow-universal +1 -1
- package/src/cli/simple-orchestrator.ts +2 -1
- package/src/cli/ui/compatible-ui.ts +1 -1
- package/src/cli/ui/index.ts +4 -2
- package/src/cli/utils/environment-detector.ts +2 -2
- package/src/core/logger.ts +5 -0
|
@@ -0,0 +1,479 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enhanced Claude API client with comprehensive error handling
|
|
3
|
+
* Implements exponential backoff, health checks, and improved error messages
|
|
4
|
+
*/
|
|
5
|
+
import { EventEmitter } from 'events';
|
|
6
|
+
import { ClaudeAPIError, ClaudeInternalServerError, ClaudeServiceUnavailableError, ClaudeRateLimitError, ClaudeTimeoutError, ClaudeNetworkError, ClaudeAuthenticationError, ClaudeValidationError, getUserFriendlyError, } from './claude-api-errors.js';
|
|
7
|
+
import { circuitBreaker } from '../utils/helpers.js';
|
|
8
|
+
export class EnhancedClaudeAPIClient extends EventEmitter {
|
|
9
|
+
config;
|
|
10
|
+
logger;
|
|
11
|
+
configManager;
|
|
12
|
+
circuitBreaker;
|
|
13
|
+
lastHealthCheck;
|
|
14
|
+
healthCheckTimer;
|
|
15
|
+
constructor(logger, configManager, config) {
|
|
16
|
+
super();
|
|
17
|
+
this.logger = logger;
|
|
18
|
+
this.configManager = configManager;
|
|
19
|
+
this.config = this.loadConfiguration(config);
|
|
20
|
+
// Initialize circuit breaker
|
|
21
|
+
this.circuitBreaker = circuitBreaker('claude-api', {
|
|
22
|
+
threshold: this.config.circuitBreakerThreshold || 5,
|
|
23
|
+
timeout: this.config.circuitBreakerTimeout || 60000,
|
|
24
|
+
resetTimeout: this.config.circuitBreakerResetTimeout || 300000,
|
|
25
|
+
});
|
|
26
|
+
// Start health check if enabled
|
|
27
|
+
if (this.config.enableHealthCheck) {
|
|
28
|
+
this.startHealthCheck();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Load configuration with enhanced defaults
|
|
33
|
+
*/
|
|
34
|
+
loadConfiguration(overrides) {
|
|
35
|
+
const config = {
|
|
36
|
+
apiKey: '',
|
|
37
|
+
apiUrl: 'https://api.anthropic.com/v1/messages',
|
|
38
|
+
model: 'claude-3-sonnet-20240229',
|
|
39
|
+
temperature: 0.7,
|
|
40
|
+
maxTokens: 4096,
|
|
41
|
+
topP: 1,
|
|
42
|
+
topK: undefined,
|
|
43
|
+
systemPrompt: undefined,
|
|
44
|
+
timeout: 60000,
|
|
45
|
+
retryAttempts: 3,
|
|
46
|
+
retryDelay: 1000,
|
|
47
|
+
// Enhanced configurations
|
|
48
|
+
enableHealthCheck: true,
|
|
49
|
+
healthCheckInterval: 300000, // 5 minutes
|
|
50
|
+
circuitBreakerThreshold: 5,
|
|
51
|
+
circuitBreakerTimeout: 60000,
|
|
52
|
+
circuitBreakerResetTimeout: 300000,
|
|
53
|
+
maxRetries: 3,
|
|
54
|
+
retryBaseDelay: 1000,
|
|
55
|
+
retryMaxDelay: 30000,
|
|
56
|
+
retryJitter: true,
|
|
57
|
+
};
|
|
58
|
+
// Load from environment
|
|
59
|
+
if (process.env.ANTHROPIC_API_KEY) {
|
|
60
|
+
config.apiKey = process.env.ANTHROPIC_API_KEY;
|
|
61
|
+
}
|
|
62
|
+
// Load from config manager
|
|
63
|
+
const claudeConfig = this.configManager.get('claude');
|
|
64
|
+
if (claudeConfig) {
|
|
65
|
+
Object.assign(config, claudeConfig);
|
|
66
|
+
}
|
|
67
|
+
// Apply overrides
|
|
68
|
+
if (overrides) {
|
|
69
|
+
Object.assign(config, overrides);
|
|
70
|
+
}
|
|
71
|
+
this.validateConfiguration(config);
|
|
72
|
+
return config;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Validate configuration
|
|
76
|
+
*/
|
|
77
|
+
validateConfiguration(config) {
|
|
78
|
+
if (!config.apiKey) {
|
|
79
|
+
throw new ClaudeAuthenticationError('Claude API key is required. Set ANTHROPIC_API_KEY environment variable.');
|
|
80
|
+
}
|
|
81
|
+
if (config.temperature !== undefined && (config.temperature < 0 || config.temperature > 1)) {
|
|
82
|
+
throw new ClaudeValidationError('Temperature must be between 0 and 1');
|
|
83
|
+
}
|
|
84
|
+
if (config.maxTokens !== undefined && (config.maxTokens < 1 || config.maxTokens > 100000)) {
|
|
85
|
+
throw new ClaudeValidationError('Max tokens must be between 1 and 100000');
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Start periodic health checks
|
|
90
|
+
*/
|
|
91
|
+
startHealthCheck() {
|
|
92
|
+
this.performHealthCheck(); // Initial check
|
|
93
|
+
this.healthCheckTimer = setInterval(() => this.performHealthCheck(), this.config.healthCheckInterval || 300000);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Perform a health check on the API
|
|
97
|
+
*/
|
|
98
|
+
async performHealthCheck() {
|
|
99
|
+
const startTime = Date.now();
|
|
100
|
+
try {
|
|
101
|
+
// Simple health check request
|
|
102
|
+
const controller = new AbortController();
|
|
103
|
+
const timeout = setTimeout(() => controller.abort(), 10000); // 10 second timeout
|
|
104
|
+
const response = await fetch(this.config.apiUrl || '', {
|
|
105
|
+
method: 'POST',
|
|
106
|
+
headers: {
|
|
107
|
+
'Content-Type': 'application/json',
|
|
108
|
+
'anthropic-version': '2023-06-01',
|
|
109
|
+
'x-api-key': this.config.apiKey,
|
|
110
|
+
},
|
|
111
|
+
body: JSON.stringify({
|
|
112
|
+
model: this.config.model,
|
|
113
|
+
messages: [{ role: 'user', content: 'Hi' }],
|
|
114
|
+
max_tokens: 1,
|
|
115
|
+
}),
|
|
116
|
+
signal: controller.signal,
|
|
117
|
+
});
|
|
118
|
+
clearTimeout(timeout);
|
|
119
|
+
const latency = Date.now() - startTime;
|
|
120
|
+
const healthy = response.ok || response.status === 429; // Rate limit is still "healthy"
|
|
121
|
+
this.lastHealthCheck = {
|
|
122
|
+
healthy,
|
|
123
|
+
latency,
|
|
124
|
+
error: healthy ? undefined : `Status: ${response.status}`,
|
|
125
|
+
timestamp: new Date(),
|
|
126
|
+
};
|
|
127
|
+
this.logger.debug('Claude API health check completed', this.lastHealthCheck);
|
|
128
|
+
this.emit('health_check', this.lastHealthCheck);
|
|
129
|
+
return this.lastHealthCheck;
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
const latency = Date.now() - startTime;
|
|
133
|
+
this.lastHealthCheck = {
|
|
134
|
+
healthy: false,
|
|
135
|
+
latency,
|
|
136
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
137
|
+
timestamp: new Date(),
|
|
138
|
+
};
|
|
139
|
+
this.logger.warn('Claude API health check failed', this.lastHealthCheck);
|
|
140
|
+
this.emit('health_check', this.lastHealthCheck);
|
|
141
|
+
return this.lastHealthCheck;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Get last health check result
|
|
146
|
+
*/
|
|
147
|
+
getHealthStatus() {
|
|
148
|
+
return this.lastHealthCheck;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Send a message with enhanced error handling
|
|
152
|
+
*/
|
|
153
|
+
async sendMessage(messages, options) {
|
|
154
|
+
const request = {
|
|
155
|
+
model: options?.model || this.config.model || 'claude-3-sonnet-20240229',
|
|
156
|
+
messages,
|
|
157
|
+
system: options?.systemPrompt || this.config.systemPrompt,
|
|
158
|
+
max_tokens: options?.maxTokens || this.config.maxTokens || 4096,
|
|
159
|
+
temperature: options?.temperature ?? this.config.temperature,
|
|
160
|
+
top_p: this.config.topP,
|
|
161
|
+
top_k: this.config.topK,
|
|
162
|
+
stream: options?.stream || false,
|
|
163
|
+
};
|
|
164
|
+
this.logger.debug('Sending Claude API request', {
|
|
165
|
+
model: request.model,
|
|
166
|
+
temperature: request.temperature,
|
|
167
|
+
maxTokens: request.max_tokens,
|
|
168
|
+
messageCount: messages.length,
|
|
169
|
+
stream: request.stream,
|
|
170
|
+
});
|
|
171
|
+
try {
|
|
172
|
+
// Use circuit breaker for the request
|
|
173
|
+
const result = await this.circuitBreaker.execute(async () => {
|
|
174
|
+
if (request.stream) {
|
|
175
|
+
return this.streamRequestWithRetry(request);
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
return this.sendRequestWithRetry(request);
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
return result;
|
|
182
|
+
}
|
|
183
|
+
catch (error) {
|
|
184
|
+
// Handle circuit breaker open state
|
|
185
|
+
if (error instanceof Error && error.message.includes('Circuit breaker')) {
|
|
186
|
+
const apiError = new ClaudeServiceUnavailableError('Claude API is temporarily unavailable due to repeated failures. Please try again later.');
|
|
187
|
+
this.handleError(apiError);
|
|
188
|
+
throw apiError;
|
|
189
|
+
}
|
|
190
|
+
throw error;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Send request with retry logic and enhanced error handling
|
|
195
|
+
*/
|
|
196
|
+
async sendRequestWithRetry(request) {
|
|
197
|
+
let lastError;
|
|
198
|
+
const maxRetries = this.config.maxRetries || 3;
|
|
199
|
+
for (let attempt = 0; attempt < maxRetries; attempt++) {
|
|
200
|
+
try {
|
|
201
|
+
return await this.sendRequestOnce(request);
|
|
202
|
+
}
|
|
203
|
+
catch (error) {
|
|
204
|
+
lastError = this.transformError(error);
|
|
205
|
+
// Don't retry non-retryable errors
|
|
206
|
+
if (!lastError.retryable) {
|
|
207
|
+
this.handleError(lastError);
|
|
208
|
+
throw lastError;
|
|
209
|
+
}
|
|
210
|
+
this.logger.warn(`Claude API request failed (attempt ${attempt + 1}/${maxRetries})`, {
|
|
211
|
+
error: lastError.message,
|
|
212
|
+
statusCode: lastError.statusCode,
|
|
213
|
+
retryable: lastError.retryable,
|
|
214
|
+
});
|
|
215
|
+
// Don't retry on the last attempt
|
|
216
|
+
if (attempt < maxRetries - 1) {
|
|
217
|
+
const delay = this.calculateRetryDelay(attempt, lastError);
|
|
218
|
+
this.logger.info(`Retrying after ${delay}ms...`);
|
|
219
|
+
await this.delay(delay);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
this.handleError(lastError);
|
|
224
|
+
throw lastError;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Send a single request
|
|
228
|
+
*/
|
|
229
|
+
async sendRequestOnce(request) {
|
|
230
|
+
const controller = new AbortController();
|
|
231
|
+
const timeout = setTimeout(() => controller.abort(), this.config.timeout || 60000);
|
|
232
|
+
try {
|
|
233
|
+
const response = await fetch(this.config.apiUrl || '', {
|
|
234
|
+
method: 'POST',
|
|
235
|
+
headers: {
|
|
236
|
+
'Content-Type': 'application/json',
|
|
237
|
+
'anthropic-version': '2023-06-01',
|
|
238
|
+
'x-api-key': this.config.apiKey,
|
|
239
|
+
},
|
|
240
|
+
body: JSON.stringify(request),
|
|
241
|
+
signal: controller.signal,
|
|
242
|
+
});
|
|
243
|
+
clearTimeout(timeout);
|
|
244
|
+
// Handle different error status codes
|
|
245
|
+
if (!response.ok) {
|
|
246
|
+
const errorText = await response.text();
|
|
247
|
+
let errorData;
|
|
248
|
+
try {
|
|
249
|
+
errorData = JSON.parse(errorText);
|
|
250
|
+
}
|
|
251
|
+
catch {
|
|
252
|
+
errorData = { message: errorText };
|
|
253
|
+
}
|
|
254
|
+
throw this.createAPIError(response.status, errorData);
|
|
255
|
+
}
|
|
256
|
+
const data = (await response.json());
|
|
257
|
+
this.logger.info('Claude API response received', {
|
|
258
|
+
model: data.model,
|
|
259
|
+
inputTokens: data.usage.input_tokens,
|
|
260
|
+
outputTokens: data.usage.output_tokens,
|
|
261
|
+
stopReason: data.stop_reason,
|
|
262
|
+
});
|
|
263
|
+
this.emit('response', data);
|
|
264
|
+
return data;
|
|
265
|
+
}
|
|
266
|
+
catch (error) {
|
|
267
|
+
clearTimeout(timeout);
|
|
268
|
+
// Handle abort/timeout
|
|
269
|
+
if (error instanceof Error && error.name === 'AbortError') {
|
|
270
|
+
throw new ClaudeTimeoutError('Request timed out', this.config.timeout || 60000);
|
|
271
|
+
}
|
|
272
|
+
throw error;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Stream request with retry logic
|
|
277
|
+
*/
|
|
278
|
+
async *streamRequestWithRetry(request) {
|
|
279
|
+
let lastError;
|
|
280
|
+
const maxRetries = this.config.maxRetries || 3;
|
|
281
|
+
for (let attempt = 0; attempt < maxRetries; attempt++) {
|
|
282
|
+
try {
|
|
283
|
+
yield* this.streamRequestOnce(request);
|
|
284
|
+
return;
|
|
285
|
+
}
|
|
286
|
+
catch (error) {
|
|
287
|
+
lastError = this.transformError(error);
|
|
288
|
+
if (!lastError.retryable) {
|
|
289
|
+
this.handleError(lastError);
|
|
290
|
+
throw lastError;
|
|
291
|
+
}
|
|
292
|
+
this.logger.warn(`Claude API stream request failed (attempt ${attempt + 1}/${maxRetries})`, { error: lastError.message });
|
|
293
|
+
if (attempt < maxRetries - 1) {
|
|
294
|
+
const delay = this.calculateRetryDelay(attempt, lastError);
|
|
295
|
+
await this.delay(delay);
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
this.handleError(lastError);
|
|
300
|
+
throw lastError;
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Send a single streaming request
|
|
304
|
+
*/
|
|
305
|
+
async *streamRequestOnce(request) {
|
|
306
|
+
const controller = new AbortController();
|
|
307
|
+
const timeout = setTimeout(() => controller.abort(), (this.config.timeout || 60000) * 2);
|
|
308
|
+
try {
|
|
309
|
+
const response = await fetch(this.config.apiUrl || '', {
|
|
310
|
+
method: 'POST',
|
|
311
|
+
headers: {
|
|
312
|
+
'Content-Type': 'application/json',
|
|
313
|
+
'anthropic-version': '2023-06-01',
|
|
314
|
+
'x-api-key': this.config.apiKey,
|
|
315
|
+
},
|
|
316
|
+
body: JSON.stringify({ ...request, stream: true }),
|
|
317
|
+
signal: controller.signal,
|
|
318
|
+
});
|
|
319
|
+
if (!response.ok) {
|
|
320
|
+
const errorText = await response.text();
|
|
321
|
+
let errorData;
|
|
322
|
+
try {
|
|
323
|
+
errorData = JSON.parse(errorText);
|
|
324
|
+
}
|
|
325
|
+
catch {
|
|
326
|
+
errorData = { message: errorText };
|
|
327
|
+
}
|
|
328
|
+
throw this.createAPIError(response.status, errorData);
|
|
329
|
+
}
|
|
330
|
+
if (!response.body) {
|
|
331
|
+
throw new ClaudeAPIError('Response body is null');
|
|
332
|
+
}
|
|
333
|
+
const reader = response.body.getReader();
|
|
334
|
+
const decoder = new TextDecoder();
|
|
335
|
+
let buffer = '';
|
|
336
|
+
while (true) {
|
|
337
|
+
const { done, value } = await reader.read();
|
|
338
|
+
if (done)
|
|
339
|
+
break;
|
|
340
|
+
buffer += decoder.decode(value, { stream: true });
|
|
341
|
+
const lines = buffer.split('\n');
|
|
342
|
+
buffer = lines.pop() || '';
|
|
343
|
+
for (const line of lines) {
|
|
344
|
+
if (line.startsWith('data: ')) {
|
|
345
|
+
const data = line.slice(6);
|
|
346
|
+
if (data === '[DONE]')
|
|
347
|
+
continue;
|
|
348
|
+
try {
|
|
349
|
+
const event = JSON.parse(data);
|
|
350
|
+
this.emit('stream_event', event);
|
|
351
|
+
yield event;
|
|
352
|
+
}
|
|
353
|
+
catch (e) {
|
|
354
|
+
this.logger.warn('Failed to parse stream event', { data, error: e });
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
finally {
|
|
361
|
+
clearTimeout(timeout);
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* Create appropriate error based on status code
|
|
366
|
+
*/
|
|
367
|
+
createAPIError(statusCode, errorData) {
|
|
368
|
+
const message = errorData.error?.message || errorData.message || 'Unknown error';
|
|
369
|
+
switch (statusCode) {
|
|
370
|
+
case 400:
|
|
371
|
+
return new ClaudeValidationError(message, errorData);
|
|
372
|
+
case 401:
|
|
373
|
+
case 403:
|
|
374
|
+
return new ClaudeAuthenticationError(message, errorData);
|
|
375
|
+
case 429:
|
|
376
|
+
const retryAfter = errorData.error?.retry_after;
|
|
377
|
+
return new ClaudeRateLimitError(message, retryAfter, errorData);
|
|
378
|
+
case 500:
|
|
379
|
+
return new ClaudeInternalServerError(message, errorData);
|
|
380
|
+
case 503:
|
|
381
|
+
return new ClaudeServiceUnavailableError(message, errorData);
|
|
382
|
+
default:
|
|
383
|
+
return new ClaudeAPIError(message, statusCode, statusCode >= 500, errorData);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Transform generic errors to Claude API errors
|
|
388
|
+
*/
|
|
389
|
+
transformError(error) {
|
|
390
|
+
if (error instanceof ClaudeAPIError) {
|
|
391
|
+
return error;
|
|
392
|
+
}
|
|
393
|
+
if (error instanceof Error) {
|
|
394
|
+
// Network errors
|
|
395
|
+
if (error.message.includes('fetch failed') || error.message.includes('ECONNREFUSED')) {
|
|
396
|
+
return new ClaudeNetworkError(error.message);
|
|
397
|
+
}
|
|
398
|
+
// Timeout errors
|
|
399
|
+
if (error.name === 'AbortError' || error.message.includes('timeout')) {
|
|
400
|
+
return new ClaudeTimeoutError(error.message, this.config.timeout || 60000);
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
return new ClaudeAPIError(error instanceof Error ? error.message : String(error), undefined, true);
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* Calculate retry delay with exponential backoff and jitter
|
|
407
|
+
*/
|
|
408
|
+
calculateRetryDelay(attempt, error) {
|
|
409
|
+
// If rate limit error with retry-after header, use that
|
|
410
|
+
if (error instanceof ClaudeRateLimitError && error.retryAfter) {
|
|
411
|
+
return error.retryAfter * 1000; // Convert to milliseconds
|
|
412
|
+
}
|
|
413
|
+
const baseDelay = this.config.retryBaseDelay || 1000;
|
|
414
|
+
const maxDelay = this.config.retryMaxDelay || 30000;
|
|
415
|
+
// Exponential backoff: delay = baseDelay * (2 ^ attempt)
|
|
416
|
+
let delay = Math.min(baseDelay * Math.pow(2, attempt), maxDelay);
|
|
417
|
+
// Add jitter to prevent thundering herd
|
|
418
|
+
if (this.config.retryJitter) {
|
|
419
|
+
const jitter = Math.random() * 0.3 * delay; // Up to 30% jitter
|
|
420
|
+
delay = delay + jitter;
|
|
421
|
+
}
|
|
422
|
+
return Math.floor(delay);
|
|
423
|
+
}
|
|
424
|
+
/**
|
|
425
|
+
* Handle errors with user-friendly messages and logging
|
|
426
|
+
*/
|
|
427
|
+
handleError(error) {
|
|
428
|
+
const errorInfo = getUserFriendlyError(error);
|
|
429
|
+
this.logger.error(`${errorInfo.title}: ${errorInfo.message}`, {
|
|
430
|
+
error: error.message,
|
|
431
|
+
code: error.code,
|
|
432
|
+
statusCode: error.statusCode,
|
|
433
|
+
retryable: error.retryable,
|
|
434
|
+
details: error.details,
|
|
435
|
+
});
|
|
436
|
+
// Log suggestions in debug mode
|
|
437
|
+
if (this.logger.level === 'debug' && errorInfo.suggestions.length > 0) {
|
|
438
|
+
this.logger.debug('Suggestions to resolve the issue:', errorInfo.suggestions);
|
|
439
|
+
}
|
|
440
|
+
this.emit('error', {
|
|
441
|
+
error,
|
|
442
|
+
userFriendly: errorInfo,
|
|
443
|
+
});
|
|
444
|
+
}
|
|
445
|
+
/**
|
|
446
|
+
* Helper method for simple completions with error handling
|
|
447
|
+
*/
|
|
448
|
+
async complete(prompt, options) {
|
|
449
|
+
try {
|
|
450
|
+
const messages = [{ role: 'user', content: prompt }];
|
|
451
|
+
const response = (await this.sendMessage(messages, options));
|
|
452
|
+
return response.content[0].text;
|
|
453
|
+
}
|
|
454
|
+
catch (error) {
|
|
455
|
+
if (error instanceof ClaudeAPIError) {
|
|
456
|
+
const errorInfo = getUserFriendlyError(error);
|
|
457
|
+
throw new Error(`${errorInfo.title}: ${errorInfo.message}`);
|
|
458
|
+
}
|
|
459
|
+
throw error;
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
/**
|
|
463
|
+
* Delay helper
|
|
464
|
+
*/
|
|
465
|
+
delay(ms) {
|
|
466
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
467
|
+
}
|
|
468
|
+
/**
|
|
469
|
+
* Clean up resources
|
|
470
|
+
*/
|
|
471
|
+
destroy() {
|
|
472
|
+
if (this.healthCheckTimer) {
|
|
473
|
+
clearInterval(this.healthCheckTimer);
|
|
474
|
+
this.healthCheckTimer = undefined;
|
|
475
|
+
}
|
|
476
|
+
this.removeAllListeners();
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
//# sourceMappingURL=claude-client-enhanced.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-client-enhanced.js","sourceRoot":"","sources":["../../src/api/claude-client-enhanced.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
import { EventEmitter } from 'events';
|
|
6
6
|
import { ILogger } from '../core/logger.js';
|
|
7
7
|
import { ConfigManager } from '../config/config-manager.js';
|
|
8
|
+
import { HealthCheckResult } from './claude-api-errors.js';
|
|
8
9
|
export interface ClaudeAPIConfig {
|
|
9
10
|
apiKey: string;
|
|
10
11
|
apiUrl?: string;
|
|
@@ -17,6 +18,12 @@ export interface ClaudeAPIConfig {
|
|
|
17
18
|
timeout?: number;
|
|
18
19
|
retryAttempts?: number;
|
|
19
20
|
retryDelay?: number;
|
|
21
|
+
enableHealthCheck?: boolean;
|
|
22
|
+
healthCheckInterval?: number;
|
|
23
|
+
circuitBreakerThreshold?: number;
|
|
24
|
+
circuitBreakerTimeout?: number;
|
|
25
|
+
circuitBreakerResetTimeout?: number;
|
|
26
|
+
retryJitter?: boolean;
|
|
20
27
|
}
|
|
21
28
|
export type ClaudeModel = 'claude-3-opus-20240229' | 'claude-3-sonnet-20240229' | 'claude-3-haiku-20240307' | 'claude-2.1' | 'claude-2.0' | 'claude-instant-1.2';
|
|
22
29
|
export interface ClaudeMessage {
|
|
@@ -82,6 +89,9 @@ export declare class ClaudeAPIClient extends EventEmitter {
|
|
|
82
89
|
private defaultModel;
|
|
83
90
|
private defaultTemperature;
|
|
84
91
|
private defaultMaxTokens;
|
|
92
|
+
private circuitBreaker;
|
|
93
|
+
private lastHealthCheck?;
|
|
94
|
+
private healthCheckTimer?;
|
|
85
95
|
constructor(logger: ILogger, configManager: ConfigManager, config?: Partial<ClaudeAPIConfig>);
|
|
86
96
|
/**
|
|
87
97
|
* Load configuration from various sources
|
|
@@ -151,5 +161,37 @@ export declare class ClaudeAPIClient extends EventEmitter {
|
|
|
151
161
|
* Delay helper for retries
|
|
152
162
|
*/
|
|
153
163
|
private delay;
|
|
164
|
+
/**
|
|
165
|
+
* Start periodic health checks
|
|
166
|
+
*/
|
|
167
|
+
private startHealthCheck;
|
|
168
|
+
/**
|
|
169
|
+
* Perform a health check on the API
|
|
170
|
+
*/
|
|
171
|
+
performHealthCheck(): Promise<HealthCheckResult>;
|
|
172
|
+
/**
|
|
173
|
+
* Get last health check result
|
|
174
|
+
*/
|
|
175
|
+
getHealthStatus(): HealthCheckResult | undefined;
|
|
176
|
+
/**
|
|
177
|
+
* Create appropriate error based on status code
|
|
178
|
+
*/
|
|
179
|
+
private createAPIError;
|
|
180
|
+
/**
|
|
181
|
+
* Transform generic errors to Claude API errors
|
|
182
|
+
*/
|
|
183
|
+
private transformError;
|
|
184
|
+
/**
|
|
185
|
+
* Calculate retry delay with exponential backoff and jitter
|
|
186
|
+
*/
|
|
187
|
+
private calculateRetryDelay;
|
|
188
|
+
/**
|
|
189
|
+
* Handle errors with user-friendly messages and logging
|
|
190
|
+
*/
|
|
191
|
+
private handleError;
|
|
192
|
+
/**
|
|
193
|
+
* Clean up resources
|
|
194
|
+
*/
|
|
195
|
+
destroy(): void;
|
|
154
196
|
}
|
|
155
197
|
//# sourceMappingURL=claude-client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-client.d.ts","sourceRoot":"","sources":["../../src/api/claude-client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"claude-client.d.ts","sourceRoot":"","sources":["../../src/api/claude-client.ts"],"names":[],"mappings":"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"}
|