mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-03 01:40:21 +08:00
fix(provider): 修复 Windsurf PR 冲突残留
This commit is contained in:
@@ -44,12 +44,11 @@ pub(crate) use aether_ai_formats::api::{
|
|||||||
build_core_error_body_for_client_format, convert_standard_chat_response,
|
build_core_error_body_for_client_format, convert_standard_chat_response,
|
||||||
core_error_background_report_kind, core_error_default_client_api_format,
|
core_error_background_report_kind, core_error_default_client_api_format,
|
||||||
core_success_background_report_kind, encode_kiro_sse_events,
|
core_success_background_report_kind, encode_kiro_sse_events,
|
||||||
extract_provider_private_stream_error_body,
|
extract_provider_private_stream_error_body, implicit_sync_finalize_report_kind,
|
||||||
implicit_sync_finalize_report_kind, is_core_error_finalize_kind,
|
is_core_error_finalize_kind, normalize_provider_private_report_context,
|
||||||
normalize_provider_private_report_context, normalize_provider_private_response_value,
|
normalize_provider_private_response_value, provider_private_response_allows_sync_finalize,
|
||||||
provider_private_response_allows_sync_finalize, resolve_claude_stream_spec,
|
resolve_claude_stream_spec, resolve_claude_sync_spec, resolve_gemini_stream_spec,
|
||||||
resolve_claude_sync_spec, resolve_gemini_stream_spec, resolve_gemini_sync_spec,
|
resolve_gemini_sync_spec, resolve_local_image_stream_spec, resolve_local_image_sync_spec,
|
||||||
resolve_local_image_stream_spec, resolve_local_image_sync_spec,
|
|
||||||
resolve_local_same_format_stream_spec, resolve_local_same_format_sync_spec,
|
resolve_local_same_format_stream_spec, resolve_local_same_format_sync_spec,
|
||||||
resolve_openai_embedding_sync_spec, sanitize_request_path_and_query, AiControlPlanRequest,
|
resolve_openai_embedding_sync_spec, sanitize_request_path_and_query, AiControlPlanRequest,
|
||||||
CanonicalContentPart, CanonicalStreamEvent, CanonicalStreamFrame, ClaudeClientEmitter,
|
CanonicalContentPart, CanonicalStreamEvent, CanonicalStreamFrame, ClaudeClientEmitter,
|
||||||
|
|||||||
@@ -24,13 +24,13 @@ use crate::ai_serving::transport::kiro::{
|
|||||||
use crate::ai_serving::transport::{
|
use crate::ai_serving::transport::{
|
||||||
build_grok_browser_headers, build_grok_upstream_url, build_kiro_cross_format_upstream_url,
|
build_grok_browser_headers, build_grok_upstream_url, build_kiro_cross_format_upstream_url,
|
||||||
build_openai_image_headers, build_openai_image_upstream_url,
|
build_openai_image_headers, build_openai_image_upstream_url,
|
||||||
build_standard_provider_request_headers, openai_image_transport_unsupported_reason,
|
build_standard_provider_request_headers, build_windsurf_cascade_headers,
|
||||||
resolve_grok_session_auth, resolve_openai_image_auth, GrokHeaderInput,
|
build_windsurf_cascade_request_body, build_windsurf_cascade_upstream_url,
|
||||||
build_windsurf_cascade_headers, build_windsurf_cascade_request_body,
|
is_windsurf_provider_transport,
|
||||||
build_windsurf_cascade_upstream_url, is_windsurf_provider_transport,
|
|
||||||
local_windsurf_request_transport_unsupported_reason_with_network,
|
local_windsurf_request_transport_unsupported_reason_with_network,
|
||||||
ProviderOpenAiImageHeadersInput, StandardProviderRequestHeadersInput, WINDSURF_ENVELOPE_NAME,
|
openai_image_transport_unsupported_reason, resolve_grok_session_auth,
|
||||||
GROK_CHAT_PATH,
|
resolve_openai_image_auth, GrokHeaderInput, ProviderOpenAiImageHeadersInput,
|
||||||
|
StandardProviderRequestHeadersInput, GROK_CHAT_PATH, WINDSURF_ENVELOPE_NAME,
|
||||||
};
|
};
|
||||||
use crate::ai_serving::{
|
use crate::ai_serving::{
|
||||||
build_openai_image_request_body_from_gemini_image_request, gemini_request_is_image_generation,
|
build_openai_image_request_body_from_gemini_image_request, gemini_request_is_image_generation,
|
||||||
|
|||||||
@@ -44,8 +44,8 @@ use crate::ai_serving::transport::{
|
|||||||
is_windsurf_provider_transport, local_standard_transport_unsupported_reason_with_network,
|
is_windsurf_provider_transport, local_standard_transport_unsupported_reason_with_network,
|
||||||
local_windsurf_request_transport_unsupported_reason_with_network,
|
local_windsurf_request_transport_unsupported_reason_with_network,
|
||||||
openai_image_transport_unsupported_reason, resolve_openai_image_auth, GrokHeaderInput,
|
openai_image_transport_unsupported_reason, resolve_openai_image_auth, GrokHeaderInput,
|
||||||
ProviderOpenAiImageHeadersInput, StandardProviderRequestHeadersInput, WINDSURF_ENVELOPE_NAME,
|
ProviderOpenAiImageHeadersInput, StandardProviderRequestHeadersInput, GROK_CHAT_PATH,
|
||||||
GROK_CHAT_PATH,
|
WINDSURF_ENVELOPE_NAME,
|
||||||
};
|
};
|
||||||
use crate::ai_serving::{
|
use crate::ai_serving::{
|
||||||
ai_local_execution_contract_for_formats, request_conversion_direct_auth,
|
ai_local_execution_contract_for_formats, request_conversion_direct_auth,
|
||||||
|
|||||||
@@ -74,12 +74,11 @@ pub(crate) use aether_provider_transport::{
|
|||||||
build_transport_request_url, build_transport_request_url_for_request_body,
|
build_transport_request_url, build_transport_request_url_for_request_body,
|
||||||
build_video_create_headers, build_video_create_request_body, build_video_create_upstream_url,
|
build_video_create_headers, build_video_create_request_body, build_video_create_upstream_url,
|
||||||
build_windsurf_cascade_headers, build_windsurf_cascade_request_body,
|
build_windsurf_cascade_headers, build_windsurf_cascade_request_body,
|
||||||
build_windsurf_cascade_upstream_url,
|
build_windsurf_cascade_upstream_url, candidate_common_transport_skip_reason,
|
||||||
candidate_common_transport_skip_reason, candidate_transport_pair_skip_reason,
|
candidate_transport_pair_skip_reason, classify_same_format_provider_request_behavior,
|
||||||
classify_same_format_provider_request_behavior, ensure_upstream_auth_header,
|
ensure_upstream_auth_header, gemini_files_transport_unsupported_reason,
|
||||||
gemini_files_transport_unsupported_reason, header_rules_are_locally_supported,
|
header_rules_are_locally_supported, header_rules_have_enabled_rules,
|
||||||
header_rules_have_enabled_rules, is_windsurf_provider_transport,
|
is_windsurf_provider_transport, local_gemini_transport_unsupported_reason_with_network,
|
||||||
local_gemini_transport_unsupported_reason_with_network,
|
|
||||||
local_openai_chat_transport_unsupported_reason,
|
local_openai_chat_transport_unsupported_reason,
|
||||||
local_standard_transport_unsupported_reason_with_network,
|
local_standard_transport_unsupported_reason_with_network,
|
||||||
local_windsurf_request_transport_unsupported_reason_with_network,
|
local_windsurf_request_transport_unsupported_reason_with_network,
|
||||||
|
|||||||
@@ -28,9 +28,9 @@ use tokio::time::MissedTickBehavior;
|
|||||||
use tracing::{debug, warn};
|
use tracing::{debug, warn};
|
||||||
|
|
||||||
use crate::ai_serving::api::{
|
use crate::ai_serving::api::{
|
||||||
build_core_error_body_for_client_format, implicit_sync_finalize_report_kind,
|
build_core_error_body_for_client_format, extract_provider_private_stream_error_body,
|
||||||
maybe_build_sync_finalize_outcome, extract_provider_private_stream_error_body,
|
implicit_sync_finalize_report_kind, maybe_build_sync_finalize_outcome, LocalCoreSyncErrorKind,
|
||||||
LocalCoreSyncErrorKind, LocalCoreSyncFinalizeOutcome,
|
LocalCoreSyncFinalizeOutcome,
|
||||||
};
|
};
|
||||||
use crate::api::response::{
|
use crate::api::response::{
|
||||||
attach_control_metadata_headers, build_client_response, build_client_response_from_parts,
|
attach_control_metadata_headers, build_client_response, build_client_response_from_parts,
|
||||||
@@ -47,10 +47,10 @@ use crate::execution_runtime::submission::{
|
|||||||
resolve_local_sync_error_status_code, submit_local_core_error_or_sync_finalize,
|
resolve_local_sync_error_status_code, submit_local_core_error_or_sync_finalize,
|
||||||
};
|
};
|
||||||
use crate::execution_runtime::transport::{
|
use crate::execution_runtime::transport::{
|
||||||
build_execution_response_body,
|
build_execution_response_body, build_request_body, collect_response_headers,
|
||||||
build_request_body, collect_response_headers, decode_response_body_bytes,
|
decode_response_body_bytes, format_upstream_request_error, format_wreq_upstream_request_error,
|
||||||
format_upstream_request_error, format_wreq_upstream_request_error, response_body_is_json,
|
response_body_is_json, send_request, DirectHttpResponse, DirectSyncExecutionRuntime,
|
||||||
send_request, DirectHttpResponse, DirectSyncExecutionRuntime, ExecutionRuntimeTransportError,
|
ExecutionRuntimeTransportError,
|
||||||
};
|
};
|
||||||
use crate::execution_runtime::windsurf::maybe_execute_windsurf_sync;
|
use crate::execution_runtime::windsurf::maybe_execute_windsurf_sync;
|
||||||
use crate::execution_runtime::{
|
use crate::execution_runtime::{
|
||||||
|
|||||||
@@ -1525,11 +1525,11 @@ mod tests {
|
|||||||
|
|
||||||
use super::{
|
use super::{
|
||||||
build_browser_wreq_client, build_client, build_execution_response_body,
|
build_browser_wreq_client, build_client, build_execution_response_body,
|
||||||
build_request_headers, execute_sync_plan,
|
build_request_headers, execute_sync_plan, record_manual_proxy_request_failure,
|
||||||
record_manual_proxy_request_failure, record_manual_proxy_request_outcome,
|
record_manual_proxy_request_outcome, record_manual_proxy_request_success,
|
||||||
record_manual_proxy_request_success, record_manual_proxy_stream_error,
|
record_manual_proxy_stream_error, resolve_execution_transport_controls,
|
||||||
resolve_execution_transport_controls, response_body_is_json, DirectSyncExecutionRuntime,
|
response_body_is_json, DirectSyncExecutionRuntime, ExecutionRuntimeTransportError,
|
||||||
ExecutionRuntimeTransportError, ExecutionTransportControls,
|
ExecutionTransportControls,
|
||||||
};
|
};
|
||||||
use crate::constants::{
|
use crate::constants::{
|
||||||
EXECUTION_RUNTIME_LOOP_GUARD_HEADER, EXECUTION_RUNTIME_LOOP_GUARD_VIA_TOKEN,
|
EXECUTION_RUNTIME_LOOP_GUARD_HEADER, EXECUTION_RUNTIME_LOOP_GUARD_VIA_TOKEN,
|
||||||
|
|||||||
@@ -176,11 +176,7 @@ fn extract_admin_provider_oauth_batch_import_entry(
|
|||||||
.get("access_token")
|
.get("access_token")
|
||||||
.or_else(|| object.get("accessToken")),
|
.or_else(|| object.get("accessToken")),
|
||||||
);
|
);
|
||||||
let grok_token_alias = if is_grok {
|
let grok_token_alias = if is_grok { object.get("token") } else { None };
|
||||||
object.get("token")
|
|
||||||
} else {
|
|
||||||
None
|
|
||||||
};
|
|
||||||
let grok_cookie = if is_grok {
|
let grok_cookie = if is_grok {
|
||||||
coerce_admin_provider_oauth_import_str(
|
coerce_admin_provider_oauth_import_str(
|
||||||
object.get("cookie").or_else(|| object.get("cookieHeader")),
|
object.get("cookie").or_else(|| object.get("cookieHeader")),
|
||||||
@@ -204,26 +200,30 @@ fn extract_admin_provider_oauth_batch_import_entry(
|
|||||||
refresh_token.as_deref(),
|
refresh_token.as_deref(),
|
||||||
access_token.as_deref().or(session_token.as_deref()),
|
access_token.as_deref().or(session_token.as_deref()),
|
||||||
);
|
);
|
||||||
let windsurf_api_key = is_windsurf.then(|| {
|
let windsurf_api_key = is_windsurf
|
||||||
coerce_admin_provider_oauth_import_str(
|
.then(|| {
|
||||||
object.get("api_key").or_else(|| object.get("apiKey")),
|
coerce_admin_provider_oauth_import_str(
|
||||||
)
|
object.get("api_key").or_else(|| object.get("apiKey")),
|
||||||
}).flatten();
|
)
|
||||||
let windsurf_token = is_windsurf.then(|| {
|
})
|
||||||
coerce_admin_provider_oauth_import_str(
|
.flatten();
|
||||||
object
|
let windsurf_token = is_windsurf
|
||||||
.get("token")
|
.then(|| {
|
||||||
.or_else(|| object.get("auth_token"))
|
coerce_admin_provider_oauth_import_str(
|
||||||
.or_else(|| object.get("authToken")),
|
object
|
||||||
)
|
.get("token")
|
||||||
}).flatten();
|
.or_else(|| object.get("auth_token"))
|
||||||
|
.or_else(|| object.get("authToken")),
|
||||||
|
)
|
||||||
|
})
|
||||||
|
.flatten();
|
||||||
let windsurf_password = is_windsurf
|
let windsurf_password = is_windsurf
|
||||||
.then(|| coerce_admin_provider_oauth_import_str(object.get("password")))
|
.then(|| coerce_admin_provider_oauth_import_str(object.get("password")))
|
||||||
.flatten();
|
.flatten();
|
||||||
let raw_credentials = if is_windsurf
|
let raw_credentials = if is_windsurf
|
||||||
&& (windsurf_api_key.is_some()
|
&& (windsurf_api_key.is_some()
|
||||||
|| windsurf_token.is_some()
|
|| windsurf_token.is_some()
|
||||||
|| windsurf_password.is_some())
|
|| windsurf_password.is_some())
|
||||||
{
|
{
|
||||||
Some(item.clone())
|
Some(item.clone())
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -25,10 +25,11 @@ pub use providers::{
|
|||||||
grok_supported_quota_windows_for_tier, normalize_chatgpt_web_image_quota_limit,
|
grok_supported_quota_windows_for_tier, normalize_chatgpt_web_image_quota_limit,
|
||||||
AntigravityProviderPoolAdapter, ChatGptWebProviderPoolAdapter, CodexProviderPoolAdapter,
|
AntigravityProviderPoolAdapter, ChatGptWebProviderPoolAdapter, CodexProviderPoolAdapter,
|
||||||
DefaultProviderPoolAdapter, GrokProviderPoolAdapter, KiroPoolQuotaAuthInput,
|
DefaultProviderPoolAdapter, GrokProviderPoolAdapter, KiroPoolQuotaAuthInput,
|
||||||
KiroProviderPoolAdapter, UnsupportedQuotaProviderPoolAdapter, ANTIGRAVITY_FETCH_AVAILABLE_MODELS_PATH,
|
KiroProviderPoolAdapter, UnsupportedQuotaProviderPoolAdapter,
|
||||||
CHATGPT_WEB_CONVERSATION_INIT_PATH, CHATGPT_WEB_DEFAULT_BASE_URL, CODEX_WHAM_USAGE_URL,
|
ANTIGRAVITY_FETCH_AVAILABLE_MODELS_PATH, CHATGPT_WEB_CONVERSATION_INIT_PATH,
|
||||||
KIRO_USAGE_LIMITS_PATH, KIRO_USAGE_SDK_VERSION, WINDSURF_MODEL_CONFIGS_PATH,
|
CHATGPT_WEB_DEFAULT_BASE_URL, CODEX_WHAM_USAGE_URL, KIRO_USAGE_LIMITS_PATH,
|
||||||
WINDSURF_RATE_LIMIT_PATH, WINDSURF_USER_STATUS_PATH,
|
KIRO_USAGE_SDK_VERSION, WINDSURF_MODEL_CONFIGS_PATH, WINDSURF_RATE_LIMIT_PATH,
|
||||||
|
WINDSURF_USER_STATUS_PATH,
|
||||||
};
|
};
|
||||||
pub use quota::{
|
pub use quota::{
|
||||||
provider_pool_key_account_quota_exhausted, provider_pool_key_scheduling_label,
|
provider_pool_key_account_quota_exhausted, provider_pool_key_scheduling_label,
|
||||||
@@ -90,7 +91,14 @@ mod tests {
|
|||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
service.provider_types_for_capability(ProviderPoolCapability::QuotaRefresh),
|
service.provider_types_for_capability(ProviderPoolCapability::QuotaRefresh),
|
||||||
["antigravity", "chatgpt_web", "codex", "grok", "kiro", "windsurf"]
|
[
|
||||||
|
"antigravity",
|
||||||
|
"chatgpt_web",
|
||||||
|
"codex",
|
||||||
|
"grok",
|
||||||
|
"kiro",
|
||||||
|
"windsurf"
|
||||||
|
]
|
||||||
);
|
);
|
||||||
assert!(service.supports_quota_refresh("codex"));
|
assert!(service.supports_quota_refresh("codex"));
|
||||||
assert!(service.supports_quota_refresh("antigravity"));
|
assert!(service.supports_quota_refresh("antigravity"));
|
||||||
@@ -369,7 +377,6 @@ mod tests {
|
|||||||
recent_refresh["providers"],
|
recent_refresh["providers"],
|
||||||
json!(["codex", "grok", "kiro", "windsurf"])
|
json!(["codex", "grok", "kiro", "windsurf"])
|
||||||
);
|
);
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|||||||
@@ -13,9 +13,8 @@ use crate::provider::{ProviderPoolAdapter, ProviderPoolMemberInput};
|
|||||||
use crate::providers::{
|
use crate::providers::{
|
||||||
AntigravityProviderPoolAdapter, ChatGptWebProviderPoolAdapter, CodexProviderPoolAdapter,
|
AntigravityProviderPoolAdapter, ChatGptWebProviderPoolAdapter, CodexProviderPoolAdapter,
|
||||||
DefaultProviderPoolAdapter, GrokProviderPoolAdapter, KiroProviderPoolAdapter,
|
DefaultProviderPoolAdapter, GrokProviderPoolAdapter, KiroProviderPoolAdapter,
|
||||||
WindsurfProviderPoolAdapter,
|
WindsurfProviderPoolAdapter, CLAUDE_CODE_PROVIDER_POOL_ADAPTER,
|
||||||
CLAUDE_CODE_PROVIDER_POOL_ADAPTER, GEMINI_CLI_PROVIDER_POOL_ADAPTER,
|
GEMINI_CLI_PROVIDER_POOL_ADAPTER, VERTEX_AI_PROVIDER_POOL_ADAPTER,
|
||||||
VERTEX_AI_PROVIDER_POOL_ADAPTER,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
|
|||||||
Reference in New Issue
Block a user