Replies: 3 comments
Additional recovery boundary: client-side plugin bootOne additional boundary is worth accounting for in the recovery model: there are two different notions of startup readiness.
A supervisor that treats host readiness as final readiness can miss failures in the second phase. The server process may remain healthy while the browser is already showing This does not change the original proposal, but it tightens the readiness contract and suggests a complementary implementation path:
This recovery component can still be plugin-shaped, but it needs to be a first-class boot/shell plugin that is statically loaded before profile plugins and excluded from the optional set it supervises. An ordinary third-party client plugin cannot reliably provide recovery because it is itself imported through the failing loader and may never execute. A small loader extension point—for example, an |
|
支持这个提案。补充一份确定性复现和现场堆栈,希望能让它更可落地 —— 确定性复现(不依赖任何特殊环境)关键点是:包体本身完好,只是它的清单读不到。 # stock 安装下 node-pty 包根目录没有 index.js,所以移开 package.json
# 就足以让 ESM 解析失败
$d = "$env:LOCALAPPDATA\npm-cache\_npx\<hash>\node_modules\node-pty"
Rename-Item "$d\package.json" "package.json.bak"
dsh web --host 127.0.0.1 --port 3081结果:进程约 1~2 秒后以 code=1 退出,端口只短暂 listening 过一瞬: 把 环境: 一个观察:Discussions 里已有十几贴其实是同一个根因搜
也就是说:这个提案不只是"锦上添花的安全模式", 关于实现位置的一点具体建议堆栈里
另外很同意作者关于"透明展示降级状态"的原则。建议把失败的 entry 直接显示在 Web UI 上 补充:我们这次的真实触发原因不是手动删文件。是公司统管电脑上的透明加密 DLP(文件层过滤驱动) 同类触发还有:磁盘坏块、杀软误隔离、npm 缓存被清一半、容器镜像层损坏、 |
|
Strongly in favor, and I want to add evidence for why a recoverable startup mode cannot be replaced by a better error screen. There are two failure severities here, and they are usually discussed as one:
I hit both while building tooling that writes overlays. For the second I deliberately inserted a row naming a package that was not installed, expecting one dead entry I could then inspect - and instead got no harness at all. That is the case this proposal addresses and the error screen cannot. What a recoverable startup mode would need to survive that, from the outside looking in: the decision to skip has to happen before the failing entry is imported, since the import is what kills the process. A skip-and-warn that runs after the tree is composed is too late for exactly the entries that matter most. Two things that already exist and are worth wiring into the design rather than inventing:
Until isolation exists, tools that write config are stuck implementing refusal instead - mine will not write a row whose package is not present in the profile, because after the write there is no running harness left to warn in, and the check is extracted as Also relevant from the operator side: @ylwl1997 reported in #2229 that from their catalog's install telemetry, many "Failed to load plugins" cases are one bad third-party plugin rather than a broken harness - which is the population this proposal would rescue. |
Uh oh!
There was an error while loading. Please reload this page.
Motivation
DeepSeek Harness is evolving quickly, and compatibility-breaking changes are expected during the developer-preview phase. Optional and third-party plugins can therefore become temporarily incompatible with a newer DSH release.
Today, if one of those plugins prevents the application from starting, DSH cannot help diagnose or repair itself because its own UI and agent are unavailable. Recovery requires manually editing configuration or switching to another agent/tool. That is especially inconvenient for users who rely on DSH as their primary development environment.
Could DSH provide a built-in recoverable startup mode for failures caused by optional plugins?
Proposed behavior
An opt-in flag such as
dsh web --recover-optional-pluginscould be a reasonable first version before considering automatic recovery by default.Safety boundaries
Why this belongs in the launcher/profile-boot layer
A normal plugin cannot implement this reliably: when plugin loading prevents startup, the recovery plugin may never load either. The supervisor needs to live outside the profile it is supervising, while an optional browser plugin can render the notice after the shadow profile becomes ready.
Conceptually:
The shadow-profile builder can test optional bundles and atomized user patch entries, cache the accepted set by a fingerprint of the DSH version plus profile inputs, and invalidate that cache whenever packages, patches, or local plugin code change.
Expected benefit
This would keep DSH available as the tool used to inspect and repair its own optional-plugin compatibility problems, while preserving a fail-closed boundary for core and security-sensitive functionality.
Would this recovery model fit the intended profile-boot architecture? If so, I would be happy to help refine the behavior and safety contract.
All reactions