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


AI-assisted analysis of diegosouzapw/OmniRoute@a179ffed5b (2026-08-25). Data as JSON: /api/errors/dde922579aca9d09. Report an issue: GitHub.