Files
pikasTech-unidesk/scripts/platform-infra-sub2api-codex-local-config-contract-test.ts
T
2026-06-10 07:49:47 +00:00

77 lines
3.9 KiB
TypeScript

import { renderCaddySiteBlock, renderCodexLocalConsumerToml } from "./src/platform-infra-sub2api-codex";
function assertCondition(condition: unknown, message: string, detail: unknown = {}): void {
if (!condition) throw new Error(`${message}: ${JSON.stringify(detail)}`);
}
const baseOptions = {
providerName: "OpenAI",
baseUrl: "https://sub2api.74-48-78-17.nip.io/",
wireApi: "responses",
supportsWebSockets: true,
responsesWebSocketsV2: true,
};
const existing = [
'model_provider = "Legacy"',
"",
"[model_providers.OpenAI]",
'name = "OpenAI"',
'base_url = "https://old.example"',
'wire_api = "responses"',
"requires_openai_auth = false",
"supports_websockets = false",
'env_key = "OLD_OPENAI_API_KEY"',
'extra_setting = "kept"',
"",
"[features]",
"goals = true",
"responses_websockets_v2 = false",
"",
].join("\n");
const updated = renderCodexLocalConsumerToml(existing, baseOptions);
assertCondition(updated.includes('model_provider = "OpenAI"'), "model_provider must point at the configured provider", updated);
assertCondition(updated.includes('base_url = "https://sub2api.74-48-78-17.nip.io/"'), "provider base_url must use the fixed public Sub2API consumer endpoint", updated);
assertCondition(updated.includes("requires_openai_auth = true"), "provider must require OpenAI auth", updated);
assertCondition(updated.includes("supports_websockets = true"), "provider must enable WebSocket transport", updated);
assertCondition(updated.includes("responses_websockets_v2 = true"), "features must enable Responses WebSocket v2", updated);
assertCondition(updated.includes("goals = true"), "existing feature flags must be preserved", updated);
assertCondition(updated.includes('extra_setting = "kept"'), "unknown provider settings must be preserved", updated);
assertCondition(!updated.includes("env_key"), "stale provider env_key must be removed", updated);
assertCondition(updated.endsWith("\n"), "rendered TOML must end with newline", updated);
const fresh = renderCodexLocalConsumerToml("", baseOptions);
assertCondition(fresh.includes("[model_providers.OpenAI]"), "fresh TOML must create the provider section", fresh);
assertCondition(fresh.includes("[features]"), "fresh TOML must create the features section", fresh);
assertCondition(fresh.includes("supports_websockets = true"), "fresh TOML must enable WebSocket transport", fresh);
assertCondition(fresh.includes("responses_websockets_v2 = true"), "fresh TOML must enable Responses WebSocket v2", fresh);
const disabled = renderCodexLocalConsumerToml(existing, {
...baseOptions,
supportsWebSockets: false,
responsesWebSocketsV2: false,
});
assertCondition(disabled.includes("supports_websockets = false"), "disabled localCodex policy must render provider WebSocket transport off", disabled);
assertCondition(disabled.includes("responses_websockets_v2 = false"), "disabled localCodex policy must render Responses WebSocket v2 off", disabled);
const caddyBlock = renderCaddySiteBlock("sub2api.example.test", "http://127.0.0.1:21880", 180);
assertCondition(caddyBlock.includes("sub2api.example.test {"), "Caddy site block must use the configured domain", caddyBlock);
assertCondition(caddyBlock.includes("reverse_proxy 127.0.0.1:21880"), "Caddy site block must use the configured local upstream", caddyBlock);
assertCondition(caddyBlock.includes("response_header_timeout 180s"), "Caddy response header timeout must allow long Codex compact requests", caddyBlock);
assertCondition(!caddyBlock.includes("response_header_timeout 30s"), "Caddy site block must not retain the old 30s compact timeout", caddyBlock);
console.log(JSON.stringify({
ok: true,
checks: [
"existing Codex TOML is upgraded to the Sub2API WSv2 consumer settings",
"fresh Codex TOML creates provider and feature sections with WSv2 enabled",
"disabled localCodex WebSocket policy renders both consumer flags off",
"Caddy site block uses the YAML-controlled long response-header timeout",
],
}));