前言¶
在 DeepSeek Harness(DSH)里装插件或改 profile bundle,通常要重启整个桌面进程才会加载新代码。桌面版界面上却没有明显的「重启」入口,常见做法是到托盘退出再重新打开,步骤多,也容易和「关窗口」混淆——主窗口关闭往往只是藏到托盘。
dsh-restart 是社区维护的客户端插件,在 Windows 标题栏「应用 / 编辑」旁增加「重启」按钮,用两次点击触发完整重启,让新装的插件尽快生效。下文介绍它的定位、行为、安装方式与使用时的边界。
这是什么¶
- 名称:dsh-restart(仓库 csuwzw/dsh-restart)
- 维护者:csuwzw
- 分类:客户端(标题栏 UI + 宿主 API)
- 许可证:MIT;当前资料中的版本为 1.0.2
- 平台:仅 Windows 桌面版;README 标明在 DSH 内核 0.2.0-rc.2 上验证通过
插件不改内核:零依赖、无构建步骤,通过 profile bundle 挂载宿主端路由与浏览器端按钮。
核心功能¶
标题栏两次点击重启¶
按钮紧挨「应用」「编辑」右侧,样式挂在 preload 菜单条的 shadow DOM 里,与相邻菜单项高度、内边距、hover 一致;界面文案跟随 <html lang>。
- 第一次点击:文案变为「确认重启?」;4 秒内不点会自动撤销。
- 第二次点击:显示「正在重启…」并禁用;旧实例被结束,新实例自动拉起。
README 描述约 9 秒 后回到可用界面。重启会终止正在运行的任务,因此采用二次确认。
宿主侧重启通路¶
浏览器通过 POST /api/dsh-restart/restart 触发(需自定义头 x-dsh-restart-action: restart,且仅接受本机回环来源,降低 CSRF 风险)。宿主收到响应后约 300ms 再通过 WMI 启动 restart.ps1,使重启脚本脱离 DSH 的 job object,避免旧进程退出时把子进程一并带走。
脚本使用 conhost.exe --headless 包裹 PowerShell,避免在默认终端为 Windows Terminal 时弹出无法关闭的控制台窗口。步骤写入 $DSH_HOME/logs/dsh-restart-plugin.log;成功判据是新实例的 Host 子进程开始监听,而非固定端口号(桌面版常以 --port 0 启动)。
安装与启用¶
前置:DeepSeek Harness Windows 桌面版。
方式一:桌面版内置 CLI(推荐)¶
桌面版可通过 @deepseek-ai/dsh-desktop-host/lib/cli.js 管理 desktop profile。在 cmd 中把安装路径换成本机目录后执行(资料原文示例,固定 v1.0.2 的 codeload 包,不需要本机安装 git):
set ELECTRON_RUN_AS_NODE=1
"C:\D\software\DeepSeek Harness\DeepSeek Harness.exe" --expose-internals ^
"C:\D\software\DeepSeek Harness\resources\app.asar\dsh\node_modules\@deepseek-ai\dsh-desktop-host\lib\cli.js" ^
plugin --profile desktop add https://codeload.github.com/csuwzw/dsh-restart/tar.gz/refs/tags/v1.0.2
README 说明:github:csuwzw/dsh-restart 等写法会触发 git ls-remote,在未安装 git 的 Windows 上容易失败;跟最新 main 可用 refs/heads/main 的 codeload URL,但版本不可复现。
装完后仍需 手动重启一次,标题栏按钮才会出现;之后可用按钮完成后续重启。
方式二:设置里的插件管理器¶
打开 设置 → 插件,在安装框填入仓库地址或本地目录,由应用自己的安装通道处理。
方式三:手工放置¶
将 package.json、index.js、client.js、restart.ps1、cordis.patch.yml 放到 <DSH_HOME>/profiles/desktop/node_modules/dsh-restart/,在 profile 的 package.json 的 dependencies 加入 "dsh-restart": "1.0.2"(勿用 link:),在 dsh.profile.bundles 末尾追加 "dsh-restart",再重启应用一次。勿在 cordis.patch.yml 重复注册 bundle 已带的 patch,否则会报 duplicate loader entry。
安装后验证¶
查看 $DSH_HOME/logs/dsh-restart-plugin.log,四步记录齐全且最后一行 verdict=ok,表示链路可用。README 给出的示例行包含 armed、taskkill、launched、verify 等阶段。
典型用法¶
日常流程:
- 在 DSH 中安装或更新其他插件、修改 bundle 列表。
- 点击标题栏 重启 → 在 4 秒内再次确认。
- 等待按钮进入「正在重启…」及日志中的
verdict=ok,再验证新插件是否加载。
开发插件时,README 提醒:宿主端与客户端 bundle 的改动都要重启 DSH 才生效;未启用客户端 HMR 时,仅刷新页面不会拿到新版 client.js。本地可运行:
node client.test.cjs client.js
对 client.js 做离线自测(资料中称 25 项检查,需 Node ≥ 20)。
适用场景与注意¶
适合谁
- 经常在 Windows 桌面版 DSH 里试装、迭代插件的开发者。
- 希望少走托盘退出路径、用固定 UI 完成重启的用户。
务必知晓
- 仅 Windows:重启脚本依赖 WMI、
conhost.exe、taskkill。 - 不等待任务收尾:与桌面版缺少可用优雅退出通路一致,重启会强制结束当前任务。
- 无失败自动重试:旧实例已结束后盲目重试可能产生重复实例。
- 权限与安全:插件以当前 DSH 进程权限运行;安装前请阅读 源码 与 MIT 许可证,确认接受其通过 WMI 结束进程并拉起新实例的行为。
DSH 生态强调「一切皆插件」;SkillHub 目录页 是社区收录站点,与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-restart 解决的是「装插件必重启、界面却无入口」这一具体缺口:标题栏两次点击、日志可追、重启脚本与 job object 隔离。若你在 Windows 桌面版 DSH 上频繁改插件,可以把它当作固定工具链中的一步。