DeepSeek Harness 插件

hadesybil-hub/dsh-restart-button

Star 数 ★ 0 分类 UI 增强 收录于 2026-08-30

在 DSH 网页界面右下角"关机"按钮旁新增一个"重启"按钮,点击并确认后重启 dsh web,服务器自动拉起并重新打开浏览器。

安装

# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)

dsh plugin --profile web add github:hadesybil-hub/dsh-restart-button

装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。

README

该插件的 README 只有英文版本。

A small DeepSeek Harness (DSH) plugin that adds a floating quit button to the bottom-right corner of the Web GUI. (It used to restart; v0.3.0 changed it to a full exit. The package keeps its original name.)

Click it once → a themed confirm card asks if you're sure → dsh web fully exits and its port is released. The next launch is a cold start.

What it does

Floating quit button Pinned to the bottom-right corner, power glyph, tints red on hover
Confirm gate One click → themed "完全退出 DeepSeek Harness?" card → quits only if confirmed
Server route POST /api/dsh-restart/quit (loopback-only)
Quit flow Answers the request, then asks the host to exit gracefully. Spawns nothing.
Port release The listening socket dies with the process, so the port frees on its own
Result card The page watches for the server to stop answering, then says so and how to start again

Install

dsh plugin --profile web add "dsh-restart-button"

Then restart dsh web. The quit button appears in the bottom-right corner.

How it works

  • Server half (lib/index.js): a cordis plugin that registers the loopback-only POST /api/dsh-restart/quit route. It writes the 200 first — the client renders its result card from that response, because there is no server left to ask afterwards — then calls the host's ctx.appExit seam.
  • Exit: ctx.appExit runs DSH's own bounded shutdown — the plugin tree is disposed, then a hard exit after 5 s if disposal hangs. The plugin adds its own force-exit fallback at 8 s, deliberately after that grace, so the tree always gets its turn and the fallback only catches "disposed but the event loop never drained".
  • Client half (lib/client.js): plain-DOM, no React, no build step. Loaded through window.__ModuleLoader__, it appends the floating button, shows the confirm card, and after confirming polls the origin until requests stop being answered — a rejected fetch is the only honest "it is really gone" signal available from inside the page.

Security

  • The route is loopback-only (peer socket + Host header + same-origin fence), matching the DSH plugin family convention.
  • Quitting spawns no process and writes no file. scripts/check.mjs fails the build if the host half ever grows a spawn again.

License

MIT

Repository

https://github.com/hadesybil-hub/dsh-restart-button

内容来自项目 README(GitHub)↗

链接

同类插件

查看整个分类 →

社区评论

评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。