前言¶
在 macOS 上跑 DeepSeek Harness(DSH)桌面版时,一旦装了新插件或改了配置,往往要靠退出再手动打开才能重新加载。官方发布版没有独立的「重启」命令;开发构建里 App 菜单的「重启应用与 Host」仅在 !app.isPackaged 时注入,日常用户看不到。远程连上 Mac、或习惯用智能体替你操作时,「Cmd+Q 再点开」既慢,也容易在「有进行中任务」时被原生确认框卡住——没人点框,进程就退不下去。下面介绍社区插件 dsh-macos-restart(维护者 craig90x,分类:客户端),它给桌面 DSH 增加设置页按钮和 restart_dsh 工具,并在确认框无法远程处理时用 detached helper 做 quit → 重拉的完整流程。
这是什么¶
dsh-macos-restart 是面向 macOS 桌面版 DSH 的一键重启插件:在 UI 和 agent 工具各提供一个入口,由独立 helper 在宿主退出后负责重新拉起应用。纯 Node 的 dsh web 宿主会明确拒绝,不适用本插件。
当前插件包版本为 0.1.3(见仓库 package.json),要求 Node >=20、DSH >=0.2.0-rc.1。
核心功能¶
装好后有两处入口,行为一致:
| 入口 | 说明 |
|---|---|
| 设置 → 通用 → 「重启 DSH」 | 一行按钮,点一下即触发重启流程 |
工具 restart_dsh |
对 agent 明确说「重启 DSH」时调用;仅响应用户明确要求 |
重启时宿主会 spawn 一个 detached helper,存活于宿主结束之后,大致顺序为:等待 delayMs(默认 1.5s,让 HTTP 响应先送达浏览器)→ osascript quit → 若在 dialogWaitMs(默认 6s)内未退出(常见原因:有任务时弹出原生「确认退出」框)→ 可选 SIGTERM,再 5s 仍不退则可选 SIGKILL 主进程 → 等待主进程与整棵 bundle 进程树消失 → 用 spawn 与 open -n 交替重试拉起,跨过约 15s 的系统回收窗口 → 写日志、系统通知、删除锁文件。
运维相关路径:
- 日志:
~/.dsh/logs/macos-restart.log(每行带阶段) - 锁:
~/.dsh/macos-restart.lock(3 分钟自动过期)
安装与启用¶
通过 DSH 插件管理器安装本地目录(也可在 设置 → 插件 → 添加插件 → 本地目录):
plugin_manager install_bundle target=/path/to/dsh-macos-restart
若需从 GitHub 取得源码,可先 clone 到本地,再执行同一条 install_bundle(路径换成你的目录):
git clone https://github.com/craig90x/dsh-macos-restart.git
plugin_manager install_bundle target=/path/to/dsh-macos-restart
注意: 首次安装后插件尚未加载,需要 手动重启一次 DSH;之后上述重启入口才会生效。
卸载与回滚:
plugin_manager remove_bundle target=dsh-macos-restart
若改过 ~/.dsh/profiles/desktop/cordis.patch.yml,请还原备份后再重启一次 DSH。
配置项¶
可在 profile 的 cordis.patch.yml 或插件默认里调整(片段来自 README):
- id: macos-restart
name: dsh-macos-restart
config:
appPath: /Applications/DeepSeek Harness.app # 应用路径(默认值同此)
delayMs: 1500 # 交接前等待,让 HTTP 响应送达
dialogWaitMs: 6000 # 发出 quit 后等这么久,仍未退出即视为确认框
quitTimeoutMs: 25000 # osascript quit 的超时上限
relaunchTimeoutMs: 30000 # 重拉总时限(需跨过约 15s 的系统回收窗口)
allowSigtermFallback: true # 是否允许 SIGTERM(通常无效,仅先试一下)
allowSigkillFallback: true # 是否允许 SIGKILL 兜底(false 则只优雅退出,远程可能永久卡框)
典型用法¶
- 本地:打开 DSH → 设置 → 通用 → 点击「重启 DSH」。
- 对话:在会话里明确要求 agent「重启 DSH」,由其调用
restart_dsh。 - 排障:重启失败或卡住时查看
~/.dsh/logs/macos-restart.log,对照各阶段日志(quit、SIGTERM/SIGKILL、relaunch 等)。
适用场景与注意¶
适合: 经常在 macOS 桌面 DSH 上装插件、改 cordis 配置,需要少一步「完全退出再打开」;远程维护同一台 Mac 上的 DSH,希望在确认框无人点击时仍能完成重启(默认允许 SIGKILL 兜底)。
务必了解:
- 重启会 中断进行中的任务;有任务时几乎必弹原生确认框。
allowSigkillFallback: false时遇到框可能只能本地人工确认,远程会失败。 - 每次重启后 host 端口会变(README 举例 51489 → 59523);本地窗口由新实例自带,远端访问靠代理自动跟随。
- 若 macOS TCC 拒绝 Apple Events(日志出现
osascript quit failed),helper 会走 SIGTERM/SIGKILL 兜底。 - 插件在 当前 DSH 进程权限 下运行;安装前请自行查看 GitHub 仓库 源码与许可证,确认符合你的环境策略。DSH 生态采用「一切皆插件」思路,SkillHub 目录页 为社区站点,与 DeepSeek / 幻方无官方从属关系。
结尾¶
经过上面的步骤,桌面版 DSH 在 macOS 上多了与发布版对等的「重启」能力,并把远程场景下确认框、进程树回收、重拉误判等边角一并处理进 helper 流程。需要试用或跟进修复记录(如 v0.1.3 对 SIGTERM 在确认框下无效的修正)时,以仓库 README 为准。
- 目录页:https://www.skillhub.cn/plugins/craig90x/dsh-macos-restart
- GitHub:https://github.com/craig90x/dsh-macos-restart