dsh-plugin-notifications:Turn 完成通知与提示音

前言

在使用 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 安装。

  1. 编辑 $DSH_HOME/profiles/web/package.json。
  2. 在 dependencies 中增加依赖项:
    "dsh-plugin-notifications": "file:<本仓库路径>"
  1. 在 dsh.profile.bundles 中增加 bundle 名称:
    "dsh.profile.bundles": {
      ...
      "dsh-plugin-notifications": {}
    }
  1. 确保 node_modules/dsh-plugin-notifications 可解析到本仓库。
  2. 重启 dsh web。若不重启,Host 将处于未加载状态,仅浏览器侧有降级逻辑。

配置

配置通过 Web GUI 卡片或直接编辑 $DSH_HOME/settings.yaml 完成。默认值如下:

notifications:
  enabled: false   # 一轮对话完成后弹系统通知
  sound: true      # 通知时同时播放提示音
  tone: soft       # 音调: soft | crisp | low

使用

  1. 打开 Web GUI → 设置 → 通用 → 对话完成通知。
  2. 开启「启用系统通知」,并根据需要开启提示音并选择音调。
  3. 点击「试听提示音」确认声音效果。
  4. 首次使用时,在 macOS 系统弹窗中授予通知权限。

注意事项

  • 平台限制:仅支持 macOS 平台。
  • 权限行为:点击通知不会激活应用窗口,仅提示。
  • 通知行为:通知仅提示,不打开任何窗口。
  • 配置权限:配置写入 $DSH_HOME/settings.yaml。settings.mutate RPC 仅放行内置命名空间,第三方插件通过自有路由 GET /notifications/status、POST /notifications/update 读写配置。

生态

本插件由 NattoCB 维护,属于 DSH 生态的一部分,并非 DeepSeek 或幻方官方出品。插件目录与源码可在 GitHub 查看。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜