Repository navigation
Description
Desktop v1.18.11 freezes completely when streaming from opencode-go provider
Summary
OpenCode Desktop (Windows) freezes completely (entire UI unresponsive, settings dialog won't open, all requests hang, no logs are written) whenever a streaming request is made to any model through the opencode-go provider. The process must be killed and restarted. This reproduces even with a single session, single model, and no proxy/VPN active — so it is not a concurrency issue, not a network/proxy issue, and not a server-side issue (direct API calls to the same endpoint succeed).
Environment
- OS: Windows 10
- App: OpenCode Desktop v1.18.11 (installed dir updated 2026-08-01 19:26)
- Provider that triggers the freeze:
opencode-go(baseURLhttps://opencode.ai/zen/go/v1) — e.g.deepseek-v4-pro,kimi-k3,qwen3.7-plus - Provider that works fine:
opencode(Zen free tier, e.g.big-pickle) — runs for hours without issue
Timeline of evidence (from %USERPROFILE%\.local\share\opencode\log\opencode.log)
- 2026-07-25 ~ 07-30: Only
opencodeprovider (big-pickle) used. Sessions run 60–400 minutes. No freezes. - 2026-07-31 18:02 (local): First-ever
opencode-gostream request (deepseek-v4-flash). Short-lived processes begin. - 2026-08-01 19:26: Desktop updated (to v1.18.11).
- 2026-08-03 morning: Repeated freezes, all of them matching the same signature:
| Run | Last log line before freeze | Models in flight |
|---|---|---|
9c40df41 |
loop step=5 (then silence) |
4 concurrent go sessions (qwen3.7-plus / kimi-k3 / deepseek-v4-pro / gpt-5.6-luna) |
77f48807 |
loop step=1 (then silence) |
4 concurrent go streams |
be4bb269 |
last stream opencode-go deepseek-v4-pro at 01:43:01Z, silence at 01:43:15Z |
go + big-pickle mixed |
| single-session repro (10:00 local) | stream providerID=opencode-go modelID=deepseek-v4-pro at 02:00:42Z, process gone by 02:01:56Z (next run started) |
only ONE go session, no proxy |
The last repro is the most telling: one single go-model streaming request, no VPN, no other sessions — froze the whole app in ~74 seconds.
Signature of the freeze
- The last log line is always the go-model
streamstart (orloop step=N) — never an error, crash, or abort. - The Electron process becomes completely unresponsive (UI frozen, settings button dead). Nothing can be written to the log afterwards — evidence of main-thread / process-wide blocking, not a normal crash.
- It does not recover on its own; requires killing the app.
What has been ruled out
- Server-side / API: Direct HTTPS calls to
https://opencode.ai/zen/go/v1with the same key return HTTP 200;/modelslists all 24 models (1394ms); real chat withkimi-k3returns 200 (3075ms); streamingdeepseek-v4-prodelivers 125 SSE chunks ending withdata: [DONE](1739ms). The SSE format matches whatopencode(big-pickle) uses. - Proxy / VPN: Freeze also occurs with system proxy disabled (
ProxyEnable=0, port 17891 not listening). The go API is directly reachable from China without any proxy. - Concurrency / multiple sessions: Reproduced with a single session making a single streaming request.
- API key / subscription: Same key works fine via raw HTTP.
- models.dev fetch timeout: Exists (15s timeout domestically) but also occurred on days with zero freezes — noise, not the cause.
Repro steps
- Use OpenCode Desktop v1.18.11 on Windows.
- Configure
opencode-goprovider (models likedeepseek-v4-pro,kimi-k3). - Start any session with a go model and send a message that triggers a streamed response.
- Within ~1–2 minutes the entire app freezes (UI unresponsive, no further log lines, no error in log).
Expected behavior
Streaming responses from opencode-go models should not freeze the application — the same streaming path works for the opencode provider.
Notes
- Log location:
%USERPROFILE%\.local\share\opencode\log\opencode.log - Happy to attach the relevant log excerpts (they're large; let me know the best way to share) or run a debug build / enable debug logging if that helps.
- Rolling back to v1.18.10 is our planned next step to confirm the regression; happy to report results.
Activity
github-actions commentedon Aug 3, 2026
This issue might be a duplicate of existing issues. Please check:
chunkTimeoutdefault armed, causing the app to freeze indefinitely. That issue describes the same mechanism (wrapSSEonly fires whenchunkTimeoutis set, Bun fetch hastimeout: false, silent stalls never trigger retries) and proposes a fix. Though SSE stream silently dropped mid-response hangs session/subagents forever — chunkTimeout has no default on the openai path #37580 is on theopenaiprovider path, the samechunkTimeoutgap likely applies toopencode-go.LY3123 commentedon Aug 3, 2026
Additional evidence after applying
chunkTimeout: 180000to theopencode-goproviderWhat was done:
"chunkTimeout": 180000toprovider["opencode-go"].optionsinopencode.jsonObserved behavior:
kimi-k3: full stream finished in 31s, agent loop steps advance). The config does help for mid-stream stalls.kimi-k2.7-coderequest started at04:01:39Zproduced zero output for 14 seconds — the user then manually cancelled it (AbortError: Aborted). No error, no retry, no timeout fired; the UI just sat there with no output.03:54:21Z(run735468c2): the last log line is aglm-5.2stream request plus a concurrent file operation in another session (read/touchon a Makefile). After that the log goes completely silent — no error, no crash, same pattern as the original report.Root-cause narrowing:
chunkTimeoutprotects against stalls between chunks, but does not cover a stall before the first chunk (connection established, no data ever arrives). This is exactly the gap described in #37580 — the maintainer explicitly said "the samechunkTimeoutgap likely applies toopencode-go". The freeze sits at the SSE reader level:reader.read()blocks forever with no exception, so no retry and no timeout ever fires.Workaround confirmed:
Impact:
This affects daily usage — the client becomes unusable whenever a go-provider request stalls before the first byte. Please consider arming the timeout from request start (first-byte timeout for the SSE stream), not only between chunks. Happy to provide more logs or run a debug build.
github-actions commentedon Oct 3, 2026
To stay organized issues are automatically closed after 60 days of no activity. If the issue is still relevant please open a new one.