前言¶
用 DeepSeek Harness(DSH)跑智能体时,权限确认、提问和任务结束往往发生在浏览器标签页里。窗口被别的应用挡住,或你只是暂时切走,很容易漏掉「允许一次」或回答提问。DSH 自带应用内审批面板能兜底,但你得先切回窗口。
下面介绍社区插件 dsh-desktop-notify(仓库 HonestShine/dsh-desktop-notify)。它把审批、提问、完成与错误提醒接到操作系统原生通知里;在 Windows 上还能在通知条上直接点「拒绝 / 允许一次」。插件归类为客户端方向,维护者为 HonestShine;在 SkillHub 目录页可查简介与链接(skillhub.cn 条目)。目录站为社区聚合,与 DeepSeek / 幻方无官方从属关系。DSH 本身提倡「一切皆插件」,本插件即其一例。
这是什么¶
dsh-desktop-notify 是 DSH 的桌面原生通知插件(npm 包名 @honorshine/dsh-desktop-notify,当前资料中版本 0.1.1,MIT 许可)。一句话定位:在系统通知中处理权限审批按钮,并为任务完成、提问与会话错误提供可配置的提醒与铃声。
Host 侧注册 Cordis 服务 ctx.desktopNotify,其他插件也可调用 show() 弹出带按钮的通知;Client 侧在 设置 → 通知提醒 提供配置页(铃铛图标)。
核心功能¶
跨平台实现¶
| 平台 | 通知显示 | 内联按钮 |
|---|---|---|
| Windows | WinRT toast(PowerShell) | 支持,dshnotify: 协议 + VBS 回传 |
| macOS | terminal-notifier | 支持 |
| Linux | notify-send |
需 libnotify 0.7.10+ 且守护进程支持 actions |
权限审批¶
- 权限类通知附带「拒绝」「允许一次」,点击结果回到 Host 的
approval/requestwaterfall。 - 默认仅窗口不在前台时由插件接管;窗口在前台、用户切回或通知超时后,退回 DSH 原生审批面板。
- 交互提示音与通知铃声分开配置,窗口在前台也会响(便于你在应用内面板旁听到待处理事项)。
其他提醒¶
提问(含 ask_user_question)、根会话任务完成(running → idle)、根会话 agent/error 均可单独开关,并可限制为「仅后台」提醒。通知正文优先用会话标题,否则用工作目录名。
铃声与离开判定¶
- 通知铃声:
system/bundled/custom/none,设置页可试听。 - 交互提示音:默认内置
alert.wav,模式为bundled/custom/none。 - 前台无键鼠输入超过设定秒数视为离开(默认 180 秒,
0关闭),用于配合「仅后台」逻辑。
Windows 特有¶
自动读取安装包注册的 DeepSeek Harness.lnk 的 AppUserModelID,让 toast 显示应用名与图标;设置页可修复 dshnotify: 协议并打开系统通知设置。
DSH 版本¶
资料记载已在 0.2.0-rc.2 / 0.2.1-rc.5 / 0.2.2-rc.1 上审计适配;0.2.2+ 使用原生 settings.section.icon,更早版本用 DOM 补丁显示铃铛。若组合未注入 configForms,通知与审批仍可用,只是没有设置页。
安装与启用¶
安装前请自行查阅仓库源码与 MIT 许可证。插件在 当前 DSH 进程权限下运行(Windows 上会写当前用户注册表、调用 wscript.exe 等),安装前确认你可接受其行为。
任选一种方式安装;装完后重启 dsh web(桌面端则完全退出后重开),浏览器 F5 刷新,在 设置 → 通知提醒 中配置。
从 GitHub 安装(一条命令)¶
适用于无需本地解压目录的场景:
dsh plugin --profile web add github:HonestShine/dsh-desktop-notify
固定版本示例(资料原文):
dsh plugin --profile web add github:HonestShine/dsh-desktop-notify#v0.1.1
需要 Node.js ^22.22.2 || ^24.15.0 || >=26.0.0(写在 package.json 的 engines 中)。
从 npm 安装¶
dsh plugin --profile web add @honorshine/dsh-desktop-notify
或:
dsh plugin --profile web add @honorshine/dsh-desktop-notify@0.1.1
本地目录或 Release 包¶
完整目录(含 package.json、cordis.patch.yml、lib/、assets/)可先卸载同名插件,再用绝对路径安装,例如:
dsh plugin --profile web remove dsh-desktop-notify
dsh plugin --profile web add link:D:\Plugins\dsh-desktop-notify
macOS/Linux 在 link: 安装前若目录无 node_modules,需在插件目录执行 pnpm install。Release 中的 .tgz 也可用 file: 路径安装。
说明:上述命令的 profile 为 web。桌面 Electron 的 desktop profile 由应用内置插件管理,CLI 会拒绝 --profile desktop。
卸载:
dsh plugin --profile web remove dsh-desktop-notify
典型用法¶
在系统通知里批权限¶
- 把 DSH 窗口切到后台或最小化。
- 触发需要审批的工具操作。
- 在系统通知中点击「拒绝」或「允许一次」。
- 若切回 DSH 前台,通知会关闭,改由应用内审批面板处理。
窗口在前台时不弹审批通知,但交互提示音仍会按配置播放。
在设置页调行为¶
在 设置 → 通知提醒 中切换各类提醒与铃声;高级项含 Windows AppUserModelID、macOS 定制 terminal-notifier 路径等。
配置文件写在 profile 的 cordis.patch.yml,entry id 为 desktop-notify。常用字段如下(完整表见仓库中文文档):
| 字段 | 默认值 | 说明 |
|---|---|---|
enabled |
true |
插件总开关 |
approval.enabled |
true |
接管权限确认通知 |
approval.onlyWhenHidden |
true |
仅窗口不在前台时接管 |
approval.timeoutSeconds |
30 |
通知等待上限(5–300) |
events.question / turnEnd / errors |
true |
提问、完成、错误提醒 |
events.onlyWhenHidden |
true |
上述三类仅后台 |
sound.mode |
bundled |
system / bundled / custom / none |
attention.enabled |
true |
交互提示音(前台也响) |
presence.idleSeconds |
180 |
无输入视作离开的秒数;0 关闭 |
给其他插件复用通知¶
Host 注册 ctx.desktopNotify 后,其他插件可调用 show() 展示带按钮的通知(细节见仓库「架构」一节)。
适用场景与注意¶
适合谁: 长时间开多个应用、希望 DSH 在后台仍能通过系统通知处理「允许一次」或听到待办提示的开发者;Windows 用户最能享受带头像的应用名 toast 与内联按钮。
平台注意:
- macOS 通知发送方显示为 terminal-notifier,不是 DeepSeek Harness(node-notifier 3 的限制);可自行构建带图标的 notifier 并在设置中填写路径。
- Linux 无 actions 支持时按钮不可用,会退回应用内面板。
- Windows 自定义通知音频仅支持 WAV;按钮回传依赖 Host 进程存活,退出后旧通知按钮不再处理。
安全与合规: 不要凭包名臆造安装命令;Windows 协议注册位于 HKCU\Software\Classes\dshnotify。安全软件拦截 wscript.exe 会导致按钮失效,可在设置页尝试「修复通知按钮协议」。
结尾¶
dsh-desktop-notify 把 DSH 的审批与状态变化接到操作系统通知层,并在 Windows 上尽量保持与安装包一致的应用身份。若你已在用 DSH 0.2.x RC,可从 GitHub 或 npm 安装后于 设置 → 通知提醒 按需开关。
- 目录页:https://www.skillhub.cn/plugins/HonestShine/dsh-desktop-notify
- 仓库与文档:https://github.com/HonestShine/dsh-desktop-notify(中文说明:
docs/README.zh-CN.md)