route-claudecode
Version:
Advanced routing and transformation system for Claude Code outputs to multiple AI providers
198 lines • 8.81 kB
JavaScript
;
/**
* CodeWhisperer 向后兼容客户端
* 保持现有 API 接口不变,内部使用增强功能
* 确保平滑升级和无缝迁移
* 项目所有者: Jason Zhang
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.BackwardCompatibleCodeWhispererClient = void 0;
const logger_1 = require("@/utils/logger");
const enhanced_client_1 = require("./enhanced-client");
const config_migration_1 = require("./config-migration");
class BackwardCompatibleCodeWhispererClient {
enhancedClient;
migrationApplied = false;
constructor(legacyConfig) {
// 自动迁移配置
const enhancedConfig = legacyConfig
? config_migration_1.CodeWhispererConfigMigrator.migrateFromLegacy(legacyConfig)
: config_migration_1.CodeWhispererConfigMigrator.autoMigrateFromEnvironment();
// 验证配置
const validation = config_migration_1.CodeWhispererConfigMigrator.validateConfig(enhancedConfig);
if (!validation.isValid) {
logger_1.logger.warn('Configuration validation warnings', { errors: validation.errors });
// 使用默认配置作为后备
const defaultConfig = config_migration_1.CodeWhispererConfigMigrator.getDefaultEnhancedConfig();
this.enhancedClient = new enhanced_client_1.EnhancedCodeWhispererClient(defaultConfig);
}
else {
this.enhancedClient = new enhanced_client_1.EnhancedCodeWhispererClient(enhancedConfig);
}
this.migrationApplied = !!legacyConfig;
logger_1.logger.info('Backward compatible CodeWhisperer client initialized', {
migrationApplied: this.migrationApplied,
clientType: this.enhancedClient.getClientType(),
configValidation: validation.isValid
});
}
/**
* 处理流式请求 - 保持原有接口
*/
async handleStreamRequest(anthropicReq, writeSSE, onError) {
// 直接委托给增强客户端
return this.enhancedClient.handleStreamRequest(anthropicReq, writeSSE, onError);
}
/**
* 处理非流式请求 - 保持原有接口
*/
async handleNonStreamRequest(anthropicReq) {
// 直接委托给增强客户端
return this.enhancedClient.handleNonStreamRequest(anthropicReq);
}
/**
* 健康检查 - 保持原有接口
*/
async healthCheck() {
return this.enhancedClient.healthCheck();
}
/**
* 获取客户端类型 - 保持原有接口
*/
getClientType() {
return this.enhancedClient.getClientType();
}
/**
* 更新配置 - 支持传统配置格式
*/
updateLegacyConfig(legacyConfig) {
const enhancedConfig = config_migration_1.CodeWhispererConfigMigrator.migrateFromLegacy(legacyConfig);
// 验证新配置
const validation = config_migration_1.CodeWhispererConfigMigrator.validateConfig(enhancedConfig);
if (!validation.isValid) {
logger_1.logger.error('Invalid configuration provided', { errors: validation.errors });
throw new Error(`Configuration validation failed: ${validation.errors.join(', ')}`);
}
this.enhancedClient.updateConfig(enhancedConfig);
logger_1.logger.info('Legacy configuration updated successfully', {
configSource: 'legacy',
validationPassed: true
});
}
/**
* 更新增强配置 - 支持新配置格式
*/
updateEnhancedConfig(enhancedConfig) {
// 获取当前配置并合并
const currentConfig = this.enhancedClient.getConfig();
const mergedConfig = {
credentials: { ...currentConfig.credentials, ...enhancedConfig.credentials },
region: {
region: enhancedConfig.region?.region || currentConfig.region?.region || 'us-east-1',
refreshUrl: enhancedConfig.region?.refreshUrl || currentConfig.region?.refreshUrl,
refreshIDCUrl: enhancedConfig.region?.refreshIDCUrl || currentConfig.region?.refreshIDCUrl,
baseUrl: enhancedConfig.region?.baseUrl || currentConfig.region?.baseUrl,
amazonQUrl: enhancedConfig.region?.amazonQUrl || currentConfig.region?.amazonQUrl
},
retry: {
maxRetries: enhancedConfig.retry?.maxRetries || currentConfig.retry?.maxRetries || 3,
baseDelay: enhancedConfig.retry?.baseDelay || currentConfig.retry?.baseDelay || 1000,
backoffMultiplier: enhancedConfig.retry?.backoffMultiplier || currentConfig.retry?.backoffMultiplier || 2,
retryableStatuses: enhancedConfig.retry?.retryableStatuses || currentConfig.retry?.retryableStatuses || [429, 500, 502, 503, 504],
timeoutMs: enhancedConfig.retry?.timeoutMs || currentConfig.retry?.timeoutMs || 120000
},
authMethod: enhancedConfig.authMethod || currentConfig.authMethod,
userAgent: enhancedConfig.userAgent || currentConfig.userAgent,
enableDebugLog: enhancedConfig.enableDebugLog !== undefined
? enhancedConfig.enableDebugLog
: currentConfig.enableDebugLog
};
// 验证合并后的配置
const validation = config_migration_1.CodeWhispererConfigMigrator.validateConfig(mergedConfig);
if (!validation.isValid) {
logger_1.logger.error('Invalid enhanced configuration provided', { errors: validation.errors });
throw new Error(`Enhanced configuration validation failed: ${validation.errors.join(', ')}`);
}
this.enhancedClient.updateConfig(mergedConfig);
logger_1.logger.info('Enhanced configuration updated successfully', {
configSource: 'enhanced',
validationPassed: true
});
}
/**
* 获取当前配置(增强格式)
*/
getEnhancedConfig() {
return this.enhancedClient.getConfig();
}
/**
* 获取迁移状态
*/
getMigrationStatus() {
const config = this.enhancedClient.getConfig();
const validation = config_migration_1.CodeWhispererConfigMigrator.validateConfig(config);
return {
migrationApplied: this.migrationApplied,
clientType: this.getClientType(),
configValid: validation.isValid
};
}
/**
* 重置为默认配置
*/
resetToDefaults() {
const defaultConfig = config_migration_1.CodeWhispererConfigMigrator.getDefaultEnhancedConfig();
this.enhancedClient.updateConfig(defaultConfig);
this.migrationApplied = false;
logger_1.logger.info('Configuration reset to defaults completed');
}
/**
* 诊断配置问题
*/
diagnoseConfiguration() {
const config = this.enhancedClient.getConfig();
const validation = config_migration_1.CodeWhispererConfigMigrator.validateConfig(config);
const issues = [];
const recommendations = [];
// 检查配置有效性
if (!validation.isValid) {
issues.push(...validation.errors);
recommendations.push('Fix configuration validation errors');
}
// 检查凭据源配置
if (!config.credentials.priorityOrder || config.credentials.priorityOrder.length === 0) {
issues.push('No credential sources configured');
recommendations.push('Configure at least one credential source');
}
// 检查重试配置合理性
if (config.retry && config.retry.maxRetries > 10) {
issues.push('Max retries set too high');
recommendations.push('Consider reducing max retries to avoid excessive delays');
}
// 检查超时配置
if (config.retry && config.retry.timeoutMs < 30000) {
issues.push('Timeout may be too short for CodeWhisperer API');
recommendations.push('Consider increasing timeout to at least 30 seconds');
}
// 确定状态
let status = 'healthy';
if (issues.length > 0) {
status = validation.isValid ? 'warning' : 'error';
}
logger_1.logger.info('Configuration diagnosis completed', {
status,
issueCount: issues.length,
recommendationCount: recommendations.length
});
return { status, issues, recommendations };
}
/**
* 获取内部增强客户端(用于高级用例)
*/
getEnhancedClient() {
logger_1.logger.debug('Providing access to enhanced client');
return this.enhancedClient;
}
}
exports.BackwardCompatibleCodeWhispererClient = BackwardCompatibleCodeWhispererClient;
//# sourceMappingURL=backward-compatible-client.js.map