前言¶
用 DeepSeek Harness(DSH)跑 web 会话时,界面不一定一直在前台:需要点批准、补输入、或一轮结束/error 时,若只靠视觉,很容易错过。常见做法是盯窗口或自己设系统通知,但和 DSH 里「确认 / 提问 / turn 结束」这几类事件并不一一对应。
dsh-meow 是社区维护的 DSH web 插件(维护者 nonmean,SkillHub 分类为「趣味换装」),在浏览器里于四个时刻播放短促的合成喵声,并在 Settings → General 提供总开关与细项。声音由 Web Audio API 现场生成,不随插件附带音频文件。
这是什么¶
- 定位:DSH web 插件,宿主侧监听 Harness 事件,浏览器侧播放喵声并注册设置项。
- 仓库:github.com/nonmean/dsh-meow;目录页:skillhub.cn/plugins/nonmean/dsh-meow。
- 当前版本(package.json):0.2.0,许可证 MIT。
- 兼容说明(README):在 DeepSeek Harness 0.2.1-alpha.1、Cordis 4.0.5-alpha.1、macOS 与 Node 24 上构建验证;
engines.dsh与@deepseek-ai/dsh-*的 peer 范围需与所跑 DSH 版本一致,否则 0.2 起的兼容性预检可能禁用该 bundle。
DSH 生态强调「一切皆插件」;SkillHub 等为社区目录,与 DeepSeek / 幻方无官方从属关系。
四个触发时刻¶
README 用下表归纳宿主观测点与喵声性格(合成参数不同,非固定 mp3):
| 时刻 | 宿主观测点 | 喵声特点 |
|---|---|---|
| 需要确认 | approval/request 瀑布流前置监听 |
上扬、偏亮 |
| 需要输入 | user-questions/request 瀑布流前置监听 |
较柔的三角波感 |
| 出错 | turn/end,reason 为 error |
低、长 |
| 任务完成 | turn/end,reason 为 completed |
偏满足、略高 |
实现细节(资料原文):approval 监听前置,仅在真的会走 answerer 时响;自动拒绝 approval 的会话保持静音。question 监听同样前置并通过 next() 委托,只观察、不由浏览器 answerer「占住」请求。
设置与配置¶
安装并刷新后,打开 Settings → General,找到 Meow notification sound:
- 总开关:启用 / 禁用全部喵声。
- 分时刻勾选:确认、输入、错误、完成各一项。
- Include subagent sessions:默认关闭,子 agent 会话的 turn 结束不会喵(避免委托任务刷屏)。
- 音量滑块。
- Test:立即试听。
配置写入插件自有文件 $DSH_HOME/dsh-meow.json(默认 ~/.dsh/dsh-meow.json),切换选项无需重载 profile。
安装与启用¶
仓库已提交构建产物 lib/,从 GitHub 安装无需本地 build。官方命令如下。
从 GitHub 安装:
pnpm dsh plugin --profile web add git+ssh://git@github.com/nonmean/dsh-meow.git
本地目录链接(将路径换成你的 checkout):
pnpm dsh plugin --profile web add link:/path/to/dsh_meow
上述命令会把 dsh-meow 追加进 web profile 的 bundle 列表并挂载 cordis.patch.yml;浏览器端经 package.json 的 dsh.client 声明注入,无需单独 roster 行。
重启 dsh web(若 profile HMR 已加载新行也可只 reload 页面),并对浏览器 硬刷新,以便拉取新 client bundle;之后在 General 下应出现 Meow 设置行。
卸载:
pnpm dsh plugin --profile web remove dsh-meow
典型用法¶
- 按上一节安装并重启 / 硬刷新。
- 在页面内 点击或按键一次(浏览器自动播放策略要求用户手势后 AudioContext 才可运行)。
- 打开 Settings → General → Meow notification sound,打开总开关,点 Test 确认有声。
- 按需勾选四个时刻;若主会话委托子 agent 且不想在子会话结束时喵,保持 Include subagent sessions 关闭。
- 正常使用 DSH:出现需批准、需回答、turn 以 error/completed 结束等场景时,浏览器会按队列播放对应喵声。
工作原理(简要)¶
- 宿主(
lib/index.js):观测上述四个时刻,维护有界、按类型去重的队列;提供同源 JSON 路由GET /meow/state、POST /meow/state、GET /meow/events?since=N。 - 浏览器(
lib/client.js):约每 700 ms 轮询/meow/events,对每个排队事件播放一次合成喵;并注册 Settings 行。首次轮询会 adopt 宿主游标且不播放,避免刷新页面重放旧 backlog。 - 路由拒绝跨站调用(
Sec-Fetch-Site: cross-site)。
适用场景与注意¶
适合:长时间开 DSH web、希望用轻量声音区分「要我确认 / 要我输入 / 出错 / 做完」的开发者;偏好无二进制音频资产、仅信 Web Audio 合成的情况。
注意:
- 插件在 当前 dsh 进程权限 下运行;安装前请自行查看源码与 MIT 许可证。
- 完全无声时:先在页面内交互一次,再用 Test(见 README Troubleshooting)。
- Settings 行缺失:重启
dsh web、硬刷新,并确认 bundle 在 web profile 的dsh.profile.bundles中。 - 喵太频繁:关闭部分时刻,或保持 Include subagent sessions 关闭。
- README 说明:仅在 整轮 turn 以 error 结束 时喵,不会对可恢复的单次 tool error 单独喵;若反复 error 结束,即插件设计的信号。
Node 要求(package.json):^22.19.0 || >=24.0.0;DSH:^0.2.1-alpha.1。
结尾¶
dsh-meow 把 Harness 四类关键状态变成浏览器里的合成喵声,设置集中在 Settings → General,持久化在 ~/.dsh/dsh-meow.json。若你需要在 web 侧「听得出要不要回到窗口」,可按 README 安装并调好分时刻开关与音量。