dsh-restart-button:桌面端标题栏一键重启 DeepSeek Harness

前言

在 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,按钮隐藏。
  • 全屏时按钮隐藏。

交互与失败提示

  1. 点击后先弹出确认框,说明会中断正在运行的任务(强制结束式重启,非优雅退出)。
  2. 确认后发送重启请求;过程中显示「正在重启…」。
  3. 若 7 秒后页面仍在,表示重启未发生,按钮上出现红点并提示重试或手动退出,不会假装成功。

工作原理概要

DSH 桌面端是 Electron:只有主进程能调用 app.relaunch(),Harness Host 是子进程,插件没有受支持的 API 直接请求外壳重启。插件因此走 Client + Host 双端配合:

  1. Client(dsh/client.js)在 shell.overlay 插槽绘制按钮,确认后 POST /plugins/restart-button(同源,带 Harness 会话 Cookie)。
  2. Host(dsh/index.js)用 ctx.connection.authorizeIndex() 校验请求,写入 PowerShell 脚本并以隐藏子进程启动第一段。
  3. 第一段通过 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;之后可通过该按钮完成后续重启。

典型用法

  1. 安装或替换其他 DSH 插件后,在桌面端窗口标题栏点击重启按钮。
  2. 在确认框中阅读「会中断正在运行任务」的说明,确认继续。
  3. 等待外壳重启;若 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
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜