fix(types): validate default executor pool config (#9849)

Co-authored-by: backryun <bakryun0718@proton.me>
This commit is contained in:
Diego Rodrigues de Sa e Souza
2026-08-09 09:51:37 -03:00
committed by GitHub
parent a2eab58dde
commit 97a1355037
3 changed files with 66 additions and 3 deletions

View File

@@ -61,12 +61,11 @@ import {
} from "@/lib/providers/validation/urlHelpers";
import { forwardOpencodeClientHeaders } from "../utils/opencodeHeaders.ts";
import { resolveZaiUrl } from "./default/zaiFormatOverride.ts";
import { normalizePoolConfig } from "./default/poolConfig.ts";
import { acquireNvidiaConcurrencySlot } from "./default/nvidiaConcurrencyGate.ts";
import { resolveAlibabaProviderBaseUrl } from "@/shared/constants/alibabaProviderRegions";
import { usesCcWireImage } from "../services/ccWireImageBuiltins.ts";
import type { PoolConfig } from "../services/sessionPool/types.ts";
const NVIDIA_TOOL_CALL_ID_PATTERN = /^[A-Za-z0-9]{9}$/;
function normalizeNvidiaToolCallId(id: unknown): unknown {
@@ -146,7 +145,7 @@ export class DefaultExecutor extends BaseExecutor {
super(provider, PROVIDERS[provider] || PROVIDERS.openai);
const registryEntry = getRegistryEntry(provider);
if (registryEntry?.poolConfig) {
this.poolConfig = registryEntry.poolConfig as PoolConfig;
this.poolConfig = normalizePoolConfig(registryEntry.poolConfig) ?? undefined;
}
}

View File

@@ -0,0 +1,33 @@
import type { PoolConfig } from "../../services/sessionPool/types.ts";
export function normalizePoolConfig(value: Record<string, unknown>): PoolConfig | null {
const {
minSessions,
maxSessions,
cooldownBase,
cooldownMax,
cooldownJitter,
requestTimeout,
requestJitter,
} = value;
if (
typeof minSessions !== "number" ||
typeof maxSessions !== "number" ||
typeof cooldownBase !== "number" ||
typeof cooldownMax !== "number" ||
typeof cooldownJitter !== "number" ||
typeof requestTimeout !== "number" ||
typeof requestJitter !== "number"
) {
return null;
}
return {
minSessions,
maxSessions,
cooldownBase,
cooldownMax,
cooldownJitter,
requestTimeout,
requestJitter,
};
}

View File

@@ -0,0 +1,31 @@
import test from "node:test";
import assert from "node:assert/strict";
import { normalizePoolConfig } from "../../open-sse/executors/default/poolConfig.ts";
test("normalizePoolConfig preserves a complete registry pool contract", () => {
assert.deepEqual(
normalizePoolConfig({
minSessions: 1,
maxSessions: 3,
cooldownBase: 2000,
cooldownMax: 5000,
cooldownJitter: 100,
requestTimeout: 30000,
requestJitter: 50,
}),
{
minSessions: 1,
maxSessions: 3,
cooldownBase: 2000,
cooldownMax: 5000,
cooldownJitter: 100,
requestTimeout: 30000,
requestJitter: 50,
}
);
});
test("normalizePoolConfig rejects incomplete registry values", () => {
assert.equal(normalizePoolConfig({ minSessions: 1, maxSessions: 3 }), null);
});