dsh-plugin-notify

DSH PLUGIN浏览器与联网

仓库 goodandready/dsh-plugin-notify

浏览器与联网 未标注验证等级 安全审查:未标注 可信度:未标注 可安装插件

为 DeepSeek Harness 补齐回合完成、报错与审批等待的提醒能力:音频提示、跨会话浮窗、桌面推送及飞书、企微、钉钉、Slack 等 IM webhook 通知。

一句话选型结论

按资料字段整理

dsh-plugin-notify 是浏览器与联网类的 DSH 可安装插件,未做沙盒验证,暂无安全审查结论,列出 5 项功能,没有现成安装命令,需要按仓库 README 接入。验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么;涉及密钥或系统权限的,建议先在隔离环境试装。

分类浏览器与联网 收录类型可安装插件 验证等级未标注验证等级 安全审查未标注
验证等级 UNKNOWN 未标注验证等级
GitHub 星标 1 复刻 1 · 未关闭 issue 0
最近更新 2026-10-10 创建于 2026-09-18
README 13.5 KB 正文体量,越大说明说明书写得越细

安装

可安装插件
在 DSH 里执行,装完用 dsh plugin list 确认已挂上;标了 L4 / L5 的命令已在沙盒里真实跑通
  1. 1
    确认版本与运行环境

    仓库没有标注兼容版本与 Node.js 要求,先确认你的 DSH 版本能装,再继续。

  2. 2
    执行安装命令

    在 DSH 里执行上面的命令;多包仓库要注意区分具体子包名,别装错包。

  3. 3
    确认已挂载

    用 dsh plugin list 查看列表里是否出现这个插件,出现即挂载成功。

  4. 4
    试跑并检查权限

    加载后跑一个最小用例,确认它能正常工作;同时看它申请了哪些文件、命令或网络权限。

兼容 DSH 版本未标注版本不匹配时安装会报错
Node.js 要求未标注来自仓库 package.json 的 engines 字段
前置依赖无需要同时安装的同级依赖
npm 包名未发布到 npm可用 npm view 查看包信息

能做什么

5 项功能
字段来自项目仓库与公开索引,中文说明由本站标注

dsh-plugin-notify:为 DeepSeek Harness 补齐会话事件提醒

  • 回合完成/报错/审批音频提示
  • 跨会话浮窗一键跳转会话
  • 桌面系统级推送通知
  • 飞书企微钉钉 Slack webhook
  • 免打扰时段与会话前缀过滤

上游标签

deepseek-harnessdsh-plugin

验证等级与安全审查

未标注验证等级
自动化流程结论,不是人工审核
验证等级未标注验证等级上游未给出验证结论,安装前请自行确认
安全审查未标注静态分析结论,未标注不代表已通过审查
仓库健康度未标注按仓库活跃度与最近更新时间给出
可信度未标注综合仓库活跃度与验证结果

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 列出了 5 项功能,能直接看出它解决什么问题。

先想清楚的地方

  • 安全审查还没结论,装之前先看仓库改了什么、要什么权限。
  • 没有现成安装命令,要按仓库 README 手动接入。
  • 验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么。

更适合

  • 需要在浏览器与联网场景里给 DSH 补能力的人。
  • 能接受在本地装依赖、愿意自己确认权限的人。

不太适合

  • 只使用 DSH 官方内置能力、不接受第三方插件的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
插件验证等级安全审查星标兼容版本安装命令
dsh-plugin-notify当前 未做沙盒验证 未标注 1 未标注 无
dsh-our-free-model L3 · 安装规范通过 低风险 8,796 未标注 有
dsh-web L3 · 安装规范通过 低风险 8,549 未标注 无
BrowserSkill L4 · 沙盒安装通过 低风险 8,456 未标注 有
dsh-pocket L5 · 运行验证通过 低风险 1,656 0.2.0-rc.2 等 12 个 有
Browser4 L4 · 沙盒安装通过 中风险 1,152 未标注 有

仓库档案

浏览器与联网
字段来自项目仓库与公开索引,中文说明由本站标注
作者 / 维护方goodandready仓库 dsh-plugin-notify · 默认分支 main
分类浏览器与联网integration
收录类型可安装插件声明了 dsh.bundle、可用 dsh plugin add 安装的条目
开发语言JavaScript仓库主语言
许可证MIT商用或二次分发前请确认条款原文
星标 / 复刻 / issue1 / 1 / 0收录时的数值,非实时
创建 / 更新2026-09-18 · 2026-10-10最后推送 2026-10-10
本站收录2026-09-21首次进入本站目录的时间

README 全文

13.5 KB
作者原文,中文版优先;只做安全转义,不改内容

📦 @goodandready/dsh-plugin-notify

网页推送、IM Webhook、提示音、横幅与桌面通知:回合完成、出错、等待审批全场景覆盖

🇬🇧 English •
🇨🇳 中文说明 •
🇷🇺 Русский

⭐ 如果您喜欢这个插件,请在 GitHub 上为它点亮 Star — 这能让我知道插件对您有用,并鼓励我继续开发和维护它。
🐛 如果您发现 Bug 或希望增加功能,请使用任意语言在 GitHub 上提交 Issue — 我会评估您的建议,并在后续版本中实现有价值的改进。


概述 / 问题

DeepSeek Harness 已经知道回合何时完成、失败或等待审批。没有本插件时,这些事件只留在会话里。如果你同时打开多个并行会话或切换到了其他应用,不得不频繁切回窗口手动查看状态。

本插件通过五个层级全面覆盖通知场景:
1. 音频提示音 (Web Audio):使用浏览器内置 Web Audio API 合成双音五声音阶提示音,在任务完成、出错或等待审批时轻柔提示,无需外部音频文件。
2. 跨会话屏幕横幅 (In-App Toasts):在界面上方显示浮动通知卡片,带有交互式“跳转至会话”按钮,可一键切换到触发事件的目标会话。
3. 桌面 / 系统级通知 (OS Push):通过 HTML5 Notification API 触发 Windows、macOS、Linux 及 DSH 桌面端系统原生通知,点击自动聚焦窗口并跳转会话。
4. 远程 IM Webhook:向飞书、企业微信、钉钉、Slack、Discord 或自定义 HTTP 接口投递 JSON 负载。Webhook URL 作为机密安全保存在 DSH 凭据中。
5. 网页推送 (Web Push / PWA):基于 W3C Push API 与 Service Worker 的真后台推送——即使所有 dsh 标签页都已关闭,手机或桌面仍能收到通知(其余浏览器通道需要标签页保持打开)。点击通知直接跳转到触发事件的会话。需要 HTTPS(或 localhost);iOS 需先添加到主屏幕(iOS 16.4+)。

架构

graph TD
A[DSH session/event] --> B[plugin-notify host]
B -->|credential name| C[Credentials service]
C -->|webhook URL| B
B -->|POST JSON| D[Feishu / WeCom / DingTalk / Slack / Discord / custom]
B -.->|macOS only| E[osascript notification]
B -->|SSE stream: /dsh-plugin-notify/events| F[Client Listener lib/client.js]
F -->|Web Audio API| G[音频提示音]
F -->|DOM overlay| H[跨会话屏幕横幅]
F -->|Notification API| I[系统桌面通知]
B -->|web-push + VAPID| K[推送服务]
K -->|后台推送| L[Service Worker /dsh-plugin-notify/sw.js]
L -->|点击跳转会话| F
J[设置卡片] -->|参数配置| B

功能说明

宿主(lib/index.js)

  • 订阅 session/event。
  • turn/end 且 reason.kind === 'completed' → task_done。
  • 其他 turn/end 原因 → error。
  • approval/asked → approval_requested。
  • 通过 Cordis webServer 服务向已连接的前端客户端提供实时 SSE 事件流(GET /dsh-plugin-notify/events)。
  • 解析 webhooks.*:遗留 http(s):// URL(弃用警告)→ Credentials resolve → process.env[name]。
  • 使用 AbortSignal.timeout(timeoutMs)(默认 5000 ms)。POST 失败只记录,不重试,不阻塞 agent 循环。
  • 可选免打扰窗口(HH:MM,支持跨夜)。事件仍会观察;Webhook、提示音和本机弹窗会跳过。
  • excludeSessionPrefixes 会跳过 id 匹配前缀的会话。
  • 网页推送宿主:webPush.enabled 开启 Push API 通道。默认 webPush.onlyWhenAway(仅在无浏览器连接时推送),正在观看时不会被打扰。
  • 路由:GET /dsh-plugin-notify/push/key(VAPID 公钥)、POST /dsh-plugin-notify/push/subscribe、POST /dsh-plugin-notify/push/unsubscribe、POST /dsh-plugin-notify/push/test、GET /dsh-plugin-notify/sw.js(Service Worker,响应头 Service-Worker-Allowed: /)。四个推送路由与 SSE 流使用同一信任围栏。
  • VAPID 密钥首次使用时自动生成并持久化;可通过 DSH_NOTIFY_VAPID_PUBLIC_KEY + DSH_NOTIFY_VAPID_PRIVATE_KEY 自行管理。订阅保存在同一状态文件(默认 $DSH_HOME/plugin-notify-state.json,可用 webPush.stateFile 覆盖)。
  • 失效订阅(推送服务返回 404/410)自动清理。推送服务缓慢或故障绝不阻塞 agent 循环。

客户端(lib/client.js)

  • 原生设置卡片:settings.plugin.item。
  • Web Audio API 双音提示音合成器,支持 task_done、error 与 approval_requested,附带“测试声音”按钮。
  • 跨会话浮动 Toast 管理器,支持跳转会话及“测试通知”按钮。
  • HTML5 原生桌面通知集成与权限申请。
  • 实时 SSE 订阅器,支持指数退避自动重连及可选的 notifyBackgroundOnly 过滤。
  • 快照状态 loading / unavailable / ready。
  • 保存会写入全部字段并列出失败项。
  • 语言包只有 en 和 zh。俄语界面由 dsh-russian-lang 在运行时提供。
  • 样式标签带 data-dsh-plugin="dsh-plugin-notify"。

安装

本包为私有包(GitHub Packages)。在具备仓库访问权限后:

dsh plugin --profile web add @goodandready/dsh-plugin-notify

重启 web 配置以便加载客户端。然后打开 设置 → 插件 → Notify。

配置

把每个 Webhook URL 放到 设置 → 凭据。在插件卡片里只填写凭据名称。

- id: plugin-notify
name: '@goodandready/dsh-plugin-notify'
config:
enableSound: false
enableToasts: false
enableDesktopNotifications: false
notifyBackgroundOnly: false
notifySubagents: false
webhooks:
feishu: NOTIFY_FEISHU_WEBHOOK
wecom: NOTIFY_WECOM_WEBHOOK
dingtalk: NOTIFY_DINGTALK_WEBHOOK
slack: NOTIFY_SLACK_WEBHOOK
discord: NOTIFY_DISCORD_WEBHOOK
custom: NOTIFY_CUSTOM_WEBHOOK
events: [task_done, error, approval_requested]
local: true
timeoutMs: 5000
dnd:
start: ''
end: ''
includeSession: true
includeDuration: true
excludeSessionPrefixes: []
webPush:
enabled: false
onlyWhenAway: true
subject: 'mailto:notify@localhost'
stateFile: ''
参数 类型 默认值 说明
enableSound boolean false 回合完成、出错或等待审批时播放 Web Audio 合成提示音(默认关闭,需显式开启)。
enableToasts boolean false 跨会话弹出屏幕横幅通知,附带一键跳转按钮(默认关闭,需显式开启)。
enableDesktopNotifications boolean false 系统原生桌面推送(Windows、macOS、Linux、DSH 桌面版,需显式开启并授权)。
notifyBackgroundOnly boolean false 仅当事件发生在非活跃/后台会话时才触发通知。
notifySubagents boolean false 是否发送委托子代理(subagent)回合通知(默认为 false 以抑制子代理噪音)。
webhooks.* string 空 值为 Webhook URL 的凭据名称。空则关闭该通道。
events string[] task_done, error, approval_requested 事件白名单。空则恢复默认三项。
local boolean true macOS osascript 弹窗;其他平台忽略。
timeoutMs number 5000 单次请求中止超时。
dnd.start / dnd.end string 空 HH:MM 窗口。相等或非法则关闭免打扰。
includeSession boolean true 在正文追加 Session: …。
includeDuration boolean true 在已知回合开始时间时追加 Duration: …。
excludeSessionPrefixes string[] [] 当 session.id 以任一前缀开头时跳过通知。
webPush.enabled boolean false 网页推送 (PWA) 通道:所有 dsh 标签页关闭时也能送达的后台推送(需手动开启)。
webPush.onlyWhenAway boolean true 有浏览器客户端连接时跳过网页推送。
webPush.subject string mailto:notify@localhost 向推送服务公示的 VAPID 联系方式(mailto:/https:)。
webPush.stateFile string 空 VAPID 密钥与订阅的状态文件(默认 $DSH_HOME/plugin-notify-state.json)。
webPush.allowedHosts string[] [] 额外允许的推送端点域名或通配符列表(默认严格仅允许 Google FCM、Mozilla、Apple、Microsoft)。

webhooks.* 中残留的原始 http(s):// 仍会发送,但会给出弃用警告。请迁移到凭据。

消息格式

通道 JSON 正文
飞书 { msg_type: 'text', content: { text } }
企业微信 { msgtype: 'text', text: { content: text } }
钉钉 { msgtype: 'text', text: { content: text } }
Slack { text }
Discord { content: text }
custom { text, kind, title, sessionId, durationMs, time }

测试

npm install --no-audit --no-fund --no-package-lock
npm test

pretest 会对 lib/index.js 和 lib/client.js 执行 node --check。随后 node --test test/*.test.mjs。

套件使用 stub fetch 或本地 HTTP 监听器,不会调用真实 IM 服务。真实投递需要你自己的 Webhook。

预期输出:

✔ public package identity matches host, client and patch sites
✔ client locale registration coexists with Russian language pack
✔ client apply does not register ru and can reload after effect dispose
✔ legacy raw webhook URL still posts (compat)
✔ credential ref resolves webhook URL via credentials service
✔ resolveWebhookValue prefers credentials then env
✔ missing credential name does not post
✔ each IM channel posts the expected body shape
✔ recipient HTTP failure does not throw out of the session loop
✔ AbortSignal.timeout is attached to webhook POST
✔ excluded session prefixes suppress notifications
✔ Config schema validates sound, toast, and desktop notification fields with opt-in defaults
✔ SSE route delegates authentication to DSH connection service with loopback fallback (issue #21 fix)
✔ SSE route falls back to loopback-only check when connection service is absent (issue #21 fix)
✔ client does not register settings.section slot (issue #16 fix)
✔ deliveries and warnings are routed through ctx.logger without console calls (issue #22 fix)
✔ cleanupTurnStarts purges stale turnStarts entries older than TTL (issue #32 fix)
✔ sendSseHeartbeat writes ping comment to active clients and purges failed clients (issue #33 fix)
✔ summarizeTurn safely reverse iterates events and handles missing session.events (issue #34 fix)
✔ textOf handles plain strings, arrays of blocks, and strings in arrays (issue #35 fix)
✔ lifecycle: apply -> dispose closes SSE clients, resets turnStarts, and isolates re-apply (issue #40 fix)
✔ web push delivers approval requests to stored subscriptions
✔ turn completion produces a task_done push honoring text options
✔ onlyWhenAway skips push while a browser client is connected
✔ onlyWhenAway=false pushes even with clients connected
✔ disabled web push never sends
✔ DND window suppresses push like every other channel
✔ event filter and session-prefix exclusions apply to push
✔ dead subscriptions (404/410) are pruned, live failures are not
✔ no subscriptions means no sends and no errors
✔ sw.js is served unauthenticated with scope and cache headers
✔ sw.js rejects non-GET with 405
✔ push routes refuse non-loopback peers when no connection service exists
✔ push routes honor connection.requestRejection like the SSE stream
✔ push/key: 404 while disabled, key material while enabled
✔ push/subscribe: persists valid subscriptions, rejects invalid bodies
✔ push/unsubscribe: removes by endpoint
✔ push/test: sends to stored subscriptions via the injected library
✔ push routes answer 405 on wrong methods
✔ generateVapidKeys returns base64url P-256 keys
✔ resolveStatePath: explicit stateFile wins, then DSH_HOME, then ~/.dsh
✔ loadState tolerates missing and corrupted files
✔ saveState round-trips and leaves no temp files behind
✔ getVapidKeys generates once, persists, then reuses
✔ getVapidKeys env override wins over the state file
✔ addSubscription validates and dedupes by endpoint
✔ removeSubscription removes and reports
✔ concurrent saveState calls serialize into a valid file
ℹ tests 48
ℹ pass 48
ℹ fail 0

许可证

MIT © GooDAnDReaDY

变更历史

完整更新日志详见 CHANGELOG.md。

常见问题

7 问
答案由本站依据条目字段整理,不引用上游原文
dsh-plugin-notify 怎么安装?

本站没有抓到该条目的安装命令,请到仓库主页确认安装方式;这类条目多数是生态应用或尚未发布安装包的项目。

dsh-plugin-notify 的验证等级是什么意思?

未标注验证等级。上游未给出验证结论,安装前请自行确认

dsh-plugin-notify 安全吗?

未标注。

dsh-plugin-notify 装之前要先确认什么?

先看它会读写哪些文件、执行哪些命令、连接哪些网络地址;验证等级只说明装得上、跑得起来,不等于安全。涉及密钥或系统权限的,建议先在隔离环境试装。

dsh-plugin-notify 用的是什么许可证?

上游标注为 MIT。商用或二次分发前请到仓库确认许可证原文。

dsh-plugin-notify 有哪些功能?

回合完成/报错/审批音频提示、跨会话浮窗一键跳转会话、桌面系统级推送通知、飞书企微钉钉 Slack webhook、免打扰时段与会话前缀过滤。

这条记录的数据可靠吗?

本站按仓库名去重后合并整理,字段以作者仓库与 npm 元数据为准;安装命令、仓库地址与 README 保持原文,带 L4 / L5 标记的安装命令已在隔离沙盒里真实跑通。

同名或近似条目

5 条
不同作者的仓库分开列,请确认你要装的是哪一个
浏览器与联网
按星标排序,可作替代方案

dsh-our-free-model

dsh-our-free-model

在 DeepSeek Harness 中装上这个 DSH plugin,无需登录、注册或填 API Key,即可直接调用 DeepSeek

L3 · 安装规范通过 8,796 星

dsh-web

dsh-web

侧边栏多列任务看板:卡片交给真实 DSH 智能体会话执行,支持 cron 定时(Host 侧到点执行,关浏览器也生效)。

L3 · 安装规范通过 8,549 星

BrowserSkill

BrowserSkill

BrowserSkill 的 DeepSeek Harness 浏览器自动化桥接插件,通过原生浏览器工具控制可见的 Chrome 和 Edg

L4 · 沙盒安装通过 8,456 星

dsh-pocket

dsh-pocket

DSH Pocket 让 DeepSeek Harness 装进口袋:电脑跑 dsh web,手机扫码即实时同步访问(局域网+公网),人在外

L5 · 运行验证通过 1,656 星

Browser4

Browser4

L4 · 沙盒安装通过 1,152 星

agentrq

agentrq

L4 · 沙盒安装通过 1,140 星

goodandready 的其它插件

4 个

插件的元信息来自作者仓库;分类、验证等级与安全结论的中文说明为中文整理,最近核验 —。