DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

kee0012 /

kee0012/dsh-restart

Verified

DSH 桌面版标题栏重启按钮:一键重启整个应用(含 shell 与宿主进程)。

★ 0 Stars0 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHub
READMESource: main@64693dd5

dsh-restart

给 DeepSeek Harness(DSH)加一个重启按钮:点一下就把整个应用重启,回到原来的工作区。

简介

DSH 桌面版(Electron 外壳 + 它管理的服务端进程)没有提供任何界面内的重启入口:改完插件的服务端代码后,只能退出托盘再从快捷方式重新打开。本插件补上这个入口——一个直接落在窗口标题栏的重启按钮。

插件是普通 DSH 插件包,安装在你的 DSH profile 里(desktop 或 web),不修改 DSH 自身文件。按钮只有一个,没有「关闭」。

        ┌─────────────────────────────── 标题栏 ───────────────────────────────┐
        │  应用  编辑                                   [ ↻ ]   —    ❐    ✕     │
        └──────────────────────────────────────────────────────────────────────┘
                                                    ↑ 本插件        ↑ 系统原生按钮

功能特性

  • 标题栏重启按钮:位于标题栏最右侧、系统窗口控制按钮(— ❐ ✕)的左边,点击即重启整个应用。
  • 只有重启,没有关闭:不会误触退出,也不会触发外壳的崩溃恢复对话框。
  • 按钮总在:没有桌面标题栏的环境(例如浏览器里的 dsh web、macOS 桌面)自动回退到会话头部工具区,渲染同一个按钮,两种位置互斥。
  • 重启期间有反馈:先出现整屏「DSH 正在重启…」提示,再整体退出并自动重新打开;失败时弹出错误气泡并给出日志位置。
  • 零第三方依赖:不使用运行时依赖,不联网下载任何东西。

安装

插件托管在 GitHub(kee0012/dsh-restart,未发布到 npm),DSH 支持以 git 依赖方式直接安装:

# 从 GitHub 安装(推荐,日常使用;拉取默认分支最新提交)
dsh plugin --profile desktop add github:kee0012/dsh-restart

安装后需要重启 DSH,新的服务端代码与 client bundle 才会生效。

卸载:dsh plugin --profile desktop remove dsh-restart,然后重启 DSH。

使用

  1. 安装并重启 DSH 后,标题栏右侧会出现一个环形箭头按钮(标题栏不可用时则在会话头部)。
  2. 悬停可见提示「立即重启 DeepSeek Harness(当前运行中的任务会中断)」。
  3. 点击 → 出现「DSH 正在重启…」整屏提示 → 应用整体退出并自动重新打开 → 回到原来的工作区。
  4. 若应用没有自动回来,按提示手动启动 DSH 即可;具体原因记录在日志里(见下一节)。

配置

无需配置,安装后即可使用。按钮位置按系统原生窗口按钮的宽度自动计算(见「已知限制」)。

兼容性

  • Profile:desktop(桌面版,按钮落在窗口标题栏)与 web(dsh web,按钮落在会话头部工具区)。
  • 操作系统:Windows 桌面版为主要目标;macOS 桌面与 dsh web 走同构的 POSIX 路径。
  • 运行环境:Windows 需要 PowerShell 5.1+(系统自带)。不依赖 Node 之外的任何运行时。

实现方式

插件注册一个同源 HTTP 路由,由一段临时脚本在应用外部重启整个应用;脚本经 .NET 进程接口创建并 detached 脱离 DSH 的进程树(否则它会随被关闭的进程一起消失),关闭旧实例、等端口释放后重新拉起应用,并在任务结束时删除自己。脚本内含宿主的环境变量快照,因此只写在当前用户的临时目录、任务结束即自删;同目录还有一份诊断日志,仅在排查「点了没反应」时才有用。

「应用是否已经在运行」不靠进程名或父子关系判断,而是认它的窗口:枚举顶层窗口,只有属于本应用、可见、没有 owner、且窗口类名恰为 Chrome_WidgetWin_1 的才算一个实例。原因是打包后的 CLI 会在应用退出后留下一个没有窗口的 dsh-desktop-host 孤儿进程(父进程已死,于是它看起来也像「树根」),按进程关系判断会把它当成正在运行的应用,于是旧实例被关掉后再也不会有新的被拉起来。窗口探测失败时只记日志并照常拉起,绝不把「探测不出来」当成「已经在运行」。

已知限制

  • 重启是整应用级的:所有窗口与未保存的输入都会一起消失(这是桌面版外壳的设计使然——只重启服务端会被判成崩溃)。
  • 服务端代码不热重载:修改插件 src/ 后需要重新构建并重启 DSH,改动才生效。
  • 标题栏按钮的位置按原生窗口按钮的宽度估算;若系统使用超大字号或非默认 DPI 缩放导致原生按钮变宽,按钮可能与其重叠或留缝。
  • macOS 桌面的按钮落位与 Windows 相同,但重启路径(终止进程后重新打开应用)尚未在真机验证。
  • Windows 依赖 PowerShell;它不可用时插件会退回到较弱的启动方式,重启可能失败(日志里有记录)。
  • 助手脚本先用进程外的 .NET 进程接口拉起,且必须回报一次「我已就位」宿主才继续:脚本第一句会写一个就绪标记,宿主等到标记才去关闭应用。若助手没能起来,宿主会直接放弃这次重启并留下日志,而不会先把应用关掉——「关了却回不来」正是这条就绪握手机制要防的事。
  • 与社区插件 PangXitong/dsh-restart-button 同时安装会出现两个重启入口,建议只保留一个。

反馈与贡献

发现了 bug 或有功能建议,欢迎在 Issues 中反馈。提 PR 前请先跑通通用的构建与检查命令。

从源码构建

npm run bundle   # src/ → lib/(零依赖,仅用 Node 内置模块)
npm run gates    # 产物一致性门禁
npm test         # 单元与集成测试
npm run test:e2e # 助手脚本自删与重拉(会真的起进程,但不动正在运行的应用)
npm run test:sim # 启动握手离线取证:只报 pid 而不真启动的 launcher 必须被判失败

src/ 是唯一的手写来源,lib/ 由构建脚本生成,请不要手改 lib/。

许可证

MIT。重启按钮的落位思路参考了社区插件 PangXitong/dsh-restart-button 的公开实现(Apache-2.0);本仓库为独立重写,只保留重启功能。

—/ 5

No ratings yet

Verified DSH bundle

Commit 64693dd54220

Community comments

No comments yet. Be the first to write one.

DSH HUB

A community index for DSH plugins. Not an official GitHub or DeepSeek AI product.

CommunityResourcesAPIAbout