前言¶
用 DeepSeek Harness(DSH)跑长任务时,模型常会停下来等你审批、回答问题或确认计划;任务跑完也可能在你切到别的窗口时已经结束。若一直盯着 DSH 窗口,体验并不好。系统自带的桌面通知可以在不打断当前工作的前提下提醒你「该回 DSH 看一眼了」。
dsh-desktop-toast 是社区维护者 hhaosheng 发布的 DSH 客户端类插件:在任务需要人工介入或正常完成时,通过操作系统原生通知弹一条 toast。它由早期的 dsh-desktop-notify 原型演进而来,现以标准 bundle 形式接入官方插件管理器,安装与卸载不再依赖手工往 profile 里拷文件。
这是什么¶
dsh-desktop-toast(npm 包名同插件 id)在宿主侧监听 DSH 会话事件,按规则调用各平台的系统通知 API。当前版本为 0.1.2,MIT 许可证,要求 Node.js >= 20。插件归属分类为「客户端」,在 SkillHub 插件目录 与 GitHub 仓库 均可查阅说明。
提示时机¶
下面介绍插件在哪些事件下会弹通知,以及刻意不提示的情况。
| 会话事件 | 通知 | 说明 |
|---|---|---|
tool/call 且工具为 ask_user_question / exit_plan_mode |
任务中断 · 需要你处理 | 模型在等你回答或确认计划 |
approval/asked |
任务中断 · 需要你处理 | 有操作在等你授权 |
turn/end 且 reason.kind === 'completed' |
任务完成 | |
turn/end 且 reason.kind 为 blocked / error / max-tokens |
任务中断 · 需要你处理 | 需要你看一眼才能继续 |
turn/end 且 reason.kind === 'aborted' |
不提示 | 用户自行取消 |
子会话(subagent)产生的事件一律忽略,避免一次任务连续弹出多条通知。
安装与启用¶
安装方式与其它 DSH 插件相同,需指定 profile(示例为 desktop)。任选其一即可。
# CLI
dsh plugin --profile desktop add dsh-desktop-toast
本地开发时可直接指向插件目录:
dsh plugin --profile desktop add D:\code\dsh-notify\dsh-desktop-toast
也可以在 DSH 桌面端侧边栏打开「插件」,搜索 dsh-desktop-toast 后安装。装完立即生效,无需重启 DSH。
不推荐手工把 cordis.patch.yml 里的 insert 行抄进 %USERPROFILE%\.dsh\profiles\<profile>\cordis.patch.yml;若必须如此操作,注意 id 保持唯一。
插件在 DSH 宿主进程内加载,与当前 DSH 进程权限一致。安装前建议浏览仓库源码并确认 MIT 许可证是否满足你的合规要求。
配置¶
DSH 插件设置页不会为本插件自动生成表单;配置通过在 profile 的 cordis.patch.yml 里按 bundle 的 id 覆盖 config。修改后需重启 DSH 生效。
示例(关闭完成通知、调整去重窗口):
- id: desktop-toast
name: dsh-desktop-toast
config:
onDone: false
dedupeWindowMs: 5000
| 键 | 默认值 | 作用 |
|---|---|---|
onInterrupt |
true |
是否发「任务中断」通知 |
onDone |
true |
是否发「任务完成」通知 |
silent |
false |
静音弹出(Windows 上不响提示音) |
dedupeWindowMs |
3000 |
同一种通知在该时间窗口内只弹一次(毫秒,0 关闭去重) |
bootQuietMs |
3000 |
插件加载后这段时间内的「任务完成」不弹;「中断」不受影响 |
interruptText |
任务中断 · 需要你处理 |
中断通知正文 |
doneText |
任务完成 |
完成通知正文 |
appId |
com.deepseek.dsh |
Windows 通知 AUMID,默认复用 DSH 应用身份 |
若只希望在中断时被打扰,可将 onDone 设为 false;若启动阶段不希望刷「任务完成」,可增大 bootQuietMs。
平台与实现要点¶
- Windows(主要目标):通过 PowerShell 5.1 与 WinRT
ToastNotificationManager弹出通知,通知中心里显示为 DeepSeek Harness。需打开系统通知总开关,且未单独关闭 DSH 的通知。正文在 Windows 上仅一行;标题留空,由系统显示应用名。 - macOS:使用
osascript的display notification,尽力而为,弹窗归属常为「脚本编辑器」。 - Linux:依赖
notify-send,系统需安装 libnotify。
每次通知在 Windows 上会短暂拉起一个 PowerShell 进程(约几百毫秒),实现上已 unref(),不拖住宿主退出。插件不支持点击通知跳回对应会话。事件仅作用于宿主侧会话;纯 client 侧(例如浏览器直连)场景没有系统通知。
从 dsh-desktop-notify 迁移¶
若 profile 里仍挂着旧原型 dsh-desktop-notify,与 dsh-desktop-toast 同时启用会弹两遍通知,应先拆旧再装新:
- 删除 profile 下
node_modules\dsh-desktop-notify目录; - 删除 profile
cordis.patch.yml中id: desktop-notify整块(含其前面的- insert:行); - 按上文「安装与启用」安装
dsh-desktop-toast。
适用场景与注意¶
适合经常在 DSH 里跑 agent、且会离开窗口做别事的用户:审批、问答、计划确认和异常结束时有中断提醒,正常跑完有完成提醒,自行 aborted 则保持安静。
社区插件目录 SkillHub 与 DeepSeek、幻方无官方从属关系;DSH 生态强调「一切皆插件」,本插件是其中一条可选能力,并非 DSH 内置功能。
源码与变更记录见 GitHub:hhaosheng/dsh-desktop-toast;目录页 SkillHub:dsh-desktop-toast。