DeepSeek Harness 插件

pc439527/dsh-notify-bark

Star 数 ★ 1 分类 通知与集成 收录于 2026-08-14

Bark 推送通知到 iPhone:回合完成、等待回答、等待授权等事件由 Host 端发送。

安装

# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)

dsh plugin --profile web add github:pc439527/dsh-notify-bark

GitHub 来源的插件在安装时会在你的机器上执行构建脚本。请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。

README

awesome · DSH plugin

License: MIT · Requires: Node ^22.19 · Platform: DSH Host + Web 设置页

English · 简体中文

DeepSeek Harness(DSH)的 Bark 推送通知插件:DSH Host 端监听回合结束、等待回答、等待授权等事件,通过 Bark Server 把通知推送到 iPhone。通知完全在 Host 发送——浏览器关掉、页面刷新、电脑休眠都不影响推送。

  • Host 半端src/index.ts + lib/*.js):session/event 监听 + Bark HTTP 发送 + bark 设置命名空间(ctx.settingssettings.yaml,热更新)+ /dsh-notify-bark loopback RPC。
  • 浏览器半端src/client/ + lib/client.js):注册 settings.section 插槽,表单经 RPC 读写 Host 配置;Bark 地址永不下发到浏览器,只显示脱敏状态(已配置:••••••••3F82)。

通知事件(9 个开关)

事件 触发条件 默认 Bark level
✅ 任务完成 turn/end reason completed active
❌ 执行失败 turn/end reason error timeSensitive
🚫 执行被阻塞 turn/end reason blocked timeSensitive
⏹ 已中止 turn/end reason aborted passive
⚠️ Token 达到上限 turn/end reason max-tokens timeSensitive
⏸ 异常中断 turn/end reason interrupted timeSensitive
❓ 等待你的回答 tool/call ask_user_question timeSensitive
🔐 等待你的授权 approval/asked timeSensitive
📋 计划待确认 tool/call exit_plan_mode timeSensitive

标题固定为工作区名(session.header.cwd 最后一级),状态放在 body 第一行;可选附带 AI 最后一段回复、body 长度上限、Bark Group。

安装

从 GitHub 直接安装(仓库内置编译产物,克隆即可用,无需先构建):

dsh plugin --profile web add https://github.com/pc439527/dsh-notify-bark.git

或本地路径:

dsh plugin --profile web add /path/to/dsh-notify-bark

dsh plugin add 会执行 pnpm add(写入依赖 + dsh.profile.bundles),插件包自带的 cordis.patch.yml 插入 bark-notify 行。当前已在运行的 dsh web 通过 Cordis HMR 监听 profile 的 cordis.patch.yml——在用户层追加同一插入行即可热加载,无需重启服务:

# $DSH_HOME/profiles/web/cordis.patch.yml
- insert:
    - id: bark-notify
      name: 'dsh-notify-bark'

浏览器刷新设置页(齿轮 → Bark 通知)即可看到配置表单。

安全与隐私

  • 无内置密钥barkUrl 默认值为空,由每个部署者自行在设置页填写自己的 Bark 地址(https://api.day.app/你的key);本仓库不含任何真实凭据(测试仅用假 key testkey)。
  • 凭据不进浏览器barkUrl 在 schema 中声明为 role('secret'),RPC 只回传脱敏状态(已配置:••••••••3F82),日志只输出 configured: true/false
  • 配置只存 Host:写入 Host 端 settings.yaml,不会上传到任何第三方;通知仅发送到你配置的 Bark 地址。

开发

pnpm install        # typescript / @types/node(锁文件 pnpm-lock.yaml)
pnpm run build      # tsc 编译 Host 半端到 lib/;client bundle 直接维护在 lib/client.js
pnpm test           # node:test 单元测试(发送层 / 事件映射 / 默认值 / 去重 / 脱敏)

结构

dsh-notify-bark/
├── package.json          # dsh.client 声明 + bundle patch 声明 + 仓库元信息
├── pnpm-lock.yaml        # pnpm 锁文件
├── cordis.patch.yml      # 插件行插入
├── LICENSE               # MIT
├── src/
│   ├── index.ts          # Host 入口:settings 注册 + 事件监听 + RPC
│   ├── bark-service.ts   # Bark HTTP 发送(超时 / 错误分类)
│   ├── event-listener.ts # session/event → 通知意图(去重 / 标题 / 内容)
│   ├── settings-store.ts # 设置模型 / schema / 默认值 / 脱敏
│   ├── rpc-contract.ts   # /dsh-notify-bark 通道契约
│   ├── rpc.ts            # Host RPC(get 脱敏 / set / test)
│   └── client/           # 浏览器半端源码(lib/client.js 为其 bundle 镜像)
├── lib/                  # 部署产物(tsc 编译的 Host + 手写 module-loader bundle)
└── tests/                # node:test 单元测试

设计要点

  • 通知走 Hostctx.on('session/event') 直接监听(与 dsh-im-bridge 同路径),浏览器只是配置面板。
  • 配置存 Hostbark 命名空间注册进 ctx.settings,持久化到 settings.yaml;DSH 的 Web 设置 wire 有命名空间白名单(WEB_SETTINGS_NAMESPACES),第三方命名空间走 settings-not-exposed,所以设置页用专用 RPC(同 dsh-codex-auth 架构)读写。
  • 凭据不进浏览器barkUrl 声明为 role('secret') 且 RPC 只回传脱敏状态(已配置:••••••••3F82);日志只输出 configured: true/false
  • 事件去重sessionId + event.seq 键 + 有界台账,重连/重放不会重复推送。

参考与致谢

  • 架构模式参考(仅借鉴设计,未复制代码):
    • dsh-im-bridge——session/event 监听路径(DeepSeek 内部插件,未公开);
    • dsh-codex-auth——设置页经专用 RPC 读写 Host 配置的模式(DeepSeek 内部插件,未公开)。
  • 插件运行平台:DeepSeek Harness(MIT)。
  • 推送服务:Bark(开源 iOS 推送服务)——本插件只向用户自行配置的 Bark 地址发送 HTTP 请求,不包含或分发 Bark 代码。

许可证

MIT。按现状提供,无任何明示或暗示的担保;因使用本插件造成的任何损失由使用者自行承担。贡献者提交代码即视为同意以 MIT 许可授权。

内容来自项目 README(GitHub)↗

链接

同类插件

查看整个分类 →