dsh-occlick: Using OpenCode Sounds in DSH to Monitor Turn Ends, Permissions, and Errors

前言

在 DeepSeek Harness(DSH)里跑长任务时,人往往会切到别的窗口。回合何时结束、智能体是否在等审批、是否因错误中断,如果只靠盯界面,效率很低。桌面端可以靠系统通知,但 Web 客户端或习惯用声音反馈的开发者,更需要「事件到了就响一声、且别误报」的机制。

OpenCode 桌面应用自带一小套通知短音;社区插件 dsh-occlick(维护者 contraliz)把同一套素材接到 DSH 上,按三种事件各选一个片段播放,并在 Settings → Sound effects 里配置。插件在 GitHub 上采用 MIT 许可证,当前 package 版本为 0.4.1;社区目录页归类为趣味换装,仓库 README 中的分类标签为 Integrations & Connections。

这是什么

dsh-occlick 是一个仅运行在 DSH Web 客户端侧的 Cordis 客户端 bundle:不连外部服务、不改对话内容,只订阅 DSH 已有的回合运行状态、审批请求与会话错误信号,在本地用嵌入 bundle 的音频播放一次提示音。

适用环境:DSH 0.2.0 及以上,以及桌面应用或 dsh web;无设置页、无音频输出的 Headless/TUI profile 下插件不生效。

核心功能

下面介绍插件在三种通道上的行为,以及它刻意保持静音的情况。

三种事件、三个选择器

事件 触发来源 行为
回合结束(Turn finished) Session running: true → false 播放「回合结束」所选片段一次
权限请求(Permission requested) approval/request 播放「权限」片段,再把请求交给原有审批 UI
回合因错误结束(Turn ended on an error) api-session/error 播放「错误」片段;随后该回合的结束不再播放「回合结束」音

每种通道在设置里都有独立下拉框,库内共 45 条 OpenCode 短音(Alert、Bip-bop、Nope、Staplebops、Yup 等命名),并可选 Off (silent)。选中的片段会立即试听一次。

默认与 OpenCode 桌面应用对应关系如下:

通道 默认值 OpenCode 等价
Turn finished staplebops-01 Agent complete
Permission requested staplebops-02 Permission required
Turn ended on an error nope-03 Error

播放策略(避免误响)

README 中明确列出的规则包括:

  • 每个事件最多响一声,不跟随逐步工具调用或流式 token。
  • 失败回合只播错误音,不会同时播「回合结束」音;错误状态在同 Session 内记忆约 15 秒。
  • 用户用停止按钮或 Esc Esc 中止回合时不播结束音。
  • 启动或重连后约 250 ms 内的 running 抖动、页面加载时已在运行的 Session(需观察到 running 约 2 s 后才可能响)、子 agent Session(origin: subagent)、以及挂载在空闲列表上时的历史回放,均保持静音。
  • 1.5 秒内的连续审批请求会合并,只响一次。

音频通过复用的 HTMLAudioElement 与本地 data: URI 播放;运行时无网络请求。浏览器 autoplay 策略下,首次指针或按键会用零长度静音片段预热,避免无声或误触整窗点击就响。

配置存储

选项保存在浏览器 localStorage:

  • dsh-occlick.turn
  • dsh-occlick.permission
  • dsh-occlick.error

按浏览器维度保存,而非 DSH profile。旧版 0.2.x 的 dsh-occlick.sound 会迁移;清除站点数据后恢复默认。

安装与启用

需要 DSH ≥ 0.2.0 与 Web 客户端。命令行安装后需重启 DSH(bundle 在启动时组装)。

在 Plugins 页面安装

  1. 打开 Plugins → Add plugin。
  2. 粘贴仓库地址:
https://github.com/contraliz/dsh-occlick
  1. 点击 Install,再 Enable now。
  2. 打开 Settings → Sound effects 选择片段。

命令行安装

按你使用的 profile 复制对应一行:

# DSH desktop app
dsh plugin --profile desktop add github:contraliz/dsh-occlick
# dsh web
dsh plugin --profile web add github:contraliz/dsh-occlick

卸载时将 add 换为 remove dsh-occlick,profile 与安装时一致。

从本地 checkout 安装(可选)

若已有源码目录,可在该目录执行(README 示例为 web profile):

git clone https://github.com/contraliz/dsh-occlick
cd dsh-occlick
dsh plugin --profile web add .

典型用法

  1. 安装并启用插件后,打开 Settings → Sound effects,或 Plugins → dsh-occlick → Configure;两处是同一套三个选择器。
  2. 为「回合结束」「权限请求」「错误」分别选片段;不需要的通道选 Off (silent)。
  3. 发起一段可能较久的 agent 任务,切到其他窗口;回合正常结束时应听到结束音;若触发审批,应听到权限音;若会话报错,应听到错误音而非结束音。

音库族与数量(名称均来自 README):

族 数量 库内名称示例
Alert 10 alert-01 … alert-10
Bip-bop 10 bip-bop-01 … bip-bop-10
Nope 12 nope-01 … nope-12
Staplebops 7 staplebops-01 … staplebops-07
Yup 6 yup-01 … yup-06

适用场景与注意

适合谁:长时间在 DSH Web 或桌面壳里跑任务、希望用 OpenCode 同款短音感知「结束 / 要审批 / 出错」的开发者;也可作为不依赖视觉盯屏的辅助反馈(README 建议标签含 accessibility)。

权限与风险:插件 host 侧为空,不申请 DSH 权限、不执行 shell、不访问文件或凭证;客户端读取 sessions.list 的 running、监听 approval/request 与 api-session/error,并注册设置与插件行 UI。无遥测与远程日志。

安装前建议:插件以当前 DSH 进程所加载的客户端 bundle 形式运行;安装前应阅读 GitHub 仓库 源码与 MIT 许可证。社区目录 skillhub.cn 插件页 与 DeepSeek / 幻方无官方从属关系,属于 DSH「一切皆插件」生态中的独立收录。

兼容性备注:README 称在 DSH desktop app 0.2.1、Windows 11 上测试;需 Chromium/Electron WebView 的 HTMLAudioElement 与 localStorage。Node.js 22+ 仅用于开发与构建,已安装插件不在 Node 中运行。

结尾

dsh-occlick 把 DSH 里已有的回合、审批与错误信号转成三条本地提示音通道,素材与 OpenCode 一致、可逐项静音,且对中止回合与子 agent 等场景做了静音处理。需要安装或 issue 时可直接访问仓库与社区目录页:

  • 目录页:https://www.skillhub.cn/plugins/contraliz/dsh-occlick
  • GitHub:https://github.com/contraliz/dsh-occlick
羽毛球分组比赛记分
小程序二维码

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

Xiaoye