dsh-desktop-restart-button:DeepSeek Harness 桌面端一键重启

前言

用 DeepSeek Harness 桌面端时,若要「完全退出再打开」,通常要走托盘菜单退出,再手动双击桌面图标。若当时有活动或定时任务,退出还会弹出原生确认框,外部程序无法代为点击,「无人值守重启」很难做成一条动作。

下面介绍社区插件 dsh-desktop-restart-button(维护者 lzb354411):在界面里加一个「重启」按钮,一次点击完成关闭窗口、结束全部相关进程并自动重新打开桌面端。分类为客户端插件;许可证 MIT;当前包版本 1.0.1(见仓库 package.json)。

这是什么

dsh-desktop-restart-button 是面向 DeepSeek Harness 桌面端的 Cordis 插件包:点「重启」后执行「关闭 → 杀进程树 → 再启动 exe」,省掉退出后再找图标的两步操作。

平台范围:README 写明在 Windows 上的桌面端实测(文档标注 0.2.1-rc.2)。星标以目录页为准为 0;生态上 DSH 强调「一切皆插件」,SkillHub 插件目录 为社区站点,与 DeepSeek / 幻方无官方从属关系。

界面位置:最初设想放在头像弹窗第一行;取证结论是官方账号弹窗行项写死在官方插件内,第三方无法插入。当前实现为头像上方的常驻按钮(功能不变,少一次点开弹窗)。详见仓库 SPEC.md。

核心功能

用户侧行为

  1. 页面渲染「重启」按钮(Client 半边,lib/client.js)。
  2. 点击后向同源路径 POST /dsh-desktop-restart/restart 发起请求。
  3. Host 半边(lib/index.js)拉起独立 PowerShell 重启助手(lib/restart-helper.ps1),完成杀进程与再启动。

内部流程(README 摘要)

页面「重启」按钮
   │  POST /dsh-desktop-restart/restart
   ▼
插件 Host(DSH Host 进程)
   │  WMI 创建助手(父进程 WmiPrvSE.exe,不在宿主进程树内)
   ▼
重启助手
   1) taskkill /T /F 杀掉桌面端根进程及子树
   2) 轮询直到进程表归零
   3) 剔除 ELECTRON_RUN_AS_NODE 后,经 WMI 重新启动桌面端 exe

设计取舍(资料原文要点):

  • 桌面端无可用 IPC 让插件直接触发优雅退出/重启,故采用外部助手 + 强杀。
  • 助手经 WMI 创建,避免被 taskkill /T 一并杀掉;再启动也走 WMI,避免 Start-Process 把桌面端挂成助手子进程(助手结束会连带关闭 DSH)。
  • 重启前必须去掉 ELECTRON_RUN_AS_NODE,否则可能以 Node 模式启动、界面不回来;不要用 resources\runtime\cli\bin\dsh.cmd 拉起桌面 UI。

安全闸门

开发期自测曾误杀真实桌面端,插件加入三道闸门(README 表格):宿主身份校验、按进程树身份验证(不按 exe 名盲杀)、-ExpectApp 期待闸门。自测脚本要求助手仅以 -DryRun 运行,不传 -ExpectApp。

已知代价

重启是强杀,不是优雅退出。 正在跑的任务会立即中断,未落盘状态可能丢失。这是为避开「有任务时原生确认框、一键重启卡死」而做的取舍。点按钮前建议先结束手头任务。

安装与启用

插件以 desktop profile 安装,属于系统级操作,会影响所有工作区。README 给出的安装方式为本地 file: 路径(需先把仓库放到本机目录,占位符请换成你的路径):

& "$env:LOCALAPPDATA\Programs\DeepSeek Harness\resources\runtime\cli\bin\dsh.cmd" `
  plugin --profile desktop add "file:<插件项目目录>/dsh-desktop-restart-button"

装完后需重启桌面端才会加载插件。第一次重启请用托盘退出后手动打开,或双击项目内的 restart-dsh.bat。

改代码后生效:node_modules 里是真实副本而非软链;对同一 file: 再执行 add 可能提示 Already up to date 且不重新复制。要先 remove 再 add。

卸载示例:

& "$env:LOCALAPPDATA\Programs\DeepSeek Harness\resources\runtime\cli\bin\dsh.cmd" `
  plugin --profile desktop why dsh-desktop-restart-button

& "$env:LOCALAPPDATA\Programs\DeepSeek Harness\resources\runtime\cli\bin\dsh.cmd" `
  plugin --profile desktop remove dsh-desktop-restart-button

安装前请自行阅读仓库源码与 MIT 许可证;插件在 DSH 进程权限下运行,强杀逻辑涉及本机进程,仅建议在信任源码的前提下本机自用。

典型用法

日常使用

安装并重启桌面端后,在头像上方点击「重启」即可。文档记录用户于 2026-10-19 验收通过(见 README 阶段表)。

按钮失效时的兜底

  • 仅查看计划、不执行:restart-dsh.bat --dry-run
  • 真正重启:双击 restart-dsh.bat

自测(不碰运行中的应用)

在插件项目目录执行:

cd <插件项目目录>\dsh-desktop-restart-button
node test/run-tests.mjs

README 记载 88 项断言全绿;Agent 须知强调自测不得真实杀进程。

日志

助手每次运行会在 %TEMP%\dsh-desktop-restart\ 留下日志,含各步命令与输出。

适用场景与注意

适合谁:本机自用、经常需要「整应用重启」、且能接受强杀中断任务的 Windows 桌面端用户。

不适合或未覆盖:需要优雅保存会话再退出;非 Windows 平台(README 仅写明 Windows 实测);期望从普通 CLI 宿主或 Node 进程远程触发真实重启(会被闸门拒绝)。

权限与信任:安装等于允许插件在特定条件下结束 DeepSeek Harness 进程树并再次启动 exe。勿按进程名杀 DeepSeek Harness.exe——文档说明本机常有多个同名 Node 运行器实例,插件依赖进程树身份验证而非名字匹配。

仓库主要文件:lib/index.js(Host + HTTP)、lib/client.js(按钮 UI)、lib/restart-helper.ps1(助手)、cordis.patch.yml(组合补丁)、restart-dsh.bat(兜底入口)。

结尾

dsh-desktop-restart-button 把桌面端「退出再打开」收成一次点击,用外部 WMI 助手和强杀策略绕开无 IPC、原生确认框等限制;代价是任务可能被中断,使用前需有心理预期。

羽毛球分组比赛记分
小程序二维码

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

Xiaoye