mirror of
https://github.com/fawney19/Aether.git
synced 2026-10-04 00:17:45 +08:00
feat(claude-code): 为 claude_code provider 补全 Claude Code 请求体特征
非 Claude Code 客户端(如 pi)经 OAuth 的 claude_code provider 转发时, 只有请求头被伪装成 Claude Code,请求体仍是客户端原样,被上游以 429 rate_limit_error 拒绝(响应无 ratelimit 额度头,并非真实限流)。 参考 sub2api 的 OAuth 请求体伪装,在传输层补齐请求体: - system 重写为计费头 + 身份句 + 通用提示词三块(Fable 仅保留前两块) - 原 system 迁入 messages 开头,避免丢失客户端指令 - 缺失时补 metadata.user_id,device/session id 基于 key 稳定派生 - 缺失时补 tools/temperature/max_tokens,并限制 cache_control 不超过 4 个 - 已带计费块且有 metadata.user_id 的真实 Claude Code 请求原样放行, 重复应用幂等 接入点覆盖跨格式路径(apply_transport_request_body_semantics)和 原生 claude:messages 同格式路径,仅作用于 provider_type=claude_code。
This commit is contained in:
@@ -314,6 +314,20 @@ pub(crate) async fn resolve_local_same_format_provider_candidate_payload_parts(
|
||||
return Ok(None);
|
||||
}
|
||||
|
||||
// Same-format requests skip `apply_transport_request_body_semantics`, so the opt-in
|
||||
// Claude Code body mimicry has to be applied here as well.
|
||||
if crate::provider_transport::claude_code::apply_claude_code_body_mimicry_for_transport(
|
||||
&mut base_provider_request_body,
|
||||
&transport,
|
||||
prepared.provider_api_format.as_str(),
|
||||
) {
|
||||
compatibility_edits.push(SameFormatProviderCompatibilityEdit {
|
||||
field: "body".to_string(),
|
||||
action: SameFormatProviderCompatibilityEditAction::ProviderCompatibilityRewrite,
|
||||
detail: "applied Claude Code body mimicry for provider compatibility".to_string(),
|
||||
});
|
||||
}
|
||||
|
||||
let antigravity_auth = if prepared.is_antigravity {
|
||||
let mut antigravity_support = classify_local_antigravity_request_support(
|
||||
&transport,
|
||||
|
||||
Reference in New Issue
Block a user