fix(codex): cap app-server idle timers

This commit is contained in:
Peter Steinberger
2026-05-30 01:31:57 -04:00
parent c536bd6af1
commit 62abfd3dcb
2 changed files with 25 additions and 4 deletions

View File

@@ -1,3 +1,4 @@
import { MAX_TIMER_TIMEOUT_MS } from "openclaw/plugin-sdk/number-runtime";
import { afterEach, describe, expect, it, vi } from "vitest";
import {
CODEX_APP_SERVER_STARTUP_TIMEOUT_FLOOR_MS,
@@ -28,6 +29,15 @@ describe("Codex app-server attempt timeouts", () => {
CODEX_APP_SERVER_STARTUP_TIMEOUT_FLOOR_MS,
);
expect(resolveCodexStartupTimeoutMs({ timeoutMs: 500, timeoutFloorMs: Number.NaN })).toBe(500);
expect(resolveCodexStartupTimeoutMs({ timeoutMs: Number.MAX_SAFE_INTEGER })).toBe(
MAX_TIMER_TIMEOUT_MS,
);
expect(
resolveCodexStartupTimeoutMs({
timeoutMs: Number.MAX_SAFE_INTEGER,
timeoutFloorMs: Number.MAX_SAFE_INTEGER,
}),
).toBe(MAX_TIMER_TIMEOUT_MS);
expect(
resolveCodexStartupTimeoutMs({
timeoutMs: Number.NaN,
@@ -50,6 +60,9 @@ describe("Codex app-server attempt timeouts", () => {
);
expect(resolveCodexTurnCompletionIdleTimeoutMs(2.9)).toBe(2);
expect(resolveCodexTurnCompletionIdleTimeoutMs(0)).toBe(1);
expect(resolveCodexTurnCompletionIdleTimeoutMs(Number.MAX_SAFE_INTEGER)).toBe(
MAX_TIMER_TIMEOUT_MS,
);
expect(resolveCodexTurnAssistantCompletionIdleTimeoutMs(undefined)).toBe(
CODEX_TURN_ASSISTANT_COMPLETION_IDLE_TIMEOUT_MS,
@@ -77,6 +90,12 @@ describe("Codex app-server attempt timeouts", () => {
);
expect(resolveCodexPostToolRawAssistantCompletionIdleTimeoutMs(7.9, 123)).toBe(7);
expect(resolveCodexPostToolRawAssistantCompletionIdleTimeoutMs(0, 123)).toBe(1);
expect(
resolveCodexPostToolRawAssistantCompletionIdleTimeoutMs(
Number.MAX_SAFE_INTEGER,
Number.MAX_SAFE_INTEGER,
),
).toBe(MAX_TIMER_TIMEOUT_MS);
expect(resolveCodexTurnTerminalIdleTimeoutMs(undefined)).toBe(
CODEX_TURN_TERMINAL_IDLE_TIMEOUT_MS,
@@ -86,6 +105,9 @@ describe("Codex app-server attempt timeouts", () => {
);
expect(resolveCodexTurnTerminalIdleTimeoutMs(3.7)).toBe(3);
expect(resolveCodexTurnTerminalIdleTimeoutMs(-1)).toBe(1);
expect(resolveCodexTurnTerminalIdleTimeoutMs(Number.MAX_SAFE_INTEGER)).toBe(
MAX_TIMER_TIMEOUT_MS,
);
});
it("returns the startup operation result before timeout", async () => {

View File

@@ -1,4 +1,4 @@
import { parseFiniteNumber } from "openclaw/plugin-sdk/number-runtime";
import { resolveTimerTimeoutMs } from "openclaw/plugin-sdk/number-runtime";
export const CODEX_APP_SERVER_STARTUP_TIMEOUT_FLOOR_MS = 100;
export const CODEX_TURN_COMPLETION_IDLE_TIMEOUT_MS = 60_000;
@@ -11,9 +11,8 @@ export const CODEX_POST_REASONING_SOURCE_REPLY_IDLE_TIMEOUT_MS = 5 * 60_000;
export const CODEX_TURN_TERMINAL_IDLE_TIMEOUT_MS = 30 * 60_000;
function resolvePositiveIntegerTimeoutMs(value: number | undefined, fallbackMs: number): number {
const fallback = parseFiniteNumber(fallbackMs) ?? 1;
const candidate = parseFiniteNumber(value) ?? fallback;
return Math.max(1, Math.floor(candidate));
const fallback = resolveTimerTimeoutMs(fallbackMs, 1);
return resolveTimerTimeoutMs(value, fallback);
}
export async function withCodexStartupTimeout<T>(params: {