🖥️ Desktop Sidecar No Longer Crashes
If you've been hitting random crashes in OpenCode Desktop — silent exits, missing notifications, grep/glob returning nothing — this release fixes the root cause. The Electron utility process that runs OMO doesn't expose Bun's shell helpers or its native streaming APIs. We rewrote every affected path to detect this at runtime and fall back to plain Node child_process + buffer-concat streaming. Affected surfaces:
- Native search (
grep,glob) now reads subprocess output via a Node-safe stream collector instead ofResponse(stream).text()(#3919). - OS notifications fall back to
execFilewithwindowsHide: truewhenctx.$is absent (#4128, #4061). - Ripgrep discovery on Windows uses
where.exewith shell-free spawn — no more flashing console windows. - Subprocess hardening propagated through
binary-downloader,zip-extractor, and all 5 zip-entry-listing variants.
🔁 Background Agents Stop Echoing Themselves
Two long-standing reliability bugs are gone:
- Duplicate parent wakes — when a background subagent completed and the parent's
promptAsyncgate was still holding, the same wake could enqueue twice and start a second assistant stream. Resolved by semantic deduplication during the gate hold window (#4256, #4019). - Cleanup listener retention — repeated transient errors during MCP startup or provider reconnects no longer kill the host. The
uncaughtExceptionlistener stays installed across events, with a local re-entry guard that still prevents log explosions.
💬 No More Comment-Checker Deadloops
Editing a line that contained an existing comment used to trigger the comment-checker repeatedly even when the comment was unchanged. The checker now skips edits that don't introduce net-new comments and deduplicates warnings to once per 30s per session (#4292).
Pure bug-fix release. No new agents, no new tools, no config changes. If you're on v4.3.0, this is a drop-in upgrade.
- e7120f6 Merge pull request #4295 from vanhci/fix/issue-4292-comment-checker-deadloop
- 9e5c431 Merge pull request #4297 from SpencerJung/fix/issue-4128-desktop-sidecar-crash
- 7409f2e Merge pull request #4300 from code-yeongyu/fix/issue-3919-desktop-native-search
- e6d8b3e Merge pull request #4299 from code-yeongyu/fix/issue-4128-ctx-dollar-guard
- a51d22d Merge pull request #4301 from code-yeongyu/fix/issue-4256-duplicate-prompt-dispatch
- 560569e fix(parent-wake-notifier): drop duplicate wakes during promptAsync gate hold (#4256, #4019)
- aded57f fix(shared): harden ripgrep-cli, zip-extractor, binary-downloader subprocess paths
- d17b212 fix(tools/grep, tools/glob): use Node-safe subprocess streaming (#3919)
- 4ea7562 feat(shared): add Node-safe process stream reader and search output collector
- bc8c462 fix(session-notification-sender): guard ctx.$ with execFile fallback for Desktop sidecar (#4128, #4061)
- b31ad3c @csxq0605 has signed the CLA in #4298
- ec9997b fix(background-agent): keep cleanup error listener active
- 4cf391b fix(comment-checker): skip modified-existing comments and dedupe per-session (issue #4292)
- cb205e1 @SpencerJung has signed the CLA in #4247
- 1699329 @YOMXXX has signed the CLA in #4263
- 0904e23 @wolfkill has signed the CLA in #4261
Thank you to 1 community contributor:
- @SpencerJung:
- fix(background-agent): keep cleanup error listener active