READMESource: main@949497ec
dsh-restart
简体中文 | English
一键重启 DeepSeek Harness 桌面端的小插件。
在侧栏顶部、折叠按钮左侧放一个常驻胶囊按钮(图标 + “重启”),点击 → 确认 → 完全退出并自动重新打开应用,省掉 ⌘Q 再点开的两步。按钮位置会随侧栏宽度、窗口大小和全屏状态自动对齐;全屏下折叠按钮移到左侧时,按钮改放到它右边。

功能
- 一键重启:按钮点击后弹出确认,确认后由独立 helper 脚本完成“退出 → 等待进程消失 → 重新打开”。
- 失败兜底:helper 先尝试正常退出,最多等 10 秒;不行再
TERM,再不行KILL,确认完全退出后才重新打开。 - 日志:每次重启写入
~/.dsh/restart.log,方便排查“关了没起来”的情况。 - 仅 macOS:非 macOS 宿主上按钮自动隐藏,接口返回 501。
- 同源限制:
POST /api/dsh-restart/restart只接受回环来源,避免跨站触发。
安装
本仓库是标准的 DSH bundle 插件(dsh.bundle + dsh.client)。
方式一:插件页安装(推荐)
- 打开 DSH → 设置 → 插件 → 添加插件;
- 选择本仓库目录(包含
package.json的那一层); - 安装后完全退出并重新打开 DSH 一次(按钮本身还不可用,因为插件要重启才加载)。
方式二:命令行
dsh plugin --profile desktop add /absolute/path/to/this/repo
装完同样需要完全退出 DSH 再打开。
本机已经安装到
desktopprofile(link 到本仓库)。第一次仍需手动退出并重开一次,按钮才会出现;之后再重启就点按钮即可。
使用
重启后,侧栏左上角会出现一个环形箭头按钮:
- 悬停显示“重启 DeepSeek Harness”;
- 点击弹出确认框,提示“正在运行的会话与任务会中断”;
- 点“立即重启”后界面会先消失,应用退出并自动重新打开(约 4–6 秒)。
实现说明
- Host 半边
index.js:注册两个只读/受控路由:GET /api/dsh-restart/status→{ canRestart, platform }POST /api/dsh-restart/restart→ 以detached: true启动scripts/restart-dsh.sh
- Helper
scripts/restart-dsh.sh:脱离 DSH 进程组运行,负责退出与重新打开。它会等所有 DSH 进程消失,再等 1.5 秒(DSH_RESTART_SETTLE_SECONDS),然后用清理过 Electron/Node 环境变量的open重开,并检查新主进程存活 1.5 秒;失败每 2 秒重试,最多 3 次。 - 为什么必须清理环境:
open(1)会把调用者的环境传给被拉起的 App,而 DSH 宿主进程带ELECTRON_RUN_AS_NODE=1;不清理的话,新实例会以 Node 模式启动——Dock 跳一下、没有窗口、随即退出。 - Client 半边
client.js:通过shell.overlay注册按钮,测量侧栏顶栏里折叠按钮的位置,把 72×28 的胶囊放在它左边(8px 间距);并处理确认、忙碌与错误状态。
按钮位置来自 DSH 0.2.1-rc.5 的布局:macOS 下侧栏顶栏高 52px、只放右侧折叠按钮;shell.overlay 是唯一能精确落在此处的官方插槽。顶栏没有专用插槽,因此按钮通过 data-window-drag 标记找到顶栏、再测量其中唯一的按钮(折叠按钮)。侧栏宽度、窗口缩放、折叠、全屏变化都会重新测量;DSH 改版后可能需要微调选择器。
调试
helper 支持干跑,只打印识别到的主进程 PID、不退出应用:
DRY_RUN=1 bash scripts/restart-dsh.sh
注意:macOS 的
pgrep -f在当前 Electron 主进程上匹配不到(只能匹配到 helper 进程),所以脚本改用ps -axo pid=,comm=按可执行路径识别主进程,再按 PID 发送信号。
限制
- 重启会中断当前会话里正在运行的任务。
- 若 helper 退出应用后
open -a失败,DSH 不会自动回来;查看~/.dsh/restart.log并手动打开。 - 插件只对安装它的 profile 生效(本机是
desktop)。 - 只在 macOS 桌面端测试;Web 端按钮会因
canRestart: false隐藏。
卸载
dsh plugin --profile desktop remove @local/dsh-restart
然后完全退出并重新打开 DSH。
License
MIT
No comments yet. Be the first to write one.