Skip to content

Sidecar dead - Failed to fetch #47302

Description

@spamail4

Description

Description

OpenCode Desktop crashes its local backend (sidecar) a few minutes after any turn
that actually edits files / does real tool work
, on Windows. After the sidecar dies
the UI can no longer reach it, so every subsequent "Send" fails with
发送信息失败 / Failed to fetch until the app is fully restarted. The app does
not auto-restart the sidecar.

This was reproduced 6 times in a single session, with clean negative controls
(trivial text-only replies, read-only explore turns and long idle periods do not
crash). It is not caused by plugins (none installed), not by quota, not by
session/data size, not by memory pressure (sidecar stays ~170–330 MB and never
climbs), and it is not fixed by "snapshot": false.

The crash signature matches the existing reports in #26667 / #27755 / #45409
reproduced here on the latest version (1.18.27).

Plugins

No third-party plugins installed.

OpenCode version

OpenCode Desktop 1.18.27 (auto-update channel latest, says up-to-date).

Steps to reproduce

  1. Launch OpenCode Desktop on Windows (renderer is served over the oc:// scheme;
    the engine runs in a Node utility sidecar on http://127.0.0.1:<random port>).
  2. Open a session and ask the agent to do a real task that writes/edits files
    (modify a source file, format several files, or spawn an explore subagent after
    an edit) in a normal code project.
  3. Let the turn finish (log shows exiting loop).
  4. Do nothing for ~2–5 minutes.
  5. Send the next message → it fails immediately with 发送信息失败 / Failed to fetch. Every further send fails too, until you fully close and relaunch the app.

Note: the crash also occurred once while an explore subagent was still streaming
steps (not only while idle after a finished turn). Trivial Q&A turns ("reply only",
no tool calls) completed fine and did not crash even after 6+ minutes of idle.

Screenshot and/or share link

Error toast text: 发送信息失败 followed by Failed to fetch (renderer
TypeError: Failed to fetch).

Operating System

Windows 10 Enterprise LTSC 2021 (build 10.0.19044). Also reported by others on
Windows 11 (#26667/#27755/#45409).


Evidence

1. The sidecar crashes with a Windows fail-fast code, then the renderer loses it.

<user AppData>\ai.opencode.desktop\logs\<run>\utility.log (identical on every crash):

sidecar exited { code: 3221226505 }            # 0xC0000409 (STATUS_STACK_BUFFER_OVERRUN / fail-fast)
child process gone {
  details: {
    type: 'Utility',
    reason: 'crashed',
    exitCode: -1073740791,
    serviceName: 'node.mojom.NodeService',
    name: 'opencode server'
  }
}

...\logs\<run>\renderer.log right after the crash, when the user hits Send:

Uncaught (in promise) TypeError: Failed to fetch

No spawning sidecar line appears again in main.log after the crash → the app
does not restart it.

2. Timing correlation (same machine, same day):

Turn type Ended (local) Sidecar crash Outcome
Real multi-step editing turn 19:21:50 19:24:10 crashed (0xC0000409)
Real editing turn 20:15:26 20:17:07 crashed (0xC0000409)
Real editing + explore subagent (snapshot off) 21:50:10 21:53:28 crashed (0xC0000409)
Fresh session, read-only explore + 2 follow-ups 20:35 / 20:42 no crash, 15+ min stable
Trivial text-only reply in the SAME long session 20:59:09 no crash, 6+ min stable

3. Engine log (<user data>/.local/share/opencode/log/opencode.log): each
crashing turn ends with a normal exiting loop, and no ERROR/stream error/
abort line is logged between the turn end and the crash. The crash itself produces
no engine log line (native process death).

4. Ruled out (with measurements):

  • Memory: sidecar working set sampled every 2 s stayed ~170–330 MB across
    crash/no-crash runs; no monotonic climb toward any heap limit.
  • Session/data size: total database is 151 MB; the largest session's stored
    content is only ~3.5 MB (1106 parts, biggest part 0.2 MB). Not a "bloated session".
  • "snapshot": false removes the tracking hash=... change-tracking lines but
    the crash still reproduces → not the snapshot/git subsystem.
  • Plugins: none. Quota/upstream: no provider error logged before the crash;
    it also crashed on turns with fully clean model streams. Provider/model:
    opencode-go / mimo-v2.5 (the built-in "Console Go" gateway — flaky at other
    times, but not the trigger here).
  • NODE_OPTIONS (--report-on-fatalerror) is rejected in packaged builds, and
    Crashpad leaves no local minidump, so only the 0xC0000409 exit code is observable.

5. Suggested fix direction (consistent with #26667/#27755/#45409):
The sidecar is killed by an unhandled error in session/turn teardown after
tool-calling turns (session.processor family). Please make tool-turn completion
crash-safe on Windows (catch AbortError / wrap the per-turn Effect fiber with an
error boundary), and consider auto-restarting the sidecar when it dies so the UI
does not hard-lock into Failed to fetch.

Full diagnostics (memory time-series CSVs, engine/renderer/utility logs, a debug
launcher) are available if a maintainer wants them.

Plugins

No third-party plugins installed.

OpenCode version

1.18.27

Steps to reproduce

  1. Launch OpenCode Desktop on Windows (renderer is served over the oc:// scheme;
    the engine runs in a Node utility sidecar on http://127.0.0.1:<random port>).
  2. Open a session and ask the agent to do a real task that writes/edits files
    (modify a source file, format several files, or spawn an explore subagent after
    an edit) in a normal code project.
  3. Let the turn finish (log shows exiting loop).
  4. Do nothing for ~2–5 minutes.
  5. Send the next message → it fails immediately with 发送信息失败 / Failed to fetch. Every further send fails too, until you fully close and relaunch the app.

Note: the crash also occurred once while an explore subagent was still streaming
steps (not only while idle after a finished turn). Trivial Q&A turns ("reply only",
no tool calls) completed fine and did not crash even after 6+ minutes of idle.

main.log
renderer.log
utility.log

Evidence

1. The sidecar crashes with a Windows fail-fast code, then the renderer loses it.

<user AppData>\ai.opencode.desktop\logs\<run>\utility.log (identical on every crash):

sidecar exited { code: 3221226505 }            # 0xC0000409 (STATUS_STACK_BUFFER_OVERRUN / fail-fast)
child process gone {
  details: {
    type: 'Utility',
    reason: 'crashed',
    exitCode: -1073740791,
    serviceName: 'node.mojom.NodeService',
    name: 'opencode server'
  }
}

...\logs\<run>\renderer.log right after the crash, when the user hits Send:

Uncaught (in promise) TypeError: Failed to fetch

No spawning sidecar line appears again in main.log after the crash → the app
does not restart it.

2. Timing correlation (same machine, same day):

Turn type Ended (local) Sidecar crash Outcome
Real multi-step editing turn 19:21:50 19:24:10 crashed (0xC0000409)
Real editing turn 20:15:26 20:17:07 crashed (0xC0000409)
Real editing + explore subagent (snapshot off) 21:50:10 21:53:28 crashed (0xC0000409)
Fresh session, read-only explore + 2 follow-ups 20:35 / 20:42 no crash, 15+ min stable
Trivial text-only reply in the SAME long session 20:59:09 no crash, 6+ min stable

3. Engine log (<user data>/.local/share/opencode/log/opencode.log): each
crashing turn ends with a normal exiting loop, and no ERROR/stream error/
abort line is logged between the turn end and the crash. The crash itself produces
no engine log line (native process death).

4. Ruled out (with measurements):

  • Memory: sidecar working set sampled every 2 s stayed ~170–330 MB across
    crash/no-crash runs; no monotonic climb toward any heap limit.
  • Session/data size: total database is 151 MB; the largest session's stored
    content is only ~3.5 MB (1106 parts, biggest part 0.2 MB). Not a "bloated session".
  • "snapshot": false removes the tracking hash=... change-tracking lines but
    the crash still reproduces → not the snapshot/git subsystem.
  • Plugins: none. Quota/upstream: no provider error logged before the crash;
    it also crashed on turns with fully clean model streams. Provider/model:
    opencode-go / mimo-v2.5 (the built-in "Console Go" gateway — flaky at other
    times, but not the trigger here).
  • NODE_OPTIONS (--report-on-fatalerror) is rejected in packaged builds, and
    Crashpad leaves no local minidump, so only the 0xC0000409 exit code is observable.

5. Suggested fix direction (consistent with #26667/#27755/#45409):
The sidecar is killed by an unhandled error in session/turn teardown after
tool-calling turns (session.processor family). Please make tool-turn completion
crash-safe on Windows (catch AbortError / wrap the per-turn Effect fiber with an
error boundary), and consider auto-restarting the sidecar when it dies so the UI
does not hard-lock into Failed to fetch.

Full diagnostics (memory time-series CSVs, engine/renderer/utility logs, a debug
launcher) are available if a maintainer wants them.

Screenshot and/or share link

Error toast text: 发送信息失败 followed by Failed to fetch (renderer
TypeError: Failed to fetch).

Operating System

Windows 10 Enterprise LTSC 2021 (build 10.0.19044). Also reported by others on Windows 11 (#26667/#27755/#45409).

Terminal

No response

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions