DSH Web UI 音效,适配 DeepSeek Harness 0.2.0——dsh-plugin-uisfx 的社区移植版:界面交互 + 任务状态提示音,78 个音效 × 12 套音效包,按场景配置的设置页。
32.2/100
综合分
3
GitHub 星标
309
npm 周下载
—/5
用户评分
数据截至 2026/10/18 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-ui-soundnpm 源 · dsh-ui-sound 的发布者账号已校验与本仓库一致
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · ui
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 14 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-ui-sound @ 0.1.2
✓Node 引擎要求 >=20 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/22 09:42:42
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 9 处,展示前 9 条)
- 读取本地文件lib/index.js:117
if (existsSync(manifest)) { - 读取本地文件lib/index.js:118
const parsed = JSON.parse(readFileSync(manifest, 'utf8')) - 读取本地文件lib/index.js:204
return normalizePrefs(JSON.parse(readFileSync(path, 'utf8'))) - 写入本地文件lib/index.js:219
mkdirSync(dirname(path), { recursive: true }) - 写入本地文件lib/index.js:221
writeFileSync(temporary, `${JSON.stringify(prefs, null, 2)}\n`, 'utf8') - 写入本地文件lib/index.js:222
renameSync(temporary, path) - 读取本地文件lib/index.js:368
configExists: existsSync(configPath), - 发起网络请求lib/client.js:261
fetch(API_BASE, { - 发起网络请求lib/client.js:271
fetch(API_BASE, { cache: "no-store" }).then((res) => res.json()).then((data) => {
扫描于 2026/11/1(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 界面交互提示音
- 任务状态提示音
- 音效包与场景配置
README
由 DeepSeek 最新模型翻译生成dsh-ui-sound
DeepSeek Harness Web GUI 的界面音效插件:把「界面交互」和「任务状态更新」都变成可听见的语义反馈,每一类反馈都能在设置页里单独挑音效、单独开关。
⚠️ 这是社区移植版,不是上游官方延续
本仓库是 dsh-plugin-uisfx(MIT,作者 XanthanL)在 DSH 0.2.0 上的移植适配版。
上游声明支持 dsh 0.1.0-rc.6;在 0.2.0 上它的宿主行无法激活、任务音静默失效。
请优先使用上游——只有当你确实运行在 0.2.0+ 且撞上那些问题时才需要本版。
改了什么、依据是什么,逐条记录在 PROVENANCE.md。
音效引擎来自开源项目 uisfx(MIT,Copyright © Yuki Capital),共 78 个 cue × 12 个音色包,全部由 Web Audio 实时合成,不含任何音频文件、不发起网络请求。
见 NOTICE 与 vendor/uisfx-0.4.0.js。
安装
dsh plugin --profile <你的 profile> add github:SOH4C4759/dsh-ui-sound
然后重启 dsh
lib/ 是构建产物且已随仓库提交,没有构建步骤,git 源安装开箱可用。装完在 设置 → 音效 里配置。
展开完整文档(README 剩余 1 节)
dsh-ui-sound
DeepSeek Harness Web GUI 的界面音效插件:把「界面交互」和「任务状态更新」都变成可听见的语义反馈,每一类反馈都能在设置页里单独挑音效、单独开关。
⚠️ 这是社区移植版,不是上游官方延续
本仓库是 dsh-plugin-uisfx(MIT,作者 XanthanL)在 DSH 0.2.0 上的移植适配版。
上游声明支持 dsh 0.1.0-rc.6;在 0.2.0 上它的宿主行无法激活、任务音静默失效。
请优先使用上游——只有当你确实运行在 0.2.0+ 且撞上那些问题时才需要本版。
改了什么、依据是什么,逐条记录在 PROVENANCE.md。
音效引擎来自开源项目 uisfx(MIT,Copyright © Yuki Capital),共 78 个 cue × 12 个音色包,全部由 Web Audio 实时合成,不含任何音频文件、不发起网络请求。
见 NOTICE 与 vendor/uisfx-0.4.0.js。
安装
dsh plugin --profile <你的 profile> add github:SOH4C4759/dsh-ui-sound
然后重启 dsh
lib/ 是构建产物且已随仓库提交,没有构建步骤,git 源安装开箱可用。装完在 设置 → 音效 里配置。
它解决什么
DSH 默认几乎没有声音反馈:任务跑完了?失败了?按钮点中了没有?只能靠眼睛确认。
本插件补上两类语义音效:
- 交互音效 —— 按钮按下时按语义分类发声(普通 / 主要 / 开关 / 发送 / 关闭 / 危险 / 链接),键盘 Enter、Space 激活同样发声。
- 任务状态音效 —— 当前会话开始运行、运行成功结束、运行失败结束,以及出现需要你处理的交互(授权请求 / 提问 / 计划复核)时发声。
触发时机
| 情景 id | 默认 cue | 什么时候响 |
| task.start | start | 当前会话的 agent 开始运行 |
| task.success | success | 当前会话正常结束一轮 |
| task.failure | error | 当前会话因错误结束一轮 |
| task.pending | notification | 任意会话出现待处理交互(授权 / 提问 / 计划复核) |
| click.normal | press | 普通按钮 |
| click.primary | select | 主要 / 强调按钮 |
| click.toggle | toggle-on | 开关、checkbox、aria-pressed |
| click.send | send | 发送 / 提交 |
| click.close | close | 关闭 / 取消 |
| click.danger | delete | 删除 / 清空 / 危险操作 |
| click.link | open | 链接 |
三条刻意的取舍:
1. 任务音只跟「你正在看的那个会话」。子代理和后台会话会不停地起停,全都发声等于噪声。
判据是会话列表里 retainedBy.mainView > 0 的那一行——和 DSH 自己判定「当前会话」的规则一致。
你切到设置页、文件页时,沿用最后一个主视图会话,不会突然静音。
2. 待处理提醒对所有会话生效。它的价值就在于你没在看那个会话时提醒你,所以不按主视图过滤,用 提醒音 开关单独控制。
3. 首帧只记基线。页面加载时已经在跑的会话不会补一声「开始」。
配置
设置 → 音效。可配置项:
| 设置 | 默认值 | 说明 |
| 启用音效 | 开 | 总开关 |
| 音量 | 55% | 0–100% |
| 音色包 | zen | 12 种整体音色,一键切换整套性格 |
| 任务音 | 开 | task.start / success / failure 三类 |
| 按钮音 | 开 | 所有 click. |
| 提醒音 | 开 | task.pending |
| 每情景 cue | 见上表 | 每个情景独立下拉选择 + 试听按钮 |
持久化落点(可直接手改,改完刷新页面生效):
%USERPROFILE%\.dsh\ui-sound\config.json
{
"enabled": true,
"volume": 0.55,
"pack": "zen",
"taskSounds": true,
"clickSounds": true,
"attentionSounds": true,
"mapping": { "task.success": "complete", "click.send": "send" }
}
宿主半会校验并裁剪这个文件:音量夹到 0–1,未知音色包回落到 zen,未知 cue 回落到该情景的默认值——一个手滑写错的键不会让其它配置一起失效。设置页的改动也写回同一个文件,所以清浏览器数据不会丢配置。
12 个音色包
minimal(干练精确) / soft(圆润温暖) / glass(明亮清脆) / arcade(像素游戏) / mechanical(机械硬朗) / organic(木石水声) / dreamy(空灵慢速) / scifi(全息数字) / rubber(弹性俏皮) / cinematic(深沉大片) / studio(克制精准) / zen(纸、木、风铃,默认)
浏览器自动播放策略
浏览器不允许网页在没有用户手势前启动 AudioContext,因此页面加载后第一次点击之前不会有声音,这是浏览器行为、不是插件故障。插件在第一次 pointerdown 时预热并恢复 AudioContext,所以从第一次点击起就该有声;若仍无声,先点一下页面任意位置。
给其它插件用的 API
浏览器半通过 ctx.reflect.provide("uiSound", service) 暴露服务:
ctx.uiSound.play("task.success") // 按情景触发(受对应开关与总开关约束)
ctx.uiSound.playCue("achievement") // 直接播一个 cue
ctx.uiSound.preview("success") // 设置页那种无门控试听
ctx.uiSound.getPrefs() // 当前偏好
调试入口:window.__dshUISound()(player)、window.__dshUISoundDebug()(当前 prefs)。
架构
- 宿主半 lib/index.js:只注入 webServer,提供 /ui-sound/api/settings(GET/POST)与 /ui-sound/api/status,只接受回环地址 + 同源的请求;偏好走临时文件 + rename 原子写入。
- 浏览器半 lib/client.js:内联 uisfx 0.4.0 引擎 + DSH 集成层。
任务状态来自 ctx.sessions.list 的行级 running 与 ctx.uiSession.sessionStatus 的 pendingInteraction (uiSession 通过 ctx.inject 等待,见下);交互音来自 document 捕获阶段的 pointerdown / 键盘合成 click。
- 不依赖 Host 设置命名空间、不依赖 webRuntime——前者外部 bundle 插件拿不稳,后者在 DSH 0.2.0 里不存在。
与 dsh-plugin-uisfx 的关系
本插件是 dsh-plugin-uisfx(MIT)在 DSH 0.2.0-rc.2 上的就地移植适配版,音效引擎与其 78 cue / 12 音色包完整保留,只重写了 DSH 集成层。原版在本版本上失效的三处(都不报错、只静默失效):
| 原版读取 | 0.2.0 实情 | 后果 |
| 宿主 inject: ["webServer","webRuntime"] | 没有任何包提供 webRuntime | 宿主行无法激活 |
| ctx.sessions.list.getSnapshot().current | 快照是 { ids, byId, phase, projectionsBySession } | 任务状态监听静默失效 |
| snapshot.pending | SessionSnapshot 只有 pendingSubmissions,待处理交互在 uiSession.sessionStatus.pendingInteraction | 提醒音永远不会响 |
另有一处设计修正:attentionSounds 开关在上游被定义、在设置页可点,但没有任何代码读它;本版把 task.pending 接到该开关上。
修复于 v0.1.2 的一处移植缺陷:uiSession 由 dsh-client-ui-session 提供,而它在自己的 API 依赖就绪后才注册;本插件以 immediately: true 先启动,旧版的一次性 ctx.get("uiSession") 通常拿到 undefined,于是「待处理提醒」整页静默。现在改用 ctx.inject(["uiSession"], …):服务出现后再订阅 sessionStatus,服务始终缺席时其余功能(点击音、设置页)照常加载。回归检查见 scripts/verify-client-wiring.mjs。
逐文件的来源、改动幅度与许可归属见 PROVENANCE.md。
校验(改代码前后都该跑)
仓库里的 lib/ 是提交进版本库的产物,所以 CI 不构建,只守会被手改悄悄破坏的不变量。
四条命令本地与 CI 完全一致,不需要 pnpm install(不依赖任何 npm 包):
node scripts/verify-bundle.mjs # 发布形态契约:manifest、exports/files 目标、入口语法
node scripts/verify-package.mjs # 发布元数据、浏览器半契约、宿主半离线求值、文档里的条数
node scripts/verify-client-wiring.mjs # 浏览器半接线:晚注册的 uiSession 也必须接上提醒音
node scripts/verify-publish-guards.mjs # 本机绝对路径 / 账号名 / 凭据 / 内网地址
四者分工不重叠:
- verify-bundle.mjs 管「包装出来能不能被加载」——dsh.bundle.patch、每个 exports/files 目标是否真实存在、入口文件能否解析。它接受一个可选 root,所以既能查检出,也能查解包后的发布压缩包(release.yml 就是这么复核产物的)。
- verify-package.mjs 管「发布出去是否安全、是否还在用当前 dsh 的 API」——真实 LICENSE 文件、非 private、repository/author/meta;浏览器半只有一个 ModuleLoader 工厂、只 require("react")、不再读 0.2.0 已移除的 list.current 与 snapshot.pending。它会真的 import lib/index.js(宿主半只依赖 node: 内置模块),读回 SCENARIO_IDS / PACK_IDS / CUE_IDS / DEFAULT_PREFS,核对 README 写的 11 情景 / 12 音色包 / 78 cue 是否就是代码真实值,并验一遍 normalizePrefs 的裁剪行为。文档漂移会让 CI 红,不会等读者踩坑才发现。
- verify-client-wiring.mjs 管「服务晚到一步时还接不接得上」——在 node:vm 里用最小 Cordis 上下文加载真实 lib/client.js,先 apply、后注册 uiSession,断言订阅确实发生、待处理交互只响一次、拆卸后释放订阅;同时覆盖没有 ctx.inject 的旧宿主与始终不挂 uiSession 的宿主。它只验接线(是否决定播放),不验声音本身。
- verify-publish-guards.mjs 扫全树文本文件,命中作者本机路径、账号名、token 字面量或内网网段即失败。
.github/workflows/ci.yml 在 push / PR 上跑全部四条,另加一次 npm pack 并核对压缩包里含全部运行期文件; release.yml 在 v tag 上出发布包。发布流程见 RELEASING.md。
更新记录
v0.1.2
- 修复 issue #1:uiSession 晚于本插件注册时,「待处理提醒」整页不响。改用 ctx.inject(["uiSession"], …) 等待服务出现后订阅,并新增 scripts/verify-client-wiring.mjs 回归检查。
v0.1.1
- 发布契约:版本复用守卫、随包发布打包检查、安装包 tarball 资产。
已知边界(未做)
- 只做合成音效,不支持导入自定义音频文件(uisfx 引擎本身是参数化合成,没有采样播放通道)。
- 不做 hover 音(78 个 cue 里有 hover,但悬停发声在长时间使用中会变成噪声)。
- 不做工具调用级别的逐次音效(一轮里几十次工具调用,会淹没真正重要的状态变化)。
许可与归属
- 本仓库新增与重写的代码:MIT,Copyright © 2026 林冠宇 (SOH4C4759),见 LICENSE。
- 内联的 uisfx 0.4.0 运行时:MIT,Copyright © Yuki Capital,全文见 NOTICE。
- 移植自 dsh-plugin-uisfx:MIT,Copyright © 2026 dsh-uisfx contributors,全文见 NOTICE。
- 逐文件的来源与改动幅度见 PROVENANCE.md。
若你是上述任一权利人或维护者,对归属写法或移植本身有异议,开一条 issue 即可,我们会立即调整或下架。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
SOH4C4759/dsh-ui-sound
DSH Web UI 音效,适配 DeepSeek Harness 0.2.0——dsh-plugin-uisfx 的社区移植版:界面交互 + 任务状态提示音,78 个音效 × 12 套音效包,按场景配置的设置页。
相关插件 · UI / 主题
破甲增强版JeffKeeping/dsh-purge-plus
dsh-purge 的非官方分支fork:适配 DeepSeek Harness 0.2.1-rc.2、破甲内核…
★ 387已汉化DeepSeek 客户端
71.9
无代码业务系统平台nocobase/nocobase
NocoBase 是什么
★ 24,798已汉化DSH
71.8
1Panel 服务器面板1Panel-dev/1Panel
全球 250 万+ 自托管用户共同喜爱。
★ 37,327已汉化DSH
71.5
终端编码代理esengine/DeepSeek-Reasonix
· 指南 · ACP · 扩展开发 · 规格 · 官方网站 · Discord · QQ
★ 36,021已汉化DSH
71.2
工作状态行动态ccch1mneyyy/working-activity
作者:chimney@ccch1mneyyy。社区项目,非 DeepSeek 官方项目。
★ 664已汉化DSH
71.2
多模型配置管家farion1231/cc-switch
跨平台桌面一体化助手,支持 Claude Code、Codex、OpenCode、DeepSeek Harness 等工具,唯一官网 ccswitch.io
★ 150,724已汉化DSH
71.1