Overview
dsh-dudulu
README / EN
Package documentation
dsh-dudulu(嘟一声)
DeepSeek Harness (dsh) 网页界面的任务提示音插件:任务完成、任务暂停(等待审批 / 提问)、出错时播放【嘟嘟噜~】。
检测与播放全部在浏览器端完成——声音在你开网页的那台机器上响,与 DSH 服务端跑在哪台机器、什么操作系统无关。Windows / Linux 都行,不需要在服务端装播放器或配置声卡。
它解决什么
DSH 跑在 Kali / 远程机、你从 Windows 浏览器(甚至 SSH 隧道)访问时,原来服务端本地播放的声音你根本听不见。这个插件把"判定 + 出声"都放到浏览器:网页开着,任务有进展就响,你随时能知道 agent 卡住等你了。
工作原理(v0.5.5)
适配 DeepSeek Harness 0.1.1-rc.2 及以后:
settings.section按新版 list slot 契约注册(slots.register(options, Component),options必须带全局唯一id+label函数)。旧版{title, component}写法会抛list slot "settings.section" requires options.id导致插件加载失败。
通过 @deepseek-ai/dsh-client-connection 提供的 sessions store 直接监听会话状态边沿(参考 dsh-alert-sound 的同款做法):
| 触发 | 信号 | 说明 |
|---|---|---|
| 任务暂停 | pendingInteraction === 'approval' / 'question' |
直接信号,比 turn/end 的 reason 推断更准 |
| 任务完成 | running 由真 → 假,且会话无错 |
— |
| 出错 | running 由真 → 假,且会话有错(turn-error / lastAgentError) |
— |
- Host 半片是空占位:只为让 bundle 按包名注册;判定、播放、设置全在
client/client.js。 - 播放用 Web Audio API。默认提示音是内置的
dudulu01.mp3(你提供的音频,base64 内嵌进client.js,开箱即响,不依赖任何音频文件托管);仅当该音频解码失败时才回落**内置合成音「嘟嘟噜」**兜底(三段上行短音,A5→D6→E6,纯 oscillator 生成,不落盘)。 - 浏览器自动播放策略:首次点击 / 按键后解锁
AudioContext,之后照常响。
通知类型
默认三类都开,可在设置页分别关:
- 任务完成
- 任务暂停(等待审批 / 提问)
- 出错
子代理(subagent)不响。
设置(存 localStorage)
偏好保存在浏览器 localStorage 的 dsh-dudulu.v1 键下,刷新 / 重启保留:
- 总开关
- 三类通知各自的开关
- 音量滑条(0–100,拖动即试听)
- 默认提示音为内置
dudulu01.mp3;可上传<1MB的自定义音频覆盖,支持「恢复默认」(回到 dudulu01.mp3)与「清除」(清除后回落内置合成音「嘟嘟噜」)
打开 设置 → dudulu · 嘟一声 配置。
要求
- DeepSeek Harness
webprofile(dsh web) - 支持 Web Audio 的浏览器
- 网页需保持打开(关了就不响);首次需一次用户手势解锁声音
安装
# 方式一(默认):git-over-HTTPS 走 github.com 主域
dsh plugin --profile web add github:Cmjingahaha/dsh-dudulu
# 方式二(备用):github.com 主域不可达、仅 codeload.github.com 可达时,
# 用源码压缩包安装(实测该网络下 git-over-HTTPS 会静默挂起)
dsh plugin --profile web add https://codeload.github.com/Cmjingahaha/dsh-dudulu/tar.gz/refs/heads/main
重启 dsh web,打开 设置 → dudulu · 嘟一声 即可。
故障排查
- 设置页没有「dudulu · 嘟一声」条目:先看浏览器 F12 控制台是否报
failed to apply loader entry (dsh-dudulu)。apply()抛错会让整个插件条目回滚——设置面板和提示音会一起失效(同一根因的两个表现)。 - 确认软链存在:
~/.dsh/profiles/web/node_modules/dsh-dudulu → ~/.dsh/plugins-local/dsh-dudulu(host 端 bare specifier 解析依赖它)。 - 修改插件后务必硬刷新浏览器(Ctrl+Shift+R)——前端会缓存旧的 client bundle。
项目结构
├─ package.json # dsh.bundle + dsh.client(声明注入 dsh-client-connection 等)
├─ cordis.patch.yml # 组合补丁:插入一行 host 占位
├─ index.js # Host 半片(空占位)
└─ client/
└─ client.js # Client 逻辑:sessions 边沿检测 + WebAudio 播放 + 设置面板
许可
MIT
