前言¶
DeepSeek Harness(DSH)是一个本地智能体开发框架,其核心设计理念是「一切皆插件」。在本地开发与调试过程中,应用崩溃、配置变更或需要重置状态时,手动重启应用往往打断思路。此外,智能体(Agent)在运行过程中也可能需要主动触发 Harness 的重启以应用新的配置。
g57651/dsh-one-click-restart 插件通过侧边栏按钮与独立守护进程,解决了这一痛点。
插件定位¶
该插件由用户 G57651 维护,基于 MIT 许可证开源。
它为 DSH 提供了一键重启能力:在侧边栏提供可视化操作入口,同时在内部通过一个独立守护进程(watchdog)来拉起应用。这种设计绕过了 Node/Electron 进程无法直接拉起自身的限制。
核心功能¶
-
侧边栏按钮
在侧边栏底部(Settings 上方)注入按钮。宽栏显示图标与文字,窄栏(rail)仅显示圆形图标。按钮状态会随重启进度变化(旋转、跳动点、失败提示)。 -
模型可调用工具
提供名为restart_harness的工具。模型或 Agent 可以直接调用该工具来触发重启,支持通过delayMs参数设置延迟。 -
令牌保护的 HTTP 路由
提供GET /api/restart-harness获取令牌、POST /api/restart-harness触发重启的接口。令牌由宿主生成,用于校验请求来源,防止跨站或未授权访问。
安装与启用¶
安装依赖特定版本的 @deepseek-ai/dsh-tools。DSH 0.2.0 起会对插件声明的 peer 依赖进行预检,版本不匹配会导致安装被拒绝或插件被禁用。
通过 GitHub 仓库安装(仓库包含预构建产物,无需本地构建):
dsh plugin --profile <你的 profile> add github:G57651/dsh-one-click-restart
安装完成后,必须重启 DSH 才能加载插件。重启后,侧边栏左下角会出现「重启 Harness」按钮。
典型用法¶
- 配置参数
在 profile 的cordis.patch.yml中覆盖配置项:
- id: one-click-restart
name: "@dsh-restart/one-click-restart"
config:
appName: "DeepSeek Harness"
relaunchDelayMs: 1500
- Agent 调用
模型可以直接调用工具:
{
"name": "restart_harness",
"arguments": {}
}
- HTTP API
客户端(浏览器页面)通过同源请求获取令牌并触发重启:
# 获取令牌
TOKEN=$(curl -s http://localhost:3000/api/restart-harness)
# 触发重启
curl -X POST http://localhost:3000/api/restart-harness \
-H "x-restart-token: $TOKEN"
工作原理与注意事项¶
工作原理:
由于 Node/Electron 进程无法直接拉起自己,插件使用一个 detached: true 的子进程作为 watchdog。该进程与主进程分离,主进程退出后,watchdog 依然存活。watchdog 负责检测主进程状态并执行拉起操作。
不同运行面的策略不同:
* macOS 桌面端:利用 AppleScript 的 quit 事件优雅退出应用,并在应用消失后通过 open -a 拉起。
* Web / Headless:通过 ctx.appExit(0) 有界退出,watchdog 负责拉起。
平台支持与限制:
* macOS:已实测,支持自动拉起。
* Windows / Linux 桌面端:行为未经验证。代码逻辑上会走 ctx.appExit 路径,但未在真实 Electron 环境中测试。桌面端自动化依赖 macOS 的 open / AppleScript,因此本质上只在 macOS 上做自动化;其他系统的桌面端会退化为「宿主退出 + open 拉起」。
兼容性:
* 依赖 @deepseek-ai/dsh-tools: ^0.1.7-rc.1 || ^0.2.0-rc.1。
* 支持 DSH 0.1.7-rc.x 与 0.2.0-rc.x。
* 仓库包含预构建的 lib/ 目录,直接通过 github: 安装即可使用。
故障排查¶
- 侧边栏无按钮:检查是否重启了 DSH,或 profile 中该插件行是否被
disabled。 - 令牌过期:点击按钮时会自动丢弃陈旧令牌并重新获取。
- Forbidden 错误:请求必须来自本机 loopback 同源页面,跨站请求会被拦截。
- 重启失败:检查日志确认是否因应用名配置错误或宿主被恢复对话框弹窗拦截。
总结¶
该插件为 DSH 开发者提供了一种标准化的应用重启方式,既可通过侧边栏操作,也可集成到 Agent 工作流中。它利用独立进程机制解决了自启动难题,并通过令牌机制确保了安全性。