feat: add fixwikihub codex pool profile

This commit is contained in:
Codex
2026-06-09 05:05:28 +00:00
parent d41f9a0de1
commit ac14d8e7c5
4 changed files with 44 additions and 6 deletions
+29 -5
View File
@@ -44,11 +44,14 @@ interface CodexProfile {
envKey: string | null;
apiKey: string | null;
apiKeySource: "auth-json" | "env" | null;
openaiResponsesWebSocketsV2Mode: OpenAIResponsesWebSocketsV2Mode | null;
authOpenAIKeyShape: string;
ok: boolean;
error: string | null;
}
type OpenAIResponsesWebSocketsV2Mode = "off" | "ctx_pool" | "passthrough";
interface CodexPoolConfig {
groupName: string;
apiKeyName: string;
@@ -67,6 +70,7 @@ interface CodexPoolProfileConfig {
authFile: string;
fallbackConfigFile: string | null;
fallbackAuthFile: string | null;
openaiResponsesWebSocketsV2Mode: OpenAIResponsesWebSocketsV2Mode | null;
}
interface CodexPoolPublicExposureConfig {
@@ -232,6 +236,7 @@ async function codexPoolSync(config: UniDeskConfig, options: SyncOptions): Promi
apiKey: profile.apiKey,
apiKeySource: profile.apiKeySource,
apiKeyFingerprint: fingerprint(profile.apiKey ?? ""),
openaiResponsesWebSocketsV2Mode: profile.openaiResponsesWebSocketsV2Mode,
})),
};
const result = await capture(config, g14K3sRoute, ["script"], syncScript(payload, pool));
@@ -412,6 +417,7 @@ function collectCodexProfiles(): CodexProfile[] {
envKey: null,
apiKey: null,
apiKeySource: null,
openaiResponsesWebSocketsV2Mode: entry.openaiResponsesWebSocketsV2Mode,
authOpenAIKeyShape: existsSync(authPath) ? "unknown" : "missing",
ok: false,
error: null,
@@ -474,6 +480,7 @@ function discoverCodexProfileConfigs(codexDir: string): CodexPoolProfileConfig[]
authFile: suffix === "" ? "auth.json" : `auth.json.${suffix}`,
fallbackConfigFile: null,
fallbackAuthFile: null,
openaiResponsesWebSocketsV2Mode: null,
};
});
}
@@ -568,6 +575,7 @@ function readProfileConfig(value: unknown, defaults: CodexPoolProfileConfig[]):
const fallbackAuthFile = stringValue(entry.fallbackAuthFile);
if (fallbackConfigFile !== null) validateCodexFileName(fallbackConfigFile, `profiles.entries[${index}].fallbackConfigFile`);
if (fallbackAuthFile !== null) validateCodexFileName(fallbackAuthFile, `profiles.entries[${index}].fallbackAuthFile`);
const openaiResponsesWebSocketsV2Mode = readOpenAIResponsesWebSocketsV2Mode(entry.openaiResponsesWebSocketsV2Mode, `profiles.entries[${index}].openaiResponsesWebSocketsV2Mode`);
return {
profile,
accountName,
@@ -575,10 +583,19 @@ function readProfileConfig(value: unknown, defaults: CodexPoolProfileConfig[]):
authFile,
fallbackConfigFile,
fallbackAuthFile,
openaiResponsesWebSocketsV2Mode,
};
});
}
function readOpenAIResponsesWebSocketsV2Mode(value: unknown, key: string): OpenAIResponsesWebSocketsV2Mode | null {
if (value === undefined || value === null) return null;
const text = stringValue(value);
if (text === null) throw new Error(`${codexPoolConfigPath}.${key} must be a string`);
if (text === "off" || text === "ctx_pool" || text === "passthrough") return text;
throw new Error(`${codexPoolConfigPath}.${key} must be one of off, ctx_pool, passthrough`);
}
function readPublicExposureConfig(value: unknown, defaults: CodexPoolPublicExposureConfig): CodexPoolPublicExposureConfig {
if (!isRecord(value)) return defaults;
const masterFrpsValue = isRecord(value.masterFrps) ? value.masterFrps : {};
@@ -678,6 +695,7 @@ function redactProfile(profile: CodexProfile): Record<string, unknown> {
model: profile.model,
envKey: profile.envKey,
apiKeySource: profile.apiKeySource,
openaiResponsesWebSocketsV2Mode: profile.openaiResponsesWebSocketsV2Mode,
apiKeyPresent: profile.apiKey !== null && profile.apiKey.length > 0,
apiKeyBytes: profile.apiKey === null ? 0 : Buffer.byteLength(profile.apiKey, "utf8"),
apiKeyFingerprint: profile.apiKey === null ? null : fingerprint(profile.apiKey),
@@ -1423,6 +1441,15 @@ def list_accounts(token):
return extract_items(data)
def account_payload(profile, group_id):
extra = {
"openai_responses_mode": "force_responses",
"unidesk_codex_profile": profile["profile"],
"unidesk_managed": True,
}
ws_mode = profile.get("openaiResponsesWebSocketsV2Mode")
if ws_mode:
extra["openai_apikey_responses_websockets_v2_mode"] = ws_mode
extra["openai_apikey_responses_websockets_v2_enabled"] = ws_mode != "off"
return {
"name": profile["accountName"],
"notes": f"UniDesk-managed Codex profile {profile['profile']} from {profile['configFile']} and {profile['authFile']}; secret source={profile['apiKeySource']}; fingerprint={profile['apiKeyFingerprint']}.",
@@ -1432,11 +1459,7 @@ def account_payload(profile, group_id):
"api_key": profile["apiKey"],
"base_url": profile["baseUrl"],
},
"extra": {
"openai_responses_mode": "force_responses",
"unidesk_codex_profile": profile["profile"],
"unidesk_managed": True,
},
"extra": extra,
"concurrency": 1,
"priority": 1,
"rate_multiplier": 1,
@@ -1469,6 +1492,7 @@ def ensure_accounts(token, profiles, group_id):
"baseUrl": profile["baseUrl"],
"apiKeySource": profile["apiKeySource"],
"apiKeyFingerprint": profile["apiKeyFingerprint"],
"openaiResponsesWebSocketsV2Mode": profile.get("openaiResponsesWebSocketsV2Mode"),
"valuesPrinted": False,
})
return results