dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
给 DeepSeek Harness(DSH)加一个重启按钮:点一下就把整个应用重启,回到原来的工作区。
DSH 桌面版(Electron 外壳 + 它管理的服务端进程)没有提供任何界面内的重启入口:改完插件的服务端代码后,只能退出托盘再从快捷方式重新打开。本插件补上这个入口——一个直接落在窗口标题栏的重启按钮。
插件是普通 DSH 插件包,安装在你的 DSH profile 里(desktop 或 web),不修改 DSH 自身文件。按钮只有一个,没有「关闭」。
┌─────────────────────────────── 标题栏 ───────────────────────────────┐
│ 应用 编辑 [ ↻ ] — ❐ ✕ │
└──────────────────────────────────────────────────────────────────────┘
↑ 本插件 ↑ 系统原生按钮
dsh web、macOS 桌面)自动回退到会话头部工具区,渲染同一个按钮,两种位置互斥。插件托管在 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。
无需配置,安装后即可使用。按钮位置按系统原生窗口按钮的宽度自动计算(见「已知限制」)。
desktop(桌面版,按钮落在窗口标题栏)与 web(dsh web,按钮落在会话头部工具区)。dsh web 走同构的 POSIX 路径。插件注册一个同源 HTTP 路由,由一段临时脚本在应用外部重启整个应用;脚本经 .NET 进程接口创建并 detached 脱离 DSH 的进程树(否则它会随被关闭的进程一起消失),关闭旧实例、等端口释放后重新拉起应用,并在任务结束时删除自己。脚本内含宿主的环境变量快照,因此只写在当前用户的临时目录、任务结束即自删;同目录还有一份诊断日志,仅在排查「点了没反应」时才有用。
「应用是否已经在运行」不靠进程名或父子关系判断,而是认它的窗口:枚举顶层窗口,只有属于本应用、可见、没有 owner、且窗口类名恰为 Chrome_WidgetWin_1 的才算一个实例。原因是打包后的 CLI 会在应用退出后留下一个没有窗口的 dsh-desktop-host 孤儿进程(父进程已死,于是它看起来也像「树根」),按进程关系判断会把它当成正在运行的应用,于是旧实例被关掉后再也不会有新的被拉起来。窗口探测失败时只记日志并照常拉起,绝不把「探测不出来」当成「已经在运行」。
src/ 后需要重新构建并重启 DSH,改动才生效。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);本仓库为独立重写,只保留重启功能。