diegosouzapw/OmniRoute · error · Error

Existing tunnel-client failed integrity validation

Error message

Existing tunnel-client failed integrity validation

What it means

Error "Existing tunnel-client failed integrity validation" thrown in diegosouzapw/OmniRoute.

Source

Thrown at open-sse/executors/chatgpt-web-codex/tunnelClient.ts:213

  if (!ownsSupervisorLease) return;
  const status = tunnelSupervisorLeaseStatus();
  if (status.ownedByCurrentProcess) rmSync(tunnelClientPaths().supervisorLease, { force: true });
  ownsSupervisorLease = false;
}

export async function ensureTunnelClientInstalled(): Promise<string> {
  const paths = tunnelClientPaths();
  if (existsSync(paths.binary) && existsSync(paths.manifest)) {
    const manifest = JSON.parse(readFileSync(paths.manifest, "utf8")) as Partial<InstallManifest>;
    const actual = sha256(readFileSync(paths.binary));
    if (
      manifest.version === 1 &&
      manifest.tunnelClientVersion === CHATGPT_WEB_CODEX_TUNNEL_VERSION &&
      manifest.binarySha256 === actual
    ) {
      return paths.binary;
    }
    throw new Error("Existing tunnel-client failed integrity validation");
  }

  const asset = tunnelPlatformAsset();
  const [archive, checksumFile] = await Promise.all([
    download(`${RELEASE_BASE}/${asset}`),
    download(`${RELEASE_BASE}/SHA256SUMS.txt`),
  ]);
  const expected = parseTunnelChecksum(new TextDecoder().decode(checksumFile), asset);
  const archiveSha256 = sha256(archive);
  if (archiveSha256 !== expected) throw new Error(`Checksum mismatch for ${asset}`);

  const files = unzipSync(archive);
  const executableName = process.platform === "win32" ? "tunnel-client.exe" : "tunnel-client";
  const entry = Object.entries(files).find(([name]) => basename(name) === executableName);
  if (!entry) throw new Error(`${asset} does not contain ${executableName}`);
  atomicWriteFile(paths.binary, entry[1]);
  if (process.platform !== "win32") chmodSync(paths.binary, 0o700);
  const manifest: InstallManifest = {

View on GitHub (pinned to a179ffed5b)

When it happens

Trigger: Thrown at open-sse/executors/chatgpt-web-codex/tunnelClient.ts:213 when the library encounters an invalid state.

Common situations: See trigger scenarios.


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