feat(provider): 增加 Claude Code 适配器、高级配置能力与 OAuth 账号类型统一解析

- 新增 Claude Code provider adapter (context, envelope, plugin, constants)
- 扩展 provider admin 路由,支持 Claude Code 高级配置 (CRUD)
- 统一 OAuth 账号类型解析逻辑,前后端对齐
- 重构 BatchAssignModelsDialog / ModelMappingDialog,简化组件逻辑
- handler 基类增强: request_builder 支持 Claude Code 信封格式
- CLI stream/sync mixin 适配 Claude Code 流式与同步模式
- 扩展 candidate builder / failover / scheduler 对 Claude Code 的支持
- 前端增加请求时间线可视化 (HorizontalRequestTimeline)
- 补充 Claude Code envelope / runtime controls / distributed sessions 等测试

Closes #183
Closes #185

Co-Authored-By: AAEE86 <ppk0227@hotmail.com>
This commit is contained in:
fawney19
2026-02-27 13:54:46 +08:00
parent f2f2a2dbc4
commit 579b5e4623
55 changed files with 3106 additions and 652 deletions

View File

@@ -7,3 +7,4 @@ export * from './health'
export * from './models'
export * from './adaptive'
export * from './global-models'
export * from './pool'

View File

@@ -1,5 +1,10 @@
import client from '../client'
import type { ProviderWithEndpointsSummary, ProxyConfig } from './types'
import type {
ClaudeCodeAdvancedConfig,
PoolAdvancedConfig,
ProviderWithEndpointsSummary,
ProxyConfig,
} from './types'
/**
* 获取 Providers 摘要(包含 Endpoints 统计)
@@ -41,6 +46,8 @@ export async function updateProvider(
max_probe_interval_minutes: number
enable_format_conversion: boolean // 是否允许格式转换(提供商级别开关)
is_active: boolean
claude_code_advanced: ClaudeCodeAdvancedConfig | null
pool_advanced: PoolAdvancedConfig | null
}>
): Promise<ProviderWithEndpointsSummary> {
const response = await client.patch(`/api/admin/providers/${providerId}`, data)
@@ -68,6 +75,8 @@ export async function createProvider(
stream_first_byte_timeout?: number | null
request_timeout?: number | null
proxy?: ProxyConfig | null
claude_code_advanced?: ClaudeCodeAdvancedConfig | null
pool_advanced?: PoolAdvancedConfig | null
}
): Promise<{ id: string; name: string; message?: string }> {
const response = await client.post('/api/admin/providers/', data)

View File

@@ -442,6 +442,30 @@ export interface PublicEndpointStatusMonitorResponse {
export type ProviderType = 'custom' | 'claude_code' | 'codex' | 'gemini_cli' | 'antigravity' | 'kiro'
export interface ClaudeCodeAdvancedConfig {
// 会话数量控制null/undefined 表示不限制
max_sessions?: number | null
session_idle_timeout_minutes?: number | null
// TLS 指纹模拟(模拟 Node.js/Claude Code 客户端指纹)
enable_tls_fingerprint?: boolean
// 会话 ID 伪装(固定 metadata.user_id 中 session 片段)
session_id_masking_enabled?: boolean
}
export interface PoolAdvancedConfig {
sticky_session_ttl_seconds?: number | null
load_threshold_percent?: number | null
lru_enabled?: boolean
cost_window_seconds?: number | null
cost_limit_per_key_tokens?: number | null
cost_soft_threshold_percent?: number | null
rate_limit_cooldown_seconds?: number | null
overload_cooldown_seconds?: number | null
proactive_refresh_seconds?: number | null
health_policy_enabled?: boolean
unschedulable_rules?: Array<Record<string, unknown>> | null
}
export interface ProviderWithEndpointsSummary {
id: string
name: string
@@ -475,6 +499,8 @@ export interface ProviderWithEndpointsSummary {
unhealthy_endpoints: number
api_formats: string[]
endpoint_health_details: EndpointHealthDetail[]
claude_code_advanced?: ClaudeCodeAdvancedConfig | null
pool_advanced?: PoolAdvancedConfig | null
ops_configured: boolean // 是否配置了扩展操作(余额监控等)
ops_architecture_id?: string // 扩展操作使用的架构 ID如 cubence, anyrouter
created_at: string