dsh-mobile-push-notify
Đã xác minhdsh-mobile-push-notify · v0.2.0 · MIT
DeepSeek Harness (dsh) task-completion notifications: native desktop alerts on macOS/Windows/Linux plus zero-config phone pairing (PWA + Web Push) with optional cloudflared public tunnel.
Cài đặt
dsh plugin add dsh-mobile-push-notify Xác nhận layer đã áp bằng dsh --profile default --dump-config — xem hướng dẫn cài plugin.
Mã nguồn
Phát hành lên npm mà không có repository công khai. Hãy kiểm tra nội dung package trước khi cài.
Thẻ
Tác giả
Readme
dsh-mobile-push-notify
DeepSeek Harness (dsh) 任务完成通知插件:一个包、零账号、零手写配置。
- 电脑端:macOS / Windows / Linux 原生系统通知 + 提示音 + 任务摘要与用时
- 手机端:扫码配对后,iPhone / Android 以 PWA 形式打开同一个 dsh Web 界面,任务完成时收到 Web Push 锁屏通知,点击直接回到 dsh 查看结果
- 公网:一键启动 Cloudflare 快速隧道(自动下载 cloudflared,无需账号/域名),人在外面也能收通知和远程查看
与现有方案的关系
目前 dsh 生态里最主流的手机远程监控是“远程同屏 Web 壳 + QR 配对 + 隧道 + PWA/Web Push”(代表:dsh-pocket、@linxin666/dsh-remote-web-ui、dsh-zen-remote)。本插件复用同一套成熟模式,但只聚焦一件事:任务完成时让你第一时间知道,远程界面复用官方 dsh Web,不做第二套 UI。
工作原理(Plugin 层)
一个 npm 包,cordis.patch.yml 自动挂三行宿主插件:
| Row | 模块 | 职责 |
|---|---|---|
task-notify |
dsh-mobile-push-notify |
监听 session/event 的 turn/end / goal/change,发桌面系统通知 |
task-notify-gateway |
dsh-mobile-push-notify/gateway |
spawn 独立网关:扫码配对、反向代理 dsh Web、PWA/Web Push、cloudflared 隧道 |
task-notify-push |
dsh-mobile-push-notify/push |
同一套会话事件决策,把完成通知 POST 给网关,网关用 VAPID + aes128gcm 推送到手机 |
事件语义(与桌面通知完全一致):
- 普通轮次
turn/end+reason.kind === 'completed'→ 通知 error/aborted→ 通知;max-tokens/blocked可选- 目标模式:
goal/change的phase === 'complete'才通知一次,中间轮次不打扰 - 子代理会话(
session.header.parentSession/delegationDepth)默认跳过 - 手机推送对成功类通知做 3s 去抖;错误/取消不去抖
安装
dsh plugin --profile web add dsh-mobile-push-notify
然后重启:
dsh web
无需任何配置,桌面通知立即生效;网关管理页会打印在启动日志里:
[dsh-mobile-push-notify-gateway] 已启动 · 管理页 http://127.0.0.1:3188/admin · 反代目标 http://127.0.0.1:3080
从 git 仓库安装(开发):
dsh plugin --profile web add link:/path/to/dsh-mobile-push-notify
使用
1. 电脑端通知(零配置)
什么都不用做。任务完成时:
- macOS:通知中心横幅 +
Glass提示音(osascript) - Windows:系统 Toast(PowerShell WinRT)
- Linux:
notify-send - 系统通知失败时自动响终端铃兜底
2. 手机配对(一次扫码)
- 电脑浏览器打开
http://127.0.0.1:3188/admin - 局域网:手机和电脑同一 WiFi,扫「局域网配对」二维码即可
- 公网:点「开启公网隧道」,首次会自动下载 cloudflared,稍等出现公网二维码后扫码
- 手机自动进入同一个官方 dsh Web 界面,实时同步
3. 开启手机推送(iOS / Android)
- 配对进入 dsh 后,页面右下角有「🔔 开启任务通知」按钮,点一下并允许通知
- iOS:用 Safari 打开 → 分享 → 添加到主屏幕 → 从主屏幕图标打开 PWA,再点「开启任务通知」(iOS 16.4+;Web Push 必须 HTTPS,请走公网隧道)
- Android Chrome/Edge:可直接安装 PWA 或允许通知
之后任务完成,手机锁屏会收到:
✅ dsh 任务完成 修复 CI 构建失败 用时 3min 12s
点击通知会打开 dsh 界面查看结果。
配置
三行插件的默认值已经够用。需要调整时,在 ~/.dsh/profiles/web/cordis.patch.yml 给对应 id 加 config(见仓库根目录 cordis.patch.yml 的注释),或用环境变量。
常用环境变量
| 变量 | 默认 | 说明 |
|---|---|---|
DSH_TASK_NOTIFY_ENABLED |
1 |
总开关 |
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 --port |
dsh web 端口 |
DSH_TASK_NOTIFY_VAPID_SUBJECT |
mailto:[email protected] |
iOS 严格校验 VAPID subject |
DSH_TASK_NOTIFY_PUBLIC_BASE_URL |
空 | 固定公网地址(如自己的域名反代) |
DSH_TASK_NOTIFY_PAIR_PIN |
空 | 设置后配对需额外输入 PIN |
CLOUDFLARED_BIN |
自动下载 | cloudflared 可执行文件路径 |
可选高级推送
桌面通知行仍保留可选 Bark / 通用 webhook(非零配置,按需开启):
// ~/.dsh/task-notify.json
{
"barkKey": "你的 Bark key",
"webhookUrl": "https://example.com/hook/{{title}}"
}
或对应环境变量 DSH_TASK_NOTIFY_BARK_KEY、DSH_TASK_NOTIFY_WEBHOOK_URL。
安全模型
- 网关反代到
127.0.0.1的 dsh Web,不需要把 dsh web 绑定到 0.0.0.0 - 非回环请求必须携带有效设备 cookie;公网隧道请求按
cf-connecting-ip/x-forwarded-for判为远程,不会绕过门禁 - 配对 token 一次性时效 10 分钟,可刷新;设备可逐台撤销,「停止全部配对」同时清空设备与推送订阅
- 管理页
/admin*与推送发送端点只接受回环;配对设备是完整控制凭据,只配对自己控制的设备 - Web Push payload 由
web-push标准 aes128gcm 加密,推送服务只能看到密文 - 公网隧道会把“能执行代码的 dsh”暴露到互联网,请用完即关;需要固定地址可配
DSH_TASK_NOTIFY_PUBLIC_BASE_URL+ 自己的反代/Cloudflare 命名隧道
开发
npm install
npm test # 16 个测试:桌面通知决策、网关配对/代理/推送、push row
node lib/gateway-server.js # 独立跑网关(可用 DSH_TASK_NOTIFY_GATEWAY_CONFIG 传 JSON 配置)
发布:
npm publish # dshhub / awesome-dsh-plugin 会按 package.json 的 dsh.dshhub 元数据收录
License
MIT