Summary
On the OpenCode desktop app (Electron 42 / Chrome 148, v1.17.9, Windows 11),
DCP's UI surfaces reliably crash the renderer process. The pruning engine
itself is fine — disabling only the UI keeps full functionality with zero crashes.
Environment
- DCP 3.1.13, installed
--global
- OpenCode desktop 1.17.9 (Electron renderer, not the terminal TUI)
- Windows 11, local llama.cpp models, MCP-heavy config (puppeteer, etc.)
Symptoms
- Renderer process crashes repeatedly (crashpad minidumps tagged
renderer).
renderer.log floods with ResizeObserver loop completed with undelivered notifications — 1,000+ per session — in a tight burst right before each crash.
- The node sidecar always exits cleanly (
code: 0); backend logs show zero DCP
errors, because the failure is render-side (DCP sends data fine; the renderer
dies drawing it).
Isolation
pruneNotification: "off" + commands.enabled: false → crashes stop.
- Re-enabling only the on-demand
/dcp panel (commands.enabled: true, notifications
still off) → stable, compresses correctly.
- Conclusion: the chat-injected prune notifications (
pruneNotification: "detailed", injected into the scrolling chat list every prune) are the trigger.
The engine (chat-transform hook) and /dcp panel are not.
Suspected cause
Notifications injected into the desktop's scrolling chat list on every prune drive
a ResizeObserver feedback loop in the Electron renderer's layout. The plugin was
designed for the terminal TUI, where this loop doesn't exist.
Possible fixes
- Detect desktop vs TUI client and route prune feedback to
toast instead of an
injected chat message there.
- Debounce/coalesce notification injection.
- Document that desktop users should set
pruneNotification: "off" or "toast".
Summary
On the OpenCode desktop app (Electron 42 / Chrome 148, v1.17.9, Windows 11),
DCP's UI surfaces reliably crash the renderer process. The pruning engine
itself is fine — disabling only the UI keeps full functionality with zero crashes.
Environment
--globalSymptoms
renderer).renderer.logfloods withResizeObserver loop completed with undelivered notifications— 1,000+ per session — in a tight burst right before each crash.code: 0); backend logs show zero DCPerrors, because the failure is render-side (DCP sends data fine; the renderer
dies drawing it).
Isolation
pruneNotification: "off"+commands.enabled: false→ crashes stop./dcppanel (commands.enabled: true, notificationsstill off) → stable, compresses correctly.
pruneNotification: "detailed", injected into the scrolling chat list every prune) are the trigger.The engine (chat-transform hook) and
/dcppanel are not.Suspected cause
Notifications injected into the desktop's scrolling chat list on every prune drive
a ResizeObserver feedback loop in the Electron renderer's layout. The plugin was
designed for the terminal TUI, where this loop doesn't exist.
Possible fixes
toastinstead of aninjected chat message there.
pruneNotification: "off"or"toast".