mirror of
https://github.com/openclaw/openclaw.git
synced 2026-06-24 21:19:41 +00:00
56 lines
1.8 KiB
TypeScript
56 lines
1.8 KiB
TypeScript
/**
|
|
* Agent run timeout resolver.
|
|
*
|
|
* Converts config and per-run overrides into timer-safe millisecond deadlines.
|
|
*/
|
|
import {
|
|
clampTimerTimeoutMs,
|
|
MAX_TIMER_TIMEOUT_MS,
|
|
} from "@openclaw/normalization-core/number-coercion";
|
|
import type { OpenClawConfig } from "../config/types.openclaw.js";
|
|
|
|
const DEFAULT_AGENT_TIMEOUT_SECONDS = 48 * 60 * 60;
|
|
|
|
const normalizeNumber = (value: unknown): number | undefined =>
|
|
typeof value === "number" && Number.isFinite(value) ? Math.floor(value) : undefined;
|
|
|
|
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: {
|
|
cfg?: OpenClawConfig;
|
|
overrideMs?: number | null;
|
|
overrideSeconds?: number | null;
|
|
minMs?: number;
|
|
}): number {
|
|
const minMs = Math.max(normalizeNumber(opts.minMs) ?? 1, 1);
|
|
const clampTimeoutMs = (valueMs: number) => clampTimerTimeoutMs(valueMs, minMs) ?? minMs;
|
|
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_TIMER_TIMEOUT_MS;
|
|
const overrideMs = normalizeNumber(opts.overrideMs);
|
|
if (overrideMs !== undefined) {
|
|
if (overrideMs === 0) {
|
|
return NO_TIMEOUT_MS;
|
|
}
|
|
if (overrideMs < 0) {
|
|
return defaultMs;
|
|
}
|
|
return clampTimeoutMs(overrideMs);
|
|
}
|
|
const overrideSeconds = normalizeNumber(opts.overrideSeconds);
|
|
if (overrideSeconds !== undefined) {
|
|
if (overrideSeconds === 0) {
|
|
return NO_TIMEOUT_MS;
|
|
}
|
|
if (overrideSeconds < 0) {
|
|
return defaultMs;
|
|
}
|
|
return clampTimeoutMs(overrideSeconds * 1000);
|
|
}
|
|
return defaultMs;
|
|
}
|