diegosouzapw/OmniRoute · error
COMBO_TIMEOUT
COMBO_TIMEOUT
Error message
Combo global timeout (${loopSafetyMs}ms) without a terminal response What it means
Error "Combo global timeout (${loopSafetyMs}ms) without a terminal response" thrown in diegosouzapw/OmniRoute.
Source
Thrown at open-sse/services/combo.ts:1159
// actionable 504 instead of dying silently. `comboExpired` is flipped so the
// target loop stops launching new work; the existing comboExpired branch
// returns the aggregated 504.
const loopSafetyMs = comboTimeoutMs > 0 ? comboTimeoutMs : COMBO_LOOP_SAFETY_TIMEOUT_MS;
let loopSafetyFired = false;
let loopSafetyTimer: ReturnType<typeof setTimeout> | null = null;
const loopSafetyPromise = new Promise<Response>((resolve) => {
loopSafetyTimer = setTimeout(() => {
loopSafetyFired = true;
log.warn(
"COMBO",
`Combo loop safety timeout (${loopSafetyMs}ms) reached without a terminal response — force-terminating`
);
resolve(
errorResponseWithComboDiagnostics(
504,
`Combo global timeout (${loopSafetyMs}ms) without a terminal response`,
buildComboDiag("combo_timeout"),
{ code: "COMBO_TIMEOUT", type: "server_error" }
)
);
}, loopSafetyMs);
loopSafetyTimer.unref?.();
});
const runningTasks = new Set<Promise<void>>();
let anySuccess = false;
// #10681: steps already recorded as dispatched (so per-target retries do not
// duplicate the decision).
const dispatchedTargets = new Set<string>();
// G1: flip comboExpired as soon as the safety timer fires so the next loop
// iteration breaks instead of launching more targets after the budget, and
// abort every in-flight target so a hung upstream actually gets cancelled
// (not just "response stops").
const markLoopExpiredIfSafetyFired = () => {
if (loopSafetyFired) {
comboExpired = true;
for (const [, ac] of abortControllers.entries()) ac.abort();View on GitHub (pinned to a179ffed5b)
When it happens
Trigger: Thrown at open-sse/services/combo.ts:1159 when the library encounters an invalid state.
Common situations: See trigger scenarios.
Understand the failure class
- Timeouts: ETIMEDOUT, deadlines, and hung requests — what actually expires when a request times out.
AI-assisted analysis of diegosouzapw/OmniRoute@a179ffed5b (2026-08-25).
Data as JSON: /api/errors/dde922579aca9d09.
Report an issue: GitHub.