fix: sync codex field (#6018)

This commit is contained in:
Seefs
2026-07-11 11:04:15 +08:00
committed by GitHub
parent 00f1cbb6df
commit dad57a6bb8
9 changed files with 162 additions and 14 deletions
@@ -27,12 +27,39 @@ const buildPassHeadersTemplate = (headers) => ({
],
});
const buildCodexPassHeadersTemplate = () => ({
operations: [
{
mode: 'pass_headers',
value: [...CODEX_CLI_HEADER_PASSTHROUGH_HEADERS],
keep_origin: true,
},
],
});
// Keep in sync with upstream Codex request headers:
// https://github.com/openai/codex/commit/7c7b4861d88960f7e3bd5b7f30f8351be666dd84
// https://github.com/openai/codex/commit/14df0e8833aad0d6d78287954b61ffac67af936c
// https://github.com/openai/codex/commit/ebdd8795e924a8149b616e46ca2ed7848c207a4b
export const CODEX_CLI_HEADER_PASSTHROUGH_HEADERS = [
'Originator',
'Session_id',
'Thread_id',
'Session-Id',
'Thread-Id',
'X-Client-Request-Id',
'User-Agent',
'X-Codex-Beta-Features',
'X-Codex-Turn-State',
'X-Codex-Turn-Metadata',
'X-Codex-Window-Id',
'X-Codex-Parent-Thread-Id',
// 'X-Codex-Installation-Id',
'X-OpenAI-Subagent',
'X-OpenAI-Memgen-Request',
// 'X-OAI-Attestation',
'X-ResponsesAPI-Include-Timing-Metrics',
'X-OpenAI-Internal-Codex-Responses-Lite',
];
export const CLAUDE_CLI_HEADER_PASSTHROUGH_HEADERS = [
@@ -51,9 +78,8 @@ export const CLAUDE_CLI_HEADER_PASSTHROUGH_HEADERS = [
'Anthropic-Version',
];
export const CODEX_CLI_HEADER_PASSTHROUGH_TEMPLATE = buildPassHeadersTemplate(
CODEX_CLI_HEADER_PASSTHROUGH_HEADERS,
);
export const CODEX_CLI_HEADER_PASSTHROUGH_TEMPLATE =
buildCodexPassHeadersTemplate();
export const CLAUDE_CLI_HEADER_PASSTHROUGH_TEMPLATE = buildPassHeadersTemplate(
CLAUDE_CLI_HEADER_PASSTHROUGH_HEADERS,
@@ -65,7 +91,7 @@ export const CHANNEL_AFFINITY_RULE_TEMPLATES = {
model_regex: ['^gpt-.*$'],
path_regex: ['/v1/responses'],
key_sources: [{ type: 'gjson', path: 'prompt_cache_key' }],
param_override_template: CODEX_CLI_HEADER_PASSTHROUGH_TEMPLATE,
param_override_template: buildCodexPassHeadersTemplate(),
value_regex: '',
ttl_seconds: 0,
skip_retry_on_failure: true,
@@ -291,12 +291,29 @@ const GEMINI_IMAGE_4K_TEMPLATE = {
],
}
// Keep in sync with upstream Codex request headers:
// https://github.com/openai/codex/commit/7c7b4861d88960f7e3bd5b7f30f8351be666dd84
// https://github.com/openai/codex/commit/14df0e8833aad0d6d78287954b61ffac67af936c
// https://github.com/openai/codex/commit/ebdd8795e924a8149b616e46ca2ed7848c207a4b
const CODEX_CLI_HEADER_PASSTHROUGH_HEADERS = [
'Originator',
'Session_id',
'Thread_id',
'Session-Id',
'Thread-Id',
'X-Client-Request-Id',
'User-Agent',
'X-Codex-Beta-Features',
'X-Codex-Turn-State',
'X-Codex-Turn-Metadata',
'X-Codex-Window-Id',
'X-Codex-Parent-Thread-Id',
// 'X-Codex-Installation-Id',
'X-OpenAI-Subagent',
'X-OpenAI-Memgen-Request',
// 'X-OAI-Attestation',
'X-ResponsesAPI-Include-Timing-Metrics',
'X-OpenAI-Internal-Codex-Responses-Lite',
]
const CLAUDE_CLI_HEADER_PASSTHROUGH_HEADERS = [
@@ -321,9 +338,15 @@ const buildPassHeadersTemplate = (headers: string[]) => ({
],
})
const CODEX_CLI_HEADER_PASSTHROUGH_TEMPLATE = buildPassHeadersTemplate(
CODEX_CLI_HEADER_PASSTHROUGH_HEADERS
)
const CODEX_CLI_HEADER_PASSTHROUGH_TEMPLATE = {
operations: [
{
mode: 'pass_headers',
value: [...CODEX_CLI_HEADER_PASSTHROUGH_HEADERS],
keep_origin: true,
},
],
}
const CLAUDE_CLI_HEADER_PASSTHROUGH_TEMPLATE = buildPassHeadersTemplate(
CLAUDE_CLI_HEADER_PASSTHROUGH_HEADERS
)
@@ -941,6 +964,7 @@ const validateOperations = (
if (headers.length === 0)
return t('Rule {{line}} pass_headers format is invalid', { line })
}
}
return ''
}
@@ -18,12 +18,29 @@ For commercial licensing, please contact support@quantumnous.com
*/
import type { AffinityRule } from './types'
// Keep in sync with upstream Codex request headers:
// https://github.com/openai/codex/commit/7c7b4861d88960f7e3bd5b7f30f8351be666dd84
// https://github.com/openai/codex/commit/14df0e8833aad0d6d78287954b61ffac67af936c
// https://github.com/openai/codex/commit/ebdd8795e924a8149b616e46ca2ed7848c207a4b
const CODEX_CLI_HEADER_PASSTHROUGH_HEADERS = [
'Originator',
'Session_id',
'Thread_id',
'Session-Id',
'Thread-Id',
'X-Client-Request-Id',
'User-Agent',
'X-Codex-Beta-Features',
'X-Codex-Turn-State',
'X-Codex-Turn-Metadata',
'X-Codex-Window-Id',
'X-Codex-Parent-Thread-Id',
// 'X-Codex-Installation-Id',
'X-OpenAI-Subagent',
'X-OpenAI-Memgen-Request',
// 'X-OAI-Attestation',
'X-ResponsesAPI-Include-Timing-Metrics',
'X-OpenAI-Internal-Codex-Responses-Lite',
]
const CLAUDE_CLI_HEADER_PASSTHROUGH_HEADERS = [
@@ -54,6 +71,18 @@ function buildPassHeadersTemplate(headers: string[]) {
}
}
function buildCodexPassHeadersTemplate() {
return {
operations: [
{
mode: 'pass_headers',
value: [...CODEX_CLI_HEADER_PASSTHROUGH_HEADERS],
keep_origin: true,
},
],
}
}
export type RuleTemplate = Omit<AffinityRule, 'id'>
export const RULE_TEMPLATES: Record<string, RuleTemplate> = {
@@ -62,9 +91,7 @@ export const RULE_TEMPLATES: Record<string, RuleTemplate> = {
model_regex: ['^gpt-.*$'],
path_regex: ['/v1/responses'],
key_sources: [{ type: 'gjson', path: 'prompt_cache_key' }],
param_override_template: buildPassHeadersTemplate(
CODEX_CLI_HEADER_PASSTHROUGH_HEADERS
),
param_override_template: buildCodexPassHeadersTemplate(),
value_regex: '',
ttl_seconds: 0,
skip_retry_on_failure: true,