任务真正跑完时播放一声提示音,中断不响
30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/10 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add MacilyDots/dsh-turn-chime该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:待复验
是什么
dsh 原生插件 · chat
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 22 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 20 处,展示前 19 条)
- 写入本地文件lib/index.js:57
mkdirSync(logDir(), { recursive: true }); - 写入本地文件lib/index.js:59
if (statSync(file).size > MAX_BADGE_BYTES) renameSync(file, file + ".1"); - 读取本地文件lib/index.js:59
if (statSync(file).size > MAX_BADGE_BYTES) renameSync(file, file + ".1"); - 写入本地文件lib/index.js:63
appendFileSync(file, JSON.stringify(entry) + "\n"); - 写入本地文件lib/index.js:73
mkdirSync(logDir(), { recursive: true }); - 写入本地文件lib/index.js:75
if (statSync(file).size > MAX_LOG_BYTES) renameSync(file, file + ".1"); - 读取本地文件lib/index.js:75
if (statSync(file).size > MAX_LOG_BYTES) renameSync(file, file + ".1"); - 写入本地文件lib/index.js:79
appendFileSync(file, line + "\n"); - 读取本地文件lib/index.js:87
const text = readFileSync(logPath(), "utf8"); - 发起网络请求lib/client.js:114
fetch(diagUrl("/dsh-turn-chime/diag"), { - 发起网络请求lib/client.js:475
fetch(diagUrl("/dsh-turn-chime/badge"), { - 读取本地文件install.mjs:31
if (!existsSync(join(PLUGIN_SRC, "package.json"))) throw new Error("plugin source looks wrong: " + PLUGIN_SRC); - 读取本地文件install.mjs:38
if (!existsSync(pkgPath)) { - 读取本地文件install.mjs:43
const raw = readFileSync(pkgPath, "utf8"); - 写入本地文件install.mjs:58
copyFileSync(pkgPath, backup); - 写入本地文件install.mjs:60
writeFileSync(pkgPath, out, "utf8"); - 读取本地文件install.mjs:62
const check = readFileSync(pkgPath, "utf8"); - 读取本地文件install.mjs:67
const existing = lstatSync(link, { throwIfNoEntry: false }); - 删除本地文件install.mjs:72
rmdirSync(link);
扫描于 2026/11/1(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 任务完成播放提示音
- 中断时不响
DeepSeek Harness 的对话完成提示音:用户发起的任务真正跑完时响一声,中途打断不响。
README
由 DeepSeek 最新模型翻译生成dsh-turn-chime
对话任务真正跑完时播放一声提示音。判定在宿主侧、发声在客户端,音色用 Web Audio 现场合成,不带任何音频文件。
它解决什么
DeepSeek Harness 的 api-session/status 只告诉你「agent 现在忙不忙」。直接拿它当完成信号会踩两个坑:
- 分不出「跑完」和「被中断」。用户按下停止、报错退出、被 hook 拦下,状态同样会翻回 idle。
- 一个任务可能由多个 driver 组成。子代理回灌结果、goal 轮次续跑,每个 driver 停下都会翻一次 idle,于是一段任务响好几次。
这个插件把判定挪到宿主侧,只有「用户发起的任务正常跑完」才响一次。
安装
把仓库放在任意目录,然后:
node install.mjs # 装进 %DSH_HOME%\profiles\desktop
node install.mjs web # 装进指定 profile(可给多个)
node install.mjs D:\path\to\profile
脚本做三件事:往 profile 的 package.json 写 file: 依赖、往 dsh.profile.bundles 加插件名、在 node_modules/<插件> 建一个指向本仓库的 junction(所以改源码立即生效,不用再同步副本)。
展开完整文档(README 剩余 1 节)
dsh-turn-chime
对话任务真正跑完时播放一声提示音。判定在宿主侧、发声在客户端,音色用 Web Audio 现场合成,不带任何音频文件。
它解决什么
DeepSeek Harness 的 api-session/status 只告诉你「agent 现在忙不忙」。直接拿它当完成信号会踩两个坑:
- 分不出「跑完」和「被中断」。用户按下停止、报错退出、被 hook 拦下,状态同样会翻回 idle。
- 一个任务可能由多个 driver 组成。子代理回灌结果、goal 轮次续跑,每个 driver 停下都会翻一次 idle,于是一段任务响好几次。
这个插件把判定挪到宿主侧,只有「用户发起的任务正常跑完」才响一次。
安装
把仓库放在任意目录,然后:
node install.mjs # 装进 %DSH_HOME%\profiles\desktop
node install.mjs web # 装进指定 profile(可给多个)
node install.mjs D:\path\to\profile
脚本做三件事:往 profile 的 package.json 写 file: 依赖、往 dsh.profile.bundles 加插件名、在 node_modules/<插件> 建一个指向本仓库的 junction(所以改源码立即生效,不用再同步副本)。
装完必须重启 DSH —— 客户端模块清单在启动时生成,不重启不会加载。
卸载:从 dsh.profile.bundles 里删掉这一行,再删掉 node_modules/dsh-turn-chime。
使用
设置 → 提示音:
| 项 | 说明 |
| 启用提示音 | 总开关 |
| 音色 | 清脆叮声 / 钟声 / 短促清音 / 短促提示 / 水滴 / 木琴 / 复古双音 / 柔和低音 / 静音 |
| 音量 | 0–100%,拖完自动试听 |
| 忽略子代理会话 | 默认开。子代理跑完不算「用户等的那件事」 |
| 事件通道 | 显示 SSE 是否连着,以及本次已响几次 |
配置存在浏览器 localStorage(dsh-turn-chime:config:v1)。
触发时机
三个条件同时满足才响:
1. session/event 的 user/message,且 source.kind === "user" —— 用户真的发过一条消息(time-context 注入、子代理回灌、hook 注入都不算);
2. session/event 的 turn/end,且 reason.kind === "completed" —— 正常跑完。被中断(aborted)、报错(error)、被 hook 拦下(blocked)、撞上 max-tokens 都不响;
3. agent/status 翻到 idle —— 一个 driver 彻底停下。
一次用户消息只响一次:pending 标记在第一次响铃时消费掉,之后同一任务的自动续跑不再重复响。
判定结果经 SSE /dsh-turn-chime/events 推给客户端。
排查
宿主侧诊断日志:
%DSH_HOME%\logs\dsh-turn-chime.log
正常的一次收尾长这样:
client-ready {"hasSessions":false,"audio":true,"sse":true,...}
sse-open
chime {"sessionId":"...","clients":1}
play {"sessionId":"...","voice":"chime","ok":true,"count":1}
| 日志里看到什么 | 说明 |
| 没有 client-ready | 客户端插件没加载,重启 DSH |
| sse:false | 浏览器没有 EventSource,收不到完成事件 |
| 有 client-ready 但没有 sse-open | SSE 没连上,看设置面板的事件通道 |
| 只有 skip-turn-end | 那次结束的 reason 不是 completed |
| 完全没有 chime 行 | 宿主没判定通过:那条消息不是用户发的 |
| play ok:false | 音色是「静音」,或音频上下文被策略挂起 |
三条同源路由:
- GET /dsh-turn-chime/events —— SSE 完成事件流
- GET /dsh-turn-chime/log —— 读回最近 120 行
- POST /dsh-turn-chime/clear —— 清空日志
浏览器控制台里的调试入口:
__dshTurnChime.play('chime', 0.6) // 手动试听
__dshTurnChime.status() // { connected, chimes, config }
__dshTurnChime.onChime('x') // 模拟一次完成事件 → 应当响一声
为什么这么分
发声只能在渲染进程。 宿主里播声音要么 spawn 一个 PowerShell/播放器进程(冷启动几百毫秒,还要管进程回收),要么用 Electron 的 shell.beep()(音色不可选)。Web Audio 零依赖、零延迟、跨平台,音色还能现场合成。
判定只能在宿主。 客户端拿到的 api-session/status 是个布尔值,看不出这次结束是正常跑完还是被按了停止;turn/end 的 reason 和 user/message 的来源都只存在于宿主事件总线里。
文件
| 文件 | 作用 |
| lib/index.js | 宿主:完成判定 + /dsh-turn-chime/{events,diag,log,clear} 四条路由 |
| lib/client.js | 客户端:SSE 订阅、Web Audio 合成、设置面板、诊断上报 |
| cordis.patch.yml | bundle 补丁,一条 insert 行激活插件 |
| install.mjs | 幂等安装脚本 |
| test/test-logic.mjs | 判定逻辑测试(假 ctx 回放事件序列) |
测试
node test/test-logic.mjs # 或 npm test
覆盖六个场景:正常跑完→响、用户中断→不响、只有 time-context 注入→不响、一次消息两个 driver→只响一次、报错→不响、中断后再发消息跑完→响。
已知限制
- 提示音只在浏览器渲染进程里响,DSH 完全关闭时不会有声音。
- 判定依赖 DSH 的内部事件(session/event、agent/status)。DSH 大版本升级后如果事件形状变了,lib/index.js 需要同步调整。
- 只在 reason.kind === "completed" 时响,出错的结束是静音的。想让出错也响(换一种声音),改 lib/index.js 里的 CHIME_REASON。
License
MIT预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
MacilyDots/dsh-turn-chime
任务真正跑完时播放一声提示音,中断不响
相关插件 · 对话 / 记忆
上下文中枢oceanbase/powercontext
上下文跟着工作走 —— 跨会话、跨智能体、跨人。
★ 1,462已汉化DSH
73
智能体记忆库plastic-labs/honcho
Honcho 是记忆基础设施,用来构建有状态的智能体。这些智能体能理解不断变化的人、智能体、群组、项目和想法。
★ 7,848已汉化DSH
71.7
长程智能体控制面loopx-project/loopx
给 Agent 一个目标,让工作持续向前。
★ 6,358已汉化DSH
71.3
智能体上下文数据库volcengine/OpenViking
给 AI 智能体用的上下文数据库
★ 41,246已汉化DSH
71.3
长效机器人团队Fei2411/DS-Bot
DS Bot 是一个基于 DeepSeek Harness简称 dsh的 bot 插件,插件将 dsh 改造为 bot…
★ 4,717已汉化DSH
71.1
可携带记忆层EverMind-AI/EverOS
为什么选择 EverOS
★ 13,711已汉化DSH
71.1