dsh-restart-foot: One-click Restart at the Bottom of the DSH Desktop Sidebar

前言

在 DeepSeek Harness(DSH)里装插件、改配置之后,要让界面和宿主加载新内容,往往需要退出整个桌面应用再手动打开。浏览器里刷新页面即可,但 DSH 桌面壳走的是 dsh-app: 协议,没有「只刷新不重开进程」的等价操作;主进程、渲染进程和 DSH 宿主是一棵树,半吊子的退出容易留下锁或重复实例。下面介绍社区插件 dsh-restart-foot:在侧栏底部、头像/设置入口正上方加一枚重启按钮,两次确认后结束整棵进程树并重新拉起,且重启辅助脚本不弹出控制台窗口。

这是什么

dsh-restart-foot 由 GitHub 用户 1207291706 维护,分类为客户端插件,MIT 许可,当前版本 1.0.0(见仓库 package.json)。它只做一件事:在 DSH 桌面应用侧栏 foot 区域注册一行操作,点击后按既定流程停止应用可执行文件对应的全部进程,再启动同一路径的可执行文件。装完插件或改完设置后,不必到任务栏或系统托盘里手动退出。

社区目录页:https://www.skillhub.cn/plugins/1207291706/dsh-restart-foot
源码与说明:https://github.com/1207291706/dsh-restart-foot

DSH 生态强调「一切皆插件」;SkillHub 等目录是社区站点,与 DeepSeek / 幻方无官方从属关系。

按钮位置与 UI 约束

该行注册在 sidebar.footer.action 插槽。侧栏 foot 是自下而上的栈(.footArea → .footerActions → .settingsArea),因此按钮出现在账号/设置区块的正上方,而不是点头像弹出的菜单里——官方 @deepseek-ai/dsh-client-ui-settings-account 的 AccountMenu 无扩展插槽,放在 foot 行是唯一不覆盖内置 UI 的加法。

控件使用壳层自带的 Button、Tooltip 与刷新图标,颜色与焦点环跟随设计系统;交互时有悬停半圈、按下、armed 时轻晃、重启中旋转等动效,prefers-reduced-motion 下全部关闭。

核心行为

  1. 第一次点击:进入确认态,按钮变为错误色并显示「再点一次确认」,约 5 秒无操作则恢复 idle。
  2. 第二次点击:向宿主发送 POST /dsh-restart-foot/restart,请求头须带 x-dsh-restart-foot: 1,避免误触、预取或其它标签页误停应用。
  3. 无控制台窗口:宿主写入批处理,经 wscript.exe 以 GUI 子系统、隐藏窗口方式 detached 启动辅助进程。桌面应用通过 job object 管理子进程,若辅助进程不 detach,会随主应用一起被杀死而无法完成重启。
  4. 批处理顺序:等待约 1 秒以便 HTTP 响应返回 → 按应用镜像名结束进程 → 轮询确认进程已退出(最长约 20 秒)→ 对残留 pid 强制结束 → 再启动可执行文件。重启前会清除继承的 ELECTRON_RUN_AS_NODE,否则二次启动可能变成无脚本的 Node 进程并立刻退出(表现为「关了就再没起来」)。
  5. 启动后校验:最多约 20 秒等待应用进程再次出现,并写入日志;失败时按钮 tooltip 与 /dsh-restart-foot/ping 的 lastLaunchError 会保留原因。

运行中的 Agent 回合会被中断,与会话相关的日志在磁盘上,重开会话可继续。日志文件:%TEMP%\dsh-restart-foot.log(逐步记录 request、stop、wait、force-stop、start、back 等)。

环境要求

  • DeepSeek Harness 桌面应用,且运行在 Windows 上。
  • 客户端仅在页面 origin 为 dsh-app: 时注册;在普通浏览器访问 http://127.0.0.1:<port> 时没有可重启的桌面壳,该行不会出现。
  • 宿主侧若 process.execPath 不是桌面可执行文件(例如在终端里 dsh web 时的 node.exe),重启相关路由会返回 501。
  • Node 20+;无构建步骤,无运行时 npm 依赖。

安装与卸载

当前推荐从 GitHub 安装(npm 包已打好但作者网络无法注册 npm 账号,正式上架前不可用 dsh plugin add dsh-restart-foot):

dsh plugin add github:1207291706/dsh-restart-foot

同一来源的 git 写法:

dsh plugin add git+https://github.com/1207291706/dsh-restart-foot.git

指定 profile 时:

dsh plugin add --profile desktop github:1207291706/dsh-restart-foot

安装后刷新页面(或仍用旧方式重启一次)以加载客户端模块。

卸载:

dsh plugin remove dsh-restart-foot

典型用法

日常流程:安装或更新其它 DSH 插件、修改需重启宿主才生效的配置 → 在侧栏底部找到「Restart DeepSeek Harness」(中文 locale 下为对应文案)→ 连续点击两次确认 → 等待应用自动关闭并重新出现。

若点击后 seemingly 无反应,可按 README 建议顺序排查:按钮 tooltip 上的失败文案 → GET /dsh-restart-foot/ping(含 lastLaunchError)→ POST /dsh-restart-foot/selfcheck(需同样请求头,仅做启动能力探测)→ %TEMP%\dsh-restart-foot.log。

探测类路由(不杀真实进程):

方法 路径 用途
GET /dsh-restart-foot/ping 存活探测:平台、是否找到桌面目标、可执行路径、PowerShell 路径、lastLaunchError
POST /dsh-restart-foot/restart?probe=1 报告目标,不操作进程
POST /dsh-restart-foot/selfcheck 诊断 cmd/PowerShell 探针,不写真实进程

路由由 DSH Web 服务提供,凡能访问该端口的客户端均可调用;默认绑定 loopback 时可限制仅本机访问。

适用场景与注意

适合:经常在 Windows 桌面 DSH 里迭代插件与配置、希望少一步手动退出再打开的开发者。

务必注意:

  • 插件以当前 DSH 进程权限运行;安装前应阅读 index.js、client.js 等源码并确认 MIT 许可证与行为是否符合预期。
  • 仅 Windows 桌面壳;Linux/macOS 或纯 dsh web 场景不适用。
  • 重启会中断进行中的 Agent 任务,属预期行为。

实现思路上, detached 辅助进程、按镜像名停止、确认退出后再启动等做法,参考了 MIT 许可的 dsh-restart-button(CZY1326);本仓库为独立实现,插槽、路由前缀、辅助脚本与日志路径均不同。

结尾

dsh-restart-foot 把「整应用重启」收进侧栏底部两行点击里,针对 Windows 桌面 DSH 的进程模型做了 detach、ELECTRON_RUN_AS_NODE 清理与退出轮询,避免无控制台辅助脚本被 job object 拖死或二次启动失败。需要安装命令与路由细节时,以 GitHub README 为准。

  • 目录页:https://www.skillhub.cn/plugins/1207291706/dsh-restart-foot
  • 仓库:https://github.com/1207291706/dsh-restart-foot
羽毛球分组比赛记分
小程序二维码

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

Xiaoye