Merge pull request #387 from pikasTech/ymalops-round22

ymal-first Round 22: 删除 Codex sentinel runtime image 默认值
This commit is contained in:
Lyon
2026-06-14 15:59:09 +08:00
committed by GitHub
@@ -197,7 +197,7 @@ export function readCodexPoolSentinelConfig(value: unknown, defaults: CodexPoolS
enabled: readBoolean(valueAt(actions, "enabled"), `${sourcePath}.sentinel.actions.enabled`, defaults.actions.enabled),
},
schedule: readString(valueAt(value, "schedule"), `${sourcePath}.sentinel.schedule`, defaults.schedule),
image: readString(valueAt(value, "image"), `${sourcePath}.sentinel.image`, defaults.image),
image: readRequiredImage(valueAt(value, "image"), `${sourcePath}.sentinel.image`),
serviceAccountName: readRequiredDnsName(valueAt(value, "serviceAccountName"), `${sourcePath}.sentinel.serviceAccountName`),
configMapName: readRequiredDnsName(valueAt(value, "configMapName"), `${sourcePath}.sentinel.configMapName`),
credentialsSecretName: readRequiredDnsName(valueAt(value, "credentialsSecretName"), `${sourcePath}.sentinel.credentialsSecretName`),
@@ -227,7 +227,7 @@ export function readCodexPoolSentinelConfig(value: unknown, defaults: CodexPoolS
paths: readPathList(valueAt(gatewayFailureMonitor, "paths"), `${sourcePath}.sentinel.gatewayFailureMonitor.paths`, defaults.gatewayFailureMonitor.paths),
},
sdk: {
openaiPythonVersion: readOpenAiPythonVersion(valueAt(sdk, "openaiPythonVersion"), `${sourcePath}.sentinel.sdk.openaiPythonVersion`, defaults.sdk.openaiPythonVersion),
openaiPythonVersion: readRequiredOpenAiPythonVersion(valueAt(sdk, "openaiPythonVersion"), `${sourcePath}.sentinel.sdk.openaiPythonVersion`),
},
cadence: {
successInitialIntervalMinutes: readInt(valueAt(cadence, "successInitialIntervalMinutes"), `${sourcePath}.sentinel.cadence.successInitialIntervalMinutes`, defaults.cadence.successInitialIntervalMinutes, 1, 1440),
@@ -2123,6 +2123,18 @@ function readRequiredEndpoint(value: unknown, key: string): "responses" {
return text;
}
function readRequiredImage(value: unknown, key: string): string {
const text = readRequiredString(value, key);
if (!/^[A-Za-z0-9._:/@-]+$/u.test(text)) throw new Error(`${key} has an unsupported image format`);
return text;
}
function readRequiredOpenAiPythonVersion(value: unknown, key: string): string {
const text = readRequiredString(value, key);
if (!/^[0-9]+[.][0-9]+[.][0-9]+$/u.test(text)) throw new Error(`${key} must be a pinned semver version like 2.41.1`);
return text;
}
function readRequiredString(value: unknown, key: string): string {
if (value === undefined || value === null) throw new Error(`${key} is required`);
if (typeof value !== "string" || value.trim().length === 0) throw new Error(`${key} must be a non-empty string`);
@@ -2155,12 +2167,6 @@ function readPathList(value: unknown, key: string, fallback: string[]): string[]
return [...new Set(paths)];
}
function readOpenAiPythonVersion(value: unknown, key: string, fallback: string): string {
const text = readString(value, key, fallback);
if (!/^[0-9]+[.][0-9]+[.][0-9]+$/u.test(text)) throw new Error(`${key} must be a pinned semver version like 2.41.1`);
return text;
}
function readInt(value: unknown, key: string, fallback: number, min: number, max: number): number {
if (value === undefined || value === null) return fallback;
const parsed = typeof value === "number" ? value : typeof value === "string" && value.trim() ? Number(value) : Number.NaN;