DeepSeek Harness 插件:左上角添加「刷新」「重启」按钮

前言

在 DeepSeek Harness(DSH)里开发插件或调试界面时,经常需要刷新页面或重启应用。桌面版按 ⌘R 在焦点落在输入框时有时不生效,且位置不固定;菜单里的「重启应用与 Host」入口较深。这个插件就在界面左上角「收起侧边栏」按钮旁边,加入「刷新界面」和「重启应用」两个按钮,位置会跟随侧栏的展开/收起与窗口大小自动调整。

是什么

dsh-refresh-restart 是一个给 DeepSeek Harness 桌面界面增加快捷操作的工具插件。它维护者为 hulibuld,分类属于客户端插件。核心价值是在左上角固定位置提供「刷新」和「重启」两个按钮,方便开发与日常使用。

核心功能

  • 刷新界面:等价于在界面里按 ⌘R。只重新加载界面层,宿主后台的生成任务继续运行,正在生成的回答不会被中断。插件代码改动后刷新即可看到效果。
  • 重启应用:点击后弹出二次确认,关闭窗口,几秒后自动重新打开应用。会话与工作区保持不变,等同于菜单里的「重启应用与 Host」。
  • 取消保护:如果重启时应用中有任务在跑,DSH 会再弹一个「关闭应用会中断当前正在进行的任务」的提示;点「取消」则本次重启作废,应用不受影响。

兼容性

  • macOS 桌面版:刷新和重启均可用。
  • Windows 桌面版:刷新和重启均可用(使用 PowerShell 助手处理退出与重开)。
  • Linux 桌面版:刷新和重启均可用(使用 SIGTERM 退出,重开 AppImage 或可执行文件)。
  • 浏览器(dsh web):仅支持刷新界面,重启需要手动操作。

安装与启用

方式零:一行命令(推荐)

# 走 npm,获取最新版本
dsh plugin add dsh-refresh-restart

或者直接安装 GitHub Release 预打包的 tgz:

dsh plugin add https://github.com/hulibuld/dsh-refresh-restart/releases/download/v0.2.1/dsh-refresh-restart-0.2.1.tgz

装完后重启 DSH,左上角即会出现两个按钮。

方式一:插件市场 / 插件管理器

如果 DSH 已安装插件市场,在插件管理器中搜索 dsh-refresh-restart 并安装即可。

方式二:手动安装到 profile

git clone https://github.com/hulibuld/dsh-refresh-restart.git
cd dsh-refresh-restart

假设 DSH 的 profile 目录为 <profile>(例如 desktop),执行以下步骤:

  1. 在 <DSH_HOME>/profiles/<profile>/node_modules/ 下建立软链,指向仓库目录:
   ln -s /path/to/dsh-refresh-restart <DSH_HOME>/profiles/<profile>/node_modules/dsh-refresh-restart
  1. 在 <DSH_HOME>/profiles/<profile>/package.json 的 dependencies 里加入:
   "dsh-refresh-restart": "link:/path/to/dsh-refresh-restart"
  1. 在同一个文件的 dsh.profile.bundles 数组中加入:
   "dsh-refresh-restart"
  1. 重启 DSH。按钮出现在左上角;若未出现,刷新一下页面即可。

卸载时删除上述 1–3 步加入的内容并重启 DSH。

配置

在 cordis.patch.yml 中可调整以下参数(也可写在 profile 的插件配置里):

配置项 默认值 说明
quitTimeoutMs 20000 等应用自行退出的上限。超时按「用户取消」处理,不会强制终止
openDelayMs 800 确认进程消失后,隔多久重新打开应用
appPath 空 留空则自动推断应用路径:macOS 查找 .app,Windows 使用 exe,Linux 优先 APPIMAGE。更换安装位置或使用绿色版时可填写绝对路径
forceKill false 超时后是否强制终止应用。默认关闭;只有应用确实卡死且能接受丢失未保存草稿时才开启

实现方式

插件采用纯本地实现,无运行时依赖,无需构建步骤:

  • index.js:宿主端,导出配置与 apply 函数,注册 status 和 restart 两个路由。
  • client.js:浏览器端,手写 __ModuleLoader__ 模块,注册 shell.overlay 插槽组件。
  • lib/platform.js:平台识别,判断是否支持重启,生成退出与重开计划及助手脚本源码。
  • lib/restart.js:重启服务,持有 token,将助手写入临时目录并 detached 拉起。
  • lib/routes.js:路由封装,校验方法、仅 loopback、action token 与 JSON 响应。
  • cordis.patch.yml:bundle 补丁,将插件注入宿主。
  • test/:使用 node --test 的回归测试。

重启之所以复杂,是因为桌面版是 Electron 应用,宿主只是它的子进程。若只杀宿主,窗口会保留但界面不再响应。因此插件会生成一个脱离宿主的助手,先请应用自行退出,确认进程消失后再重新打开。不同平台的退出与重开命令不同,均已实现。

安全与隐私

  • 所有路由仅监听 127.0.0.1,并校验 Host 头,防止 DNS rebinding 攻击。
  • 重启请求为 POST,必须携带 status 响应中的随机 token(x-dsh-refresh-restart-key 头),跨站 Origin 会被拒绝。
  • 助手脚本写入临时目录,权限为 0700,仅执行退出、等待、必要时强杀与重开。
  • 不联网、不收集任何数据、不读取会话内容;只使用 process.execPath、process.platform 等运行时信息。

排障

  • 按钮未出现:插件清单只在启动时读取,请确认 profile 的 package.json 中 dsh.profile.bundles 包含 dsh-refresh-restart,然后重启应用。
  • 窗口关闭后未重新打开:查看临时目录中的日志文件(Windows 为 %TEMP%\dsh-refresh-restart-<时间>.log,macOS/Linux 为 $TMPDIR/dsh-refresh-restart-<时间>.log)。成功时会写 relaunched ok, new pid=…,失败时会写 relaunch failed: no new process appeared。如果日志停在 helper start,可能是安全软件拦截,请将 DSH 加入白名单再试。
  • 提示「关闭应用会中断当前正在进行的任务」:点「取消」即可,本次重启作废;如想重启请先等待任务结束。
  • 提示「已取消重启」:说明应用未成功退出,一切照常。如果反复出现且确实需要强杀,可将 forceKill 设为 true。
  • 提示「没找到应用位置」:自动推断失败,请在配置中填写 appPath(macOS 填 .app,Windows 填 exe,Linux 填 AppImage)。

生态背景

DeepSeek Harness 的理念是「一切皆插件」,社区插件目录由独立站点维护,与 DeepSeek / 幻方无官方从属关系。本插件为社区维护的非官方工具,仅供本地使用。

总结

这个插件通过在界面左上角提供「刷新」和「重启」两个按钮,解决了在 DSH 中刷新页面与重启应用不便的问题。它实现了跨平台的桌面重启逻辑,并内置二次确认与取消保护,避免误操作。如果你经常调试界面或频繁重启应用,这个插件可以提升日常使用的效率。

插件目录页
GitHub 仓库

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

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

小夜