anomalyco / anomalyco/opencode
[BUG] Desktop: conversation freezes mid-"thinking", no error, must abort and resend — missing watchdog/retry UX
@Brendonovich is already working on this.
Since Aug 9, 2026.
- Dominant language
- TypeScript
- Stars
- 209k
- Forks
- 27.5k
- PR merge metrics
- PR metrics pending
Description
Description
On the Windows desktop app, quite often — especially with models that do long/reasoning "thinking" (e.g. OpenAI/DeepSeek-style reasoning dumps) — the conversation freezes mid-thinking: the agent is stuck in "thinking" state, spinner/tool call never resolves, and no output arrives.
The only workaround is to abort/terminate the conversation and resend the message (losing the reasoning context), which is disruptive for long debugging tasks.
Details of the bug
- User sends a prompt (sometimes after long thinking, sometimes right at start).
- Client shows "thinking…" (or the thinking block dumps) indefinitely; the stream silently stops; no error toast.
- UI (desktop) is stuck; user must hit the abort/stop button and resent the exact same prompt; then it usually works — pointing to a transient stream/connection race, not the model being slow.
Associated issues (other symptoms, same "thinking stuck" family)
- #36370 (Desktop stuck in "thinking" - sidecar stream never completes, Windows)
- #37609 (Plan/Build mode sometimes hangs after long reasoning, never emits final response)
- #38951 (API 404 silently hangs in thinking state, no error recovery)
- #32366 (UI stuck on thinking indefinitely after stream error, no error displayed)
- #38644 (provider 500 drops response without showing error)
- #41069 (previously closed as duplicate of #37617 — free-tier model network blips treated as normal; user on this session reported similar)
Suggested improvements
- Watchdog / timeout on the thinking phase: if no chunks received for N seconds (e.g. 60s), surface an explicit error/info banner ("model hasn't responded; retry?") and offer "retry with cached thinking".
- Recover stuck turn automatically: detect stuck state and prompt user "Retry / discard and re-ask" instead of silently dangling.
- Show provider error in the UI (many of these are provider 5xx/empty chunk cases): single toast for "provider error, auto-retried".
- Non-lossy retry: when user aborts+resends, keep the previous reasoning/tool output as context so the retry isn't blind.
This is a frequent occurrence (dozens of similar reports) and the UX cost is high for long sessions.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.