前言¶
在 DeepSeek Harness(DSH)里开发或调试插件时,改完代码或替换插件包后,通常要让桌面外壳和 Harness Host 重新加载才能生效。常见做法是到系统托盘退出 DSH,再手动打开。步骤不多,但装插件、试行为时会反复做,容易打断节奏。下面介绍的 dsh-restart-button 在 Windows 桌面端窗口标题栏、最小化按钮左侧增加一个重启按钮,确认后由插件触发重启流程,不必每次走托盘退出再打开。
这是什么¶
dsh-restart-button 是社区维护的 DSH 插件(GitHub:978064659/dsh-restart-button,package 版本 0.2.1,MIT 许可证)。它只在 Windows 桌面端 的 Electron 窗口里显示按钮;浏览器里打开的 Web GUI 没有可重启的外壳,按钮会自动隐藏。插件以当前 DSH 进程权限运行,安装前建议自行查看仓库源码与许可证。
核心功能¶
标题栏按钮与显示条件¶
- 按钮位于窗口标题栏右上角、最小化按钮左侧,间距依据 Window Controls Overlay(
navigator.windowControlsOverlay.getTitlebarAreaRect())计算,窗口缩放或进出全屏时会重新贴合。 - 仅在 win32、Electron Node 模式、且有父进程时报告
supported: true;其他环境返回 409,按钮隐藏。 - 全屏时按钮隐藏。
交互与失败提示¶
- 点击后先弹出确认框,说明会中断正在运行的任务(强制结束式重启,非优雅退出)。
- 确认后发送重启请求;过程中显示「正在重启…」。
- 若 7 秒后页面仍在,表示重启未发生,按钮上出现红点并提示重试或手动退出,不会假装成功。
工作原理概要¶
DSH 桌面端是 Electron:只有主进程能调用 app.relaunch(),Harness Host 是子进程,插件没有受支持的 API 直接请求外壳重启。插件因此走 Client + Host 双端配合:
- Client(
dsh/client.js)在shell.overlay插槽绘制按钮,确认后POST /plugins/restart-button(同源,带 Harness 会话 Cookie)。 - Host(
dsh/index.js)用ctx.connection.authorizeIndex()校验请求,写入 PowerShell 脚本并以隐藏子进程启动第一段。 - 第一段通过 WMI(
Win32_Process.Create)把第二段挂到 WmiPrvSE 下,再结束外壳主进程与 Host;第二段等待旧进程消失后,再用 WMI 拉起应用(按process.execPath,每 2 秒确认,最多重试 5 次)。
脚本筛选同一 exe、非 Chromium 子进程、非 dsh-desktop-host,避免 taskkill /T 误伤。日志写在 %TEMP%\dsh-restart-button\restart.log,便于排查未启动的原因。
安装与启用¶
在 DSH 里用插件管理器安装本插件目录(需使用绝对路径),例如:
# 在 DSH 里用插件管理器安装本目录(绝对路径)
也可通过 plugin_manager 的 install_bundle,将 target 指向本包目录。README 未给出统一的 dsh plugin add github:… 一行命令,请以插件管理器或 install_bundle 为准。
首次安装后若标题栏尚未出现按钮,需要手动重启一次 DSH;之后可通过该按钮完成后续重启。
典型用法¶
- 安装或替换其他 DSH 插件后,在桌面端窗口标题栏点击重启按钮。
- 在确认框中阅读「会中断正在运行任务」的说明,确认继续。
- 等待外壳重启;若 7 秒内未成功,按按钮上的红点提示重试,或按 README 说明手动退出再打开,并查看
%TEMP%\dsh-restart-button\restart.log。
安全与限制¶
- 路由
/plugins/restart-button与页面同源,由 Harness Web 服务器会话 Cookie 鉴权;未登录的本地请求会得到 401。 - 重启脚本每次写入
%TEMP%\dsh-restart-button\下的新文件(约几 KB),可自行清理。 - 应用迁移到新安装路径后,仍按
process.execPath启动,无需改插件配置。
适用场景与注意¶
适合在 Windows 桌面端 频繁装插件、改插件、验证加载行为的开发者。不适用浏览器 Web GUI、非 Windows 或非 Electron Node 环境。
插件会强制结束外壳与 Host,正在运行的任务会被中断;确认框已说明这一点。社区插件目录(如 SkillHub)与 DeepSeek / 幻方无官方从属关系,本文事实以仓库 README 与 package.json 为准。
链接¶
- 社区目录页:https://www.skillhub.cn/plugins/978064659/dsh-restart-button
- GitHub:https://github.com/978064659/dsh-restart-button