dsh-restart-plugin:为 DSH 桌面端提供应用内强制重启

前言

在 DeepSeek Harness(DSH)上开发和试用插件时,经常会碰到必须完整重启客户端的情况:新装或更新了 bundle、改了只在启动时生效的配置,或者界面与任务卡住。常见做法是手动关窗口再重新打开,步骤不多,但在反复迭代时仍会打断节奏。

dsh-restart-plugin 由社区开发者 zhangmaorongXL 维护,在 DSH 侧边栏底部注册一个重启入口。用户确认后,插件通过脱离 DSH 进程树的 PowerShell 助手结束当前主进程,并用同一可执行路径重新拉起应用。下面介绍它的定位、安装方式、使用步骤,以及需要提前知晓的限制。

这是什么

dsh-restart-plugin 是一个同时包含 Host 端和 Web 客户端的 DSH 插件,当前版本为 0.1.0,采用 MIT 许可证,面向 Windows 桌面环境(依赖 PowerShell 与 WMI)。

插件在 DSH 生态里归类为客户端类能力:按钮挂在 Web 客户端侧边栏,重启逻辑由 Host 路由与系统脚本完成。DSH 社区插件目录为独立站点,与 DeepSeek / 幻方无官方从属关系;安装前建议自行查阅源码与许可证,插件以当前 DSH 进程及用户权限运行。

核心功能

依据 README 已核实的能力如下。

界面与交互

  • 在 sidebar.footer.action 插槽注册按钮,默认 order: 10。
  • 侧边栏展开时显示图标和 Restart 文案;收起时只显示 ⟳ 图标。
  • 点击后二次确认,提示会中断未保存内容与运行中任务。
  • 请求发出后按钮禁用并显示 Restarting...,避免重复点击。

Host 与重启机制

  • 客户端向 POST /dsh-restart-plugin/force-restart 发请求;Host 先返回 200,再异步执行重启,减轻前端因连接断开报错。
  • 在系统临时目录写入 dsh-force-restart-<timestamp>.ps1,经 WMI Win32_Process.Create 启动隐藏的 PowerShell 助手,该进程不在 DSH 进程树下。
  • 助手等待 800 ms,查找主窗口标题包含 DeepSeek Harness 的进程,记录可执行路径后强制结束,等待 1 s 再用原路径启动;脚本执行完后删除自身。
  • 源码以 ESM 与浏览器模块直接加载,无需单独构建步骤。

警告:这是强制重启,不等待会话保存,也不优雅关闭任务。未保存会话、正在执行的 Agent 任务与工具调用都可能被中断。

工作原理(简要)

经过上面的功能说明,流程可概括为:

  1. 用户点击侧边栏底部 ⟳ 并确认。
  2. POST /dsh-restart-plugin/force-restart → Host 立即返回 {"ok":true,"message":"Restarting..."}。
  3. WMI 启动脱离进程树的 PowerShell 助手 → 定位并结束 DSH → 用原 exe 路径重启。
侧边栏按钮
  │ POST /dsh-restart-plugin/force-restart
  ▼
DSH Host 路由 ── 立即返回 200 ──▶ 客户端进入 Restarting...
  │
  │ WMI(脱离 DSH 进程树)
  ▼
PowerShell 助手
  │ 等待 800 ms → 结束 DSH → 等待 1 s
  ▼
重新启动 DeepSeek Harness.exe

安装与启用

环境要求

项目 要求
操作系统 Windows(PowerShell、WMI)
应用 DSH 桌面端,支持插件 bundle 与 Web 客户端插件
DSH 能力 webServer 服务、sidebar.footer.action 插槽
进程标题 主窗口标题需包含 DeepSeek Harness
参考环境 Windows + DeepSeek Harness 0.2.2-rc.1

通过 CLI 安装(推荐)

先在 PowerShell 中从 GitHub 添加插件(desktop 为桌面端默认 profile 名,自定义 profile 请替换):

dsh plugin --profile desktop add github:zhangmaorongXL/dsh-restart-plugin

本地开发可使用 link:

dsh plugin --profile desktop add link:E:/path/to/dsh-restart-plugin

然后确认该 profile 的 package.json 同时包含依赖与 bundle 条目:

{
  "dsh": {
    "profile": {
      "bundles": [
        "dsh-restart-plugin"
      ]
    }
  },
  "dependencies": {
    "dsh-restart-plugin": "github:zhangmaorongXL/dsh-restart-plugin"
  }
}

若 dsh.profile.bundles 中没有 dsh-restart-plugin,需手动加入,否则 cordis.patch.yml 不会应用,插件也不会加载。

首次加载

首次安装完成后,需要手动重启一次 DSH(此时侧边栏尚无重启按钮)。成功后,侧边栏底部会出现 ⟳ 按钮。

典型用法

  1. 在 DSH 左侧边栏底部找到 ⟳ 按钮。
  2. 点击并在确认框中确认重启。
  3. 按钮变为 Restarting... 并禁用;几秒内应用被强制结束并自动重新启动。
  4. 若重启前页面未断开,按钮可能一直显示 Restarting...,属预期行为;应用重启后页面会重新加载。

也可直接调用 Host 暴露的 HTTP 接口(内置客户端使用 POST):

POST /dsh-restart-plugin/force-restart

成功接受重启流程时响应为:

{"ok":true,"message":"Restarting..."}

200 仅表示流程已被接受,不保证进程一定结束或应用一定拉起。该接口无独立鉴权,依赖 DSH Web 服务的访问边界,不宜将 Web 服务暴露到不可信网络。

适用场景与注意

适合:

  • 安装、更新或禁用插件后需要完整重启 DSH;
  • 修改了只在启动时读取的配置;
  • 界面或任务卡住,希望快速重启;
  • 不想手动关窗再打开。

限制与排查要点:

  • 只面向 Windows 桌面端;纯 dsh web + 浏览器场景通常没有标题为 DeepSeek Harness 的窗口,不适合依赖此插件重启。
  • 依赖窗口标题匹配;多个候选时只处理第一个。
  • 当前版本无配置项(超时、标题规则、按钮位置等均未提供)。
  • 权限不足、安全软件拦截 WMI 或 PowerShell 可能导致失败;Host 错误带 [dsh-restart-plugin] 前缀输出到控制台。

常见现象与处理见项目 README 中的故障排查表(如无按钮、点击无反应、退出后未重现等)。

结尾

dsh-restart-plugin 把「完整重启 DSH 桌面端」收拢到侧边栏一次确认,适合插件与配置迭代频繁的 Windows 用户。使用前务必接受强制结束带来的数据与任务中断风险。

  • 插件目录:https://www.skillhub.cn/plugins/zhangmaorongXL/dsh-restart-plugin
  • 源码与文档:https://github.com/zhangmaorongXL/dsh-restart-plugin
羽毛球分组比赛记分
小程序二维码

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

Xiaoye