fengs2021
dsh-boot-failsafe
No description
- Stars
- 0
- Language
- JavaScript
- Created
- Aug 17, 2026
- Updated
- Aug 17, 2026
Introduction
dsh-boot-failsafe v2
Boot failsafe for the DeepSeek Harness web GUI — pure client, zero disk writes, zero host logic, passive. If a client plugin crashes while loading (template defects like
exports is not defined/received object, or any factory throw), it is skipped with a visible banner instead of breaking the UI; missing-bundle 404s are reported, not auto-"fixed". You can always get in, even when a plugin is broken.WebUI 加载容错(对抗审查修订版)。纯 client、零磁盘写入、零 host 逻辑、被动响应——坏插件加载失败时自动跳过 + 横幅提示,绝不破坏页面与服务端。
English
Safety contract (v2 hard rules)
- ❌ No disk writes of any kind (node_modules / patch / anything)
- ❌ No server routes, no loader service access, no manifest modification
- ❌ No probing, no "is it uninstalled" guessing
- ✅ The only persistence is browser localStorage
- Worst possible outcome: a plugin is skipped (recoverable). The server is never touched.
History (v0.1): a host-side auto-patch that wrote no-op packages into profile node_modules once misclassified 128 official packages → crash loop (NRestarts=65) → 502. v2's host half is explicitly a no-op.
Capabilities
- Factory failsafe: wraps
window.__ModuleLoader__.load— installed at module top level (during the arrive phase, long before the host EntryTree imports plugins; polls ≤30s if__ModuleLoader__is not ready). A factory that throws or does not returnapplyis replaced with a no-op placeholder and listed in a banner (plugin name + reason + disable button). The wrapper itself is fully try/catch-guarded — it can never break the registration chain.- Honest note: ordering is best-effort (script phase ≪ import phase), not a hard guarantee.
- Missing-bundle reporting: strict 404 detection —
errorevent (capture) +SCRIPTtarget +/plugins/src + id resolved from the boot manifest (read-only). Reports only, never auto-fixes. - Blacklist (localStorage
dsh.bootFailsafe.blocked.v2):- Entries are
{id, rev}; when the manifestrevchanges the entry auto-clears (the plugin may have been fixed) - Self-protection: refuses to disable
dsh-boot-failsafeitself or@deepseek-ai/dsh-client-modules - "全部解除" escape-hatch button clears the whole blacklist
- After fixing a plugin: refresh the page to restore (fresh loadCache, no stale no-op)
- Entries are
Coverage boundaries (honest)
| Scenario | Behavior |
|---|---|
Factory template defect (no apply / factory throw) | ✅ skipped + banner + disable |
Top-level transpile error (exports is not defined at module top) | ⚠️ script-error path: banner + manifest id lookup, not skipped |
| Bundle 404 (uninstalled, not restarted) | ⚠️ reported only ("refresh / restart the service") |
Runtime apply half-crash | ❌ not covered (runtime error) |
Install
dsh plugin --profile web add github:fengs2021/dsh-boot-failsafe
systemctl restart dsh-web # or hot-mount via dev tools (no restart)
Hard-refresh the page afterwards (the browser must load the new client bundle).
中文
安全契约(v2 铁律)
- ❌ 不写任何磁盘文件(node_modules / patch / 任何路径)
- ❌ 不注册服务端路由、不访问 loader 服务、不修改
__DSH_BOOT__ - ❌ 不探测、不判定「已卸载」
- ✅ 唯一持久状态 = 浏览器 localStorage
- 最坏结果 = 某个插件被跳过(可恢复);服务端零影响
历史教训(v0.1):host 半自动补写 no-op 包曾把 128 个官方包误判替换成占位 → crash loop(NRestarts=65)→ 502。v2 host 半显式为 no-op。
能力
- factory 容错:包装
window.__ModuleLoader__.load(模块顶层安装,早于 EntryTree import 阶段;__ModuleLoader__未就绪则 ≤30s 轮询等待)。factory 抛错 / 未返回apply→ no-op 占位 + 横幅(插件名+原因+禁用按钮)。包装自身异常全兜底回退原始 load,绝不破坏注册链。- 诚实声明:时序为尽力而为(script 阶段远早于 import 阶段),非硬保证。
- 资源缺失提示:严格 404 检测——
error事件(capture)+SCRIPTtarget +/plugins/前缀 + manifest(只读)id 反查。只提示不自动修。 - 黑名单(localStorage
dsh.bootFailsafe.blocked.v2):- 条目
{id, rev};manifest rev 变化 → 自动解除(可能已修复) - 自我保护:禁止禁用
dsh-boot-failsafe自身与@deepseek-ai/dsh-client-modules - 横幅「全部解除」逃生按钮
- 修复插件后:刷新页面即可恢复(loadCache 全新,无残留 no-op)
- 条目
覆盖边界(诚实)
| 场景 | 行为 |
|---|---|
| factory 模板缺陷(未返回 apply / factory throw) | ✅ 跳过 + 横幅 + 禁用 |
顶层转译错误(exports is not defined 在模块顶层) | ⚠️ script-error 路径:横幅提示 + manifest 反查 id,不跳过 |
| bundle 404(已卸载未重启) | ⚠️ 只提示「刷新/重启」,不自动修 |
| apply 运行期半崩 | ❌ 不覆盖(运行时错误) |
安装
dsh plugin --profile web add github:fengs2021/dsh-boot-failsafe
systemctl restart dsh-web # 或 dev 工具热装配(免重启)
安装后硬刷新页面(浏览器需加载新版 client bundle)。
License
MIT