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