feat(gateway): add Codex Live and OpenAI Realtime

Implement preflighted Live/Realtime WebSocket transports, protocol-aware authentication, usage auditing, UI filtering, and legacy Codex permission migration.
This commit is contained in:
ZheFox
2026-08-21 04:27:34 +08:00
parent fe38dcd294
commit 2c89202001
105 changed files with 7553 additions and 947 deletions
@@ -835,6 +835,8 @@ fn resolve_same_format_standard_direct_auth(
) -> Option<(String, String)> {
if aether_ai_formats::api_format_alias_matches(provider_api_format, "openai:embedding")
|| aether_ai_formats::api_format_alias_matches(provider_api_format, "openai:search")
|| aether_ai_formats::api_format_alias_matches(provider_api_format, "openai:realtime")
|| aether_ai_formats::api_format_alias_matches(provider_api_format, "codex:live")
{
resolve_local_openai_bearer_auth(transport)
} else {
@@ -1431,6 +1433,56 @@ mod tests {
);
}
#[test]
fn resolves_openai_realtime_direct_auth_with_bearer_header() {
let mut transport = sample_transport("openai");
transport.endpoint.api_format = "openai:realtime".to_string();
transport.key.auth_type = "api_key".to_string();
let behavior = classify_same_format_provider_request_behavior(
&transport,
SameFormatProviderRequestBehaviorParams {
require_streaming: true,
provider_api_format: "openai:realtime",
report_kind: "openai_realtime_websocket_success",
},
);
assert_eq!(
resolve_same_format_provider_direct_auth(
&behavior,
&transport,
SameFormatProviderFamily::Standard,
"openai:realtime",
),
Some(("authorization".to_string(), "Bearer secret".to_string()))
);
}
#[test]
fn resolves_codex_live_direct_auth_with_bearer_header() {
let mut transport = sample_transport("openai");
transport.endpoint.api_format = "codex:live".to_string();
transport.key.auth_type = "api_key".to_string();
let behavior = classify_same_format_provider_request_behavior(
&transport,
SameFormatProviderRequestBehaviorParams {
require_streaming: true,
provider_api_format: "codex:live",
report_kind: "codex_live_websocket_success",
},
);
assert_eq!(
resolve_same_format_provider_direct_auth(
&behavior,
&transport,
SameFormatProviderFamily::Standard,
"codex:live",
),
Some(("authorization".to_string(), "Bearer secret".to_string()))
);
}
#[test]
fn keeps_claude_same_format_api_key_on_x_api_key_header() {
let mut transport = sample_transport("custom");