DeepSeek Harness 一键重启插件介绍

前言

DeepSeek Harness(DSH)是一个本地智能体开发框架,其核心设计理念是「一切皆插件」。在本地开发与调试过程中,应用崩溃、配置变更或需要重置状态时,手动重启应用往往打断思路。此外,智能体(Agent)在运行过程中也可能需要主动触发 Harness 的重启以应用新的配置。

g57651/dsh-one-click-restart 插件通过侧边栏按钮与独立守护进程,解决了这一痛点。

插件定位

该插件由用户 G57651 维护,基于 MIT 许可证开源。

它为 DSH 提供了一键重启能力:在侧边栏提供可视化操作入口,同时在内部通过一个独立守护进程(watchdog)来拉起应用。这种设计绕过了 Node/Electron 进程无法直接拉起自身的限制。

核心功能

  1. 侧边栏按钮
    在侧边栏底部(Settings 上方)注入按钮。宽栏显示图标与文字,窄栏(rail)仅显示圆形图标。按钮状态会随重启进度变化(旋转、跳动点、失败提示)。

  2. 模型可调用工具
    提供名为 restart_harness 的工具。模型或 Agent 可以直接调用该工具来触发重启,支持通过 delayMs 参数设置延迟。

  3. 令牌保护的 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」按钮。

典型用法

  1. 配置参数
    在 profile 的 cordis.patch.yml 中覆盖配置项:
    - id: one-click-restart
      name: "@dsh-restart/one-click-restart"
      config:
        appName: "DeepSeek Harness"
        relaunchDelayMs: 1500
  1. Agent 调用
    模型可以直接调用工具:
    {
      "name": "restart_harness",
      "arguments": {}
    }
  1. 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 工作流中。它利用独立进程机制解决了自启动难题,并通过令牌机制确保了安全性。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜