← Back to home@knlght

DSH-shutdown

一键结束 DeepSeek Harness 服务:Settings 关机页 + 二次确认 + 优雅退出,关掉浏览器不再留下后台进程

Stars
2
Language
JavaScript
Created
Aug 14, 2026
Updated
Sep 10, 2026
GitHub repo

Introduction

dsh-shutdown

一键关闭 / 重启 DSH 服务

Settings「服务开关」页 · 二次确认 · 优雅退出 / 自动重启

关掉浏览器不再留下后台进程,也能一键重启服务。
🌏 中文 · English

✨ 为什么需要

关闭浏览器不会结束 dsh 的后台服务进程——服务继续占用端口与内存。本插件在页面内提供一键关机/重启入口,无需命令行。

✨ 功能一览

  • 🖥️ Settings「服务开关」页:侧栏最底部新增「服务开关」页签
  • 🛡️ 二次确认:点「关闭 DSH 服务」或「重启 DSH 服务」→ 出现「确认 / 取消」双按钮,防误触
  • ✅ 成功反馈:确认后页面立即显示绿色「关闭成功 / 重启中」面板(并尝试自动关闭标签页)
  • 🔁 自动重启:重启请求会让宿主进程以特殊退出码退出,由 launcher/dsh-web.ps1 启动脚本捕获后自动重新拉起(根目录 dsh-web.cmd/dsh-web.ps1 为快捷入口)
  • 🎨 原生风格:按钮与配色全部引用 DSH 主题 token(--dsw-alias-*),明暗自适应

📦 安装

dsh plugin --profile web add <本仓库 / npm 包名>
# 重启 dsh web 生效

🧠 设计要点

  • 关机端点:/_dsh/shutdown(仅 POST)——服务先返回「正在关闭」响应,500ms 后 process.exit(0) 优雅退出
  • 重启端点:/_dsh/restart(仅 POST)——服务先返回「正在重启」响应,500ms 后以退出码 42 退出;dsh-web.ps1 检测到该退出码会自动重新启动 dsh web
  • 会话日志为逐事件落盘,空闲时退出安全;正在进行的对话请等待其完成后再操作
  • 浏览器安全策略下脚本只能关闭自己打开的窗口——手动打开的标签页会保留成功面板,两种情况下你都能确认结果

🧩 生态

打上 dsh-shutdown topic 的插件可接入同一生态。欢迎通过 PR 改进本插件。

📄 许可

MIT

🔒 安全说明

关机端点会终止整个服务,是破坏性最强的操作,因此端点自身带有跨站请求(CSRF)防护:

  • 浏览器发起的请求:校验 Origin 头。来自外部站点的一律返回 403,防止任意网页在后台关闭你本机的 DSH——浏览器不会为这类跨源简单 POST 做预检,所以端点必须自己把关
  • 同源访问:127.0.0.1 / localhost / ::1 直接放行;通过局域网 IP 或自定义主机名访问(dsh web --host 0.0.0.0)时,要求 Origin 与 Host 一致
  • 无 Origin 的请求:curl、启动脚本等非浏览器客户端放行,不影响脚本化使用

📝 更新日志

v0.2.0

  • 新增 CSRF 防护(详见上方安全说明)
  • 修复 前端在端点返回 500 等错误时仍显示「关闭成功」——此前只要 fetch 未抛异常就当作成功,现在区分网络层失败、响应解析失败与 HTTP 错误三类情况
  • 修复 插件卸载 / 热重载时未撤销 slots.inject 注册,可能导致设置页残留重复条目
  • 新增 17 个行为测试(host 10 + client 7),覆盖 CSRF 守卫、退出码语义、卸载清理与响应判定