garrytan/gstack · error · Error

Failed to fetch ${url}: ${res.status} ${res.statusText}

Error message

Failed to fetch ${url}: ${res.status} ${res.statusText}

What it means

Error "Failed to fetch ${url}: ${res.status} ${res.statusText}" thrown in garrytan/gstack.

Source

Thrown at browse/src/security-classifier.ts:141

    'off';
  const transcript = haikuAvailableCache === null ? 'off' :
    haikuAvailableCache ? 'ok' : 'degraded';
  const status: ClassifierStatus = { testsavant, transcript };
  if (isDebertaEnabled()) {
    status.deberta =
      debertaState === 'loaded' ? 'ok' :
      debertaState === 'failed' ? 'degraded' :
      'off';
  }
  return status;
}

// ─── Model download + staging ────────────────────────────────

export async function downloadFile(url: string, dest: string): Promise<void> {
  const res = await fetch(url);
  if (!res.ok || !res.body) {
    throw new Error(`Failed to fetch ${url}: ${res.status} ${res.statusText}`);
  }
  const tmp = `${dest}.tmp.${process.pid}`;
  const writer = fs.createWriteStream(tmp);
  // @ts-ignore — Node stream compat
  const reader = res.body.getReader();
  try {
    let done = false;
    while (!done) {
      const chunk = await reader.read();
      if (chunk.done) { done = true; break; }
      writer.write(chunk.value);
    }
    await new Promise<void>((resolve, reject) => {
      writer.end((err?: Error | null) => (err ? reject(err) : resolve()));
    });
    fs.renameSync(tmp, dest);
  } catch (err) {
    // Drop the half-written tmp so we don't ship a truncated model file to

View on GitHub (pinned to 94993f7401)

When it happens

Trigger: Thrown at browse/src/security-classifier.ts:141 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of garrytan/gstack@94993f7401 (2026-08-12). Data as JSON: /api/errors/ac96384b2a5545fc. Report an issue: GitHub.