Repository navigation
Replies: 3 comments
|
Thanks — the trace plus the frequency data is enough to locate this, and one part of your first request already has a named precedent in the tree. Two things are worth separating, because they have different answers. 1. The bug is that
|
|
Following up on my earlier reply, as promised: this is now a shipped plugin.
- insert:
- id: stdio-error-guard
name: '@argszero/dsh-stdio-error-guard'
inject:
- subprocessThe layer looks covered, and is notI want to correct the emphasis of my first reply, because measuring it changed what the gap actually is. The subprocess provider does attach an An ordinary child exit ends the pipe. From that instant the stream carries no listener at all, and a pipe I measured both directions against the shipped modules (
So the window is not "the collector forgot to listen" — it is "the listener was a What the plugin doesIt shadows the subprocess service's Nothing else changes: no spec, no argv, no environment, no byte consumed, no listener replaced or suppressed, the stream is not destroyed or resumed, and the handle you receive is the provider's own object, un-wrapped. The prototype itself is never mutated, and disposal deletes the own property to reveal it again. Every occurrence is counted per stream and the first of each distinct config:
enabled: true # false installs nothing at all
log: warn # silent | debug | warnWhat it deliberately does not do
The durable fix, and why this is still worth shippingIn the provider: Verification
If it turns out your ECONNRESET is on a collect-mode stream or inside the shell process, this plugin will not cover it — tell me which, and I will say plainly whether it is reachable from a plugin at all. |
|
Publication status update: Verified through the registry's own version endpoint (not the client's exit code):
What it does, in the terms of this report: the backend does register terminal listeners on each stdio handle ( One honest limit: it cannot make the failure loud on stderr — that sink is owned by the host, not by a plugin. |
Uh oh!
There was an error while loading. Please reload this page.
环境 / Environment: @deepseek-ai/dsh-desktop 0.2.0-rc.2 / Windows 11 x64 / Electron 44.0.0 / Node 24.18.1
现象 / Symptom: 应用运行 1-2 小时后,dsh host 进程因未捕获异常退出。crash log 记录:
退出后 Electron 壳进程继续存活,但:
频率 / Frequency: 2 天内发生 3 次(10/09 一次,10/16 两次),均发生在正常使用期间(有活跃会话和插件运行),非空闲挂机。三次同一模式:
read ECONNRESET(其中一次write ECONNRESET)在 ChildProcess stdio 回调中未捕获,升级为 fatal uncaught exception。影响 / Impact: 在 Windows 上把 Desktop 作为本地 agent 节点持续使用时完全不可靠——崩溃后应用"假活"(进程在、服务全断、界面无提示),无人值守场景无法自愈,必须手动重启。
期望 / Expected:
日志说明: 本机存有 3 份完整 crash-*.log(crash-2026-10-09T10-23-31-720Z-host.log 等,位于 %APPDATA%@deepseek-ai\dsh-desktop\logs\),已确认不含 API key/凭据,需要完整日志可以继续补充。
EN summary: Desktop host process crashes on an uncaught ECONNRESET in a ChildProcess stdio callback (main.js:3724). After the crash the Electron shell keeps running but the loopback web server and the dsh-dock mobile-relay gateway stay dead, with no UI indication — only a manual restart recovers. 3 occurrences in 2 days (10/09, 10/16 x2), all during normal use with active sessions/plugins. Request: catch stdio pipe errors instead of letting them escalate to a fatal uncaught exception, and auto-restart the host or surface the failure in the UI.
/cc @deepseek-ai
All reactions