dsh-plugin-notify-sounds
Native-style notification sounds for DeepSeek Harness: a chime when the agent needs your decision or finishes a task, clickable system notifications that jump back to the window, repeat reminders, quiet hours, and goal-mode alerts that wait for the final round.
Install
dsh plugin --profile web add dsh-plugin-notify-sounds
Sandbox test results
| Stage | Result |
|---|---|
| 1 install | ✓ |
| 2 list | ✓ |
| 3 mount | ✓ |
| 4 boot | — |
Four stages run in an isolated sandbox: install (network on) → list → mount → boot (last three with no network).
README
dsh-plugin-notify-sounds






[English](README.md) | 中文
智能体在等你、或干完活时,轻轻响一声。
人不在窗口前也不怕:最小化、被遮挡、或只是切到别的窗口,都会弹系统通知(点击即回到窗口),任务栏标题亮出「待处理 / 已完成」;你回来看过一眼之后,它就闭嘴——不会像闹钟一样反复催你。
安装:DSH → 左侧栏「插件」→ 添加插件,粘贴下面这行(带上版本号,否则发布不满 24 小时的版本会被 pnpm 的 minimumReleaseAge 解析回上一版),点「安装」:
dsh-plugin-notify-sounds@1.9.4
🎨 与 DSH 界面风格统一
设置面板中的每一处视觉细节都取自 DSH 自身的设计体系:行几何、分隔线、字号与间距沿用官方设计令牌,音效选择器使用官方 Menu 组件,图标来自官方图标族,排布沿用「文字左 / 控件右」的原生行式。安装后不会在设置中出现风格割裂的第三方区块。
✨ 它能做什么
提醒什么 · 效果
需要你决策 · 智能体发起审批、计划确认、提问时提示音;审批与提问可分别设音效
任务完成 · 会话由运行转为空闲时提示音
人不在窗口前也能感知 · 最小化、被遮挡或只是没在用它时都弹系统通知(正文就是审批理由或提问原文,点击回到窗口);任务栏标题显示「待处理 / 已完成」
没看到会再提醒 · 未处理决策按 1/5/15/30 分钟重复提醒
只提醒你关心的 · 子智能体(后台任务)默认完全静默,只提醒主对话,可开关
该安静时安静 · 静音时段(如 22:00–08:00,可跨午夜)、仅页面不可见时提示、总开关一键全静音
声音随你 · 九种内置音效(彼此响度已对齐);最多 3 个自己的音频,可改名、指派给任意提醒(mp3 / wav / ogg / m4a,每个 ≤15 秒);音量调节;每项独立开关
检测更新 · 设置里检查 npm 新版本,并指向真正负责安装的入口——左侧栏「插件」(卸载后再装)、市场,或 web profile 上的 dsh plugin add;若当前安装未被 lockfile 记录,会在行内提示
💡 为什么需要它
DSH 的状态提示只有视觉——状态点、侧栏标记。你一切到别的窗口,就既看不到也听不到,智能体却可能正卡在那里等你一句话。
这个插件把「在等你」和「干完了」变成声音。配合系统通知与标题标记,人走开也知道发生了什么;而你回来处理过之后它就安静——重复提醒也只针对你从没看过的决策。
🔔 声音
双音铃 · 风铃 · 单音叮 · 水滴 · 脉冲 · 上行琶音 · 金币 · 达成 · 敲门 —— 九种内置音效全部由 Web Audio 现场合成,不含任何音频文件、不发一次网络请求。
也可以换上你自己的音频(mp3 / wav / ogg / m4a,每个 ≤15 秒、3MB,自动校验并做响度归一化),或者干脆选「无声」只留通知。三种触发(审批 / 提问 / 完成)各选各的音效,设置里随时试听。
⚙️ 设置
设置 → 提示音(位于「通用设置」与「模型」之间),每项功能都有独立开关,界面与 DSH 原生设置完全一致:
总开关与音量 · 三种触发各自的音效(含试听)· 子智能体提醒 · 系统通知 · 窗口标题提醒 · 重复提醒间隔 · 静音时段 · 仅后台提示 · 最多 3 个可改名的自定义音频 · 自动检查更新(安装走包管理器)
改动即时生效,无需重启。
📦 安装
🖱️ 最简单:在 DSH 里点两下(推荐)
1. 打开 DSH → 左侧栏「插件」,点添加插件;
2. 在输入框粘贴包名和版本号(本插件已发布在 npm):
dsh-plugin-notify-sounds@1.9.4
版本号不要省:pnpm 的 minimumReleaseAge 策略会把刚发布不到 24 小时的版本挡在外面,只写包名会解析回上一个版本。想看最新版本号可到 npm 或 Releases 查。
(填 GitHub 仓库地址 https://github.com/BillCx330/dsh-plugin-notify-sounds 或本地目录路径也可以,但那样不带版本锁定)
3. 点安装,装完重启 DSH 一次。
输入框上方的「安装源」是下载源,默认中国大陆镜像源,国内一般不用改。DSH 会提示「插件以你的权限运行」——本插件只读会话状态、在本地发声;唯一的请求是点击系统通知时发给本机 DSH 的唤窗请求,不向外部发送任何数据。
⬆️ 升级
升级由包管理器安装,这样 profile 的 lockfile 会跟着一起更新——DSH 插件无法自己持久地更新自己(管理器拒绝已声明的包,而它的「先移除再安装」会先卸载掉正要完成安装的代码)。所以插件只负责检查,并告诉你从哪里装:
- 在 DSH 里(推荐,也是唯一实测过的路径):左侧栏「插件」 → 在「已安装插件」里卸载本插件 → 添加插件 → 粘贴
dsh-plugin-notify-sounds@<版本>→ 安装 → 重启 DSH。(务必带版本号:pnpm 的minimumReleaseAge会让刚发布不到 24 小时的版本不参与自动解析,只写包名会装回上一个版本。)
卸载不会丢东西:偏好和自定义音频都存在 profile 里(cordis.patch.yml 与 notify-sounds/sounds/),重装后自动恢复——包括升级到 1.9.0 时由旧版内嵌音频自动迁移过来的那份。
- 装了市场插件(dshmarket):在市场里一键更新。
webprofile:dsh plugin --profile <你的 profile> add dsh-plugin-notify-sounds@<版本>。
更新行还会提示「当前版本与 lockfile 记录不一致」——那是 1.8.0 之前的自更新留下的状态,按上面方式重装一次即可永久修好。
🛠️ 其他安装方式
命令行 —— 对你实际使用的 profile 一条命令:
dsh plugin --profile <你的 profile> add github:BillCx330/dsh-plugin-notify-sounds
(Git 安装跟仓库默认分支走,不带版本锁定;要可复现的安装请用上面的 包名@版本号。)
Release 压缩包 —— 从 Releases 下载 .tgz,用它在磁盘上的路径安装:
dsh plugin --profile <你的 profile> add ./dsh-plugin-notify-sounds-1.9.4.tgz
(dsh plugin add 把参数原样交给包管理器,所以要给本地文件路径,不能填下载地址。)
本地目录 —— 开发或试用未发布的改动:
dsh plugin --profile <你的 profile> add ./dsh-plugin-notify-sounds
手工编辑 —— 在 profile 的 package.json 的 dependencies 加 "dsh-plugin-notify-sounds": "github:BillCx330/dsh-plugin-notify-sounds",在 dsh.profile.bundles 追加 "dsh-plugin-notify-sounds",然后在 profile 目录跑一次包安装(如 pnpm install)把依赖装进 node_modules。
命令行方式会自动写入 dsh.profile.bundles 并装好依赖,无需手工编辑。包内直接带预构建产物、不声明任何生命周期脚本,安装过程不执行构建脚本。安装后重启 DSH(日常升级仅客户端改动时,可热更生效)。
⚠️ 已知边界
- 自定义音频存在哪:音频按内容哈希存成
profiles/<profile>/notify-sounds/sounds/<sha256>.<ext>,配置里只留文件名。备份或换机要拷整个 profile 目录——只拷cordis.patch.yml不会带上音频。卸载插件后最多留下最后一个文件(几百 KB)。 - 手改配置:偏好写在 profile 的
cordis.patch.yml,值必须符合 schema(音量 0–100、音效为预设之一、时间HH:MM);写错会让插件不加载,改回即可。设置界面只会写入合法值。 - 升级由包管理器安装,不再由插件自己完成:1.8.0 移除了自安装器(原地写文件从不会更新 profile 的 lockfile,于是下一次插件安装会静默把旧版本装回来)。更新行仍会检查 npm、报告新版,然后指向真正负责安装的入口——左侧栏「插件」(卸载后再装)、市场,或 web profile 上的
dsh plugin add。 - 1.7.0 及更早版本可以通过它们自带的自更新到达 1.8.0(1.8.0 保持同样的七个文件名),但这次到达不会被 pnpm 登记:按上面的方式用包管理器重装一次,此后所有升级都会留下。1.6.9 及更早无法安装「新增了文件」的版本——固定白名单会安全拒绝;同样的一次性重装即可解决。
- 多窗口:提示音、系统通知和重复提醒由同一个 GUI 的所有页面选出一个「发声页」来发(1.7.0 起),所以同一个事件只响一次;窗口标题标记仍是每个窗口各自一份,因为它们各自有标题。发声页关闭或崩溃后几秒内由其他页面接管。
- 点击通知回到窗口:Windows 完整实现并实测;macOS / Linux 走系统深链,未验证。
- 关闭到后台后点通知会慢一点:这种情况走系统深链、由 Electron 自己把窗口
show回来(否则画面会停在最后一帧),窗口出现比平时慢约 0.5–1.5 秒;停在欢迎页时深链可能不生效。 - 第三方封装的桌面客户端(如 DSH NEXT):唤窗依赖官方壳的 Win32 能力与
dsh://协议注册,封装版没有这两样,点击通知不会回到窗口——那是宿主侧缺的,插件无法补。 - 唤窗按窗口标题定位主窗口:刻意不读取其他进程信息(那会触发杀软主动防御)。若将来 DSH 改变标题格式,唤窗会静默失效——提示音与通知本身不受影响。
- 导航小图标:依赖设置面板的 DOM 结构,若DSH 改版后自动回落为官方齿轮,仅影响外观。
- 通知权限:桌面端放行;受限环境(某些浏览器策略)下被拒时,行内会引导手动允许,其余功能不受影响。
- macOS 的系统通知:桌面外壳对权限请求一律放行,所以设置里恒显示「已授权」;**实际是否弹
…(truncated)
Rendered from the README published on npm. Formatted only, not edited.
Versions
Published on npm::18,最后更新 2026-11-03