前言¶
在使用 DeepSeek Harness (DSH) 进行对话开发或日常使用时,对话通常在后台运行。如果 Web GUI 关闭或切换到其他窗口,很难即时获知一轮对话是否完成。本插件通过 Host 进程向 macOS 系统发送通知,即使 GUI 不可见也能接收反馈。
核心功能¶
对话完成通知
Host 进程监听 agent/status 事件,在根会话从 running 变为 idle 的边沿触发。使用 terminal-notifier 弹出系统通知,标题为会话名,正文为助手回复(超过 60 字符的标题或 200 字符的正文会被截断)。仅根会话触发,跳过 subagent 与 automation 驱动的回合。点击通知不会激活应用窗口,仅作为提示。
合成提示音
插件不依赖外部音频文件,而是进程内合成 16-bit PCM 单声道 WAV 提示音(44.1kHz,20ms 线性起音 + 指数衰减,音符间隔 120ms)。该提示音与 Settings 卡片中的 Web Audio 试听参数完全一致,离线可用,通过 terminal-notifier -sound 播放。
Settings 卡片
卡片渲染于「设置 → 通用」的 settings.general.item 插槽,提供中英双语界面。包含「启用系统通知」开关、「播放提示音」开关、音调选择(柔和 / 清脆 / 低沉)以及「试听提示音」按钮。该按钮同时作为用户手势触发浏览器通知授权。
持久化与降级
配置写入 $DSH_HOME/settings.yaml,命名空间为 notifications。在 Host 加载前,使用浏览器 monitor + localStorage 进行降级处理;Host 加载后接管通知逻辑,避免双重通知。
安装¶
在安装前,请确保已安装 terminal-notifier。该插件对 Homebrew 安装的 terminal-notifier 路径进行了硬编码(/opt/homebrew/bin/terminal-notifier),请通过 brew install terminal-notifier 安装。
- 编辑
$DSH_HOME/profiles/web/package.json。 - 在
dependencies中增加依赖项:
"dsh-plugin-notifications": "file:<本仓库路径>"
- 在
dsh.profile.bundles中增加 bundle 名称:
"dsh.profile.bundles": {
...
"dsh-plugin-notifications": {}
}
- 确保
node_modules/dsh-plugin-notifications可解析到本仓库。 - 重启
dsh web。若不重启,Host 将处于未加载状态,仅浏览器侧有降级逻辑。
配置¶
配置通过 Web GUI 卡片或直接编辑 $DSH_HOME/settings.yaml 完成。默认值如下:
notifications:
enabled: false # 一轮对话完成后弹系统通知
sound: true # 通知时同时播放提示音
tone: soft # 音调: soft | crisp | low
使用¶
- 打开 Web GUI → 设置 → 通用 → 对话完成通知。
- 开启「启用系统通知」,并根据需要开启提示音并选择音调。
- 点击「试听提示音」确认声音效果。
- 首次使用时,在 macOS 系统弹窗中授予通知权限。
注意事项¶
- 平台限制:仅支持 macOS 平台。
- 权限行为:点击通知不会激活应用窗口,仅提示。
- 通知行为:通知仅提示,不打开任何窗口。
- 配置权限:配置写入
$DSH_HOME/settings.yaml。settings.mutateRPC 仅放行内置命名空间,第三方插件通过自有路由GET /notifications/status、POST /notifications/update读写配置。
生态¶
本插件由 NattoCB 维护,属于 DSH 生态的一部分,并非 DeepSeek 或幻方官方出品。插件目录与源码可在 GitHub 查看。