dsh-mobile-push-notify:任务/目标完成通知(桌面原生 + 手机 Web Push)

前言

DeepSeek Harness (dsh) 的设计理念是“一切皆插件”。在开发或运维场景中,智能体任务往往在后台运行,任务完成时开发者可能不在终端旁。如何第一时间获知任务状态是常见痛点。

目前 DSH 生态中存在一些远程监控插件(如 dsh-pocket),它们通常提供完整的 UI 交互。本插件复用同一套成熟模式,但聚焦于“通知”这一单一核心:提供 macOS/Windows/Linux 原生桌面通知,并支持零配置的手机端 PWA/Web Push 配对,让任务完成状态实时同步到手机锁屏。

核心功能

本插件提供以下能力:
* 桌面原生通知:在 macOS、Windows 和 Linux 上弹出系统通知,包含任务摘要与耗时。
* 手机扫码配对:通过 PWA 或 Web Push 协议,将手机与电脑配对,接收锁屏通知。
* Cloudflare 快速隧道:一键启动公网隧道,在无公网 IP 或非内网环境下也能使用手机推送。
* 能力拆分:提供 task-notify(桌面)、mobile-push-notify-gateway(网关/隧道)和 mobile-push-notify-push(推送)三个独立模块。

安装与启用

安装插件需要使用 dsh plugin 命令,无需手动下载代码。

  1. 安装插件
    dsh plugin --profile web add dsh-mobile-push-notify
  1. 重启 Web 服务
    dsh web
  1. 查看日志
    插件启动后会自动开启一个网关。在终端启动日志中可以看到管理页地址,默认为 http://127.0.0.1:3188/admin。

使用方法

1. 电脑端通知(零配置)

安装并运行后,无需额外设置。当 DSH 中的任务完成(如 turn/end 事件且状态为完成,或 goal/change 且阶段为完成)时,系统会自动发送通知。
* macOS:通知中心横幅 + Glass 提示音。
* Windows:系统 Toast。
* Linux:notify-send。
* 如果系统通知服务不可用,终端会自动响铃作为兜底。

2. 手机配对

通过手机访问网关管理页进行配对。

  1. 在电脑浏览器打开 http://127.0.0.1:3188/admin。
  2. 局域网配对:确保手机和电脑在同一 WiFi 下,扫描页面上的“局域网配对”二维码。
  3. 公网配对:点击页面上的“开启公网隧道”。首次使用会自动下载 cloudflared 二进制文件,稍后出现公网二维码后扫码。

配对成功后,手机会自动打开 DSH 的官方 Web 界面,保持实时同步。

3. 开启手机推送

  1. 在手机上进入 DSH Web 界面。
  2. 点击页面右下角的 “🔔 开启任务通知” 按钮,并允许浏览器发送通知。
  3. iOS 用户注意:建议通过 Safari 打开,点击分享按钮“添加到主屏幕”以 PWA 形式安装,再点击开启通知(iOS 16.4+ 要求 HTTPS)。
  4. Android 用户:可直接在 Chrome 或 Edge 中安装 PWA 或允许通知。

之后,当任务完成时,手机锁屏会收到包含任务标题、摘要和耗时的通知,点击可直接跳转回 DSH 界面查看详情。

配置说明

插件的默认配置已满足大部分场景。如需调整,可通过环境变量或修改配置文件 ~/.dsh/profiles/web/cordis.patch.yml。

常用环境变量

变量名 默认值 说明
DSH_TASK_NOTIFY_ENABLED 1 总开关,设为 0 禁用通知。
DSH_TASK_NOTIFY_EVENTS completed,error,aborted,goal-completed 需要触发通知的事件类型。
DSH_TASK_NOTIFY_SOUND Glass macOS 提示音名称,设为 none 可静音。
DSH_TASK_NOTIFY_BELL 0 系统通知失败时是否响铃。
DSH_TASK_NOTIFY_GATEWAY_PORT 3188 网关监听端口。
DSH_TASK_NOTIFY_TARGET_PORT 自动读取 DSH Web 服务监听的端口。
DSH_TASK_NOTIFY_VAPID_SUBJECT mailto:... iOS 严格校验的 VAPID 邮箱地址。

高级推送

插件支持扩展到 Bark 或通用 Webhook。

Bark 配置(需在 ~/.dsh/task-notify.json 或环境变量中设置):

{
  "barkKey": "你的 Bark Key",
  "webhookUrl": "https://example.com/hook/{{title}}"
}

安全模型

理解插件的安全机制有助于在公网环境下安全使用。

  • 内网隔离:网关默认将流量反向代理到 127.0.0.1 的 DSH Web 服务。因此,不需要将 DSH Web 绑定到 0.0.0.0,本地网络更安全。
  • 访问控制:管理页 /admin* 及推送发送端点仅接受回环请求(Loopback)。配对设备拥有完整控制权限,请勿将配对二维码分享给他人。
  • 配对安全:配对 Token 有效期为 10 分钟。配对过程使用一次性 Token,设备可单独撤销,或通过“停止全部配对”清空。
  • 公网隧道风险:开启 Cloudflare 隧道会将拥有代码执行能力的 DSH 暴露到互联网。请用完即关。若需长期固定地址,建议配置 DSH_TASK_NOTIFY_PUBLIC_BASE_URL 并使用 Cloudflare 命名隧道或自有反向代理。
  • 推送加密:Web Push 使用 aes128gcm 标准加密,推送服务仅能访问密文。

兼容性

  • DSH 版本:dsh >= 0.1.0-rc.5
  • Node 版本:node >= 20
  • 权限要求:
    • exec: 需要 osascript, notify-send, powershell 等工具。
    • network: 需要 webhook 访问权限及 github.com 等域名解析。

License

MIT

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

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

小夜