Files
openclaw/src/agents/timeout.ts

49 lines
1.6 KiB
TypeScript
Raw Normal View History

2026-01-30 03:15:10 +01:00
import type { OpenClawConfig } from "../config/config.js";
const DEFAULT_AGENT_TIMEOUT_SECONDS = 600;
const MAX_SAFE_TIMEOUT_MS = 2_147_000_000;
const normalizeNumber = (value: unknown): number | undefined =>
typeof value === "number" && Number.isFinite(value) ? Math.floor(value) : undefined;
2026-01-30 03:15:10 +01:00
export function resolveAgentTimeoutSeconds(cfg?: OpenClawConfig): number {
const raw = normalizeNumber(cfg?.agents?.defaults?.timeoutSeconds);
const seconds = raw ?? DEFAULT_AGENT_TIMEOUT_SECONDS;
return Math.max(seconds, 1);
}
export function resolveAgentTimeoutMs(opts: {
2026-01-30 03:15:10 +01:00
cfg?: OpenClawConfig;
overrideMs?: number | null;
overrideSeconds?: number | null;
minMs?: number;
}): number {
const minMs = Math.max(normalizeNumber(opts.minMs) ?? 1, 1);
const clampTimeoutMs = (valueMs: number) =>
Math.min(Math.max(valueMs, minMs), MAX_SAFE_TIMEOUT_MS);
const defaultMs = clampTimeoutMs(resolveAgentTimeoutSeconds(opts.cfg) * 1000);
// Use the maximum timer-safe timeout to represent "no timeout" when explicitly set to 0.
const NO_TIMEOUT_MS = MAX_SAFE_TIMEOUT_MS;
const overrideMs = normalizeNumber(opts.overrideMs);
if (overrideMs !== undefined) {
2026-02-02 02:06:14 -08:00
if (overrideMs === 0) {
return NO_TIMEOUT_MS;
}
if (overrideMs < 0) {
return defaultMs;
}
return clampTimeoutMs(overrideMs);
}
const overrideSeconds = normalizeNumber(opts.overrideSeconds);
if (overrideSeconds !== undefined) {
2026-02-02 02:06:14 -08:00
if (overrideSeconds === 0) {
return NO_TIMEOUT_MS;
}
if (overrideSeconds < 0) {
return defaultMs;
}
return clampTimeoutMs(overrideSeconds * 1000);
}
return defaultMs;
}