前言¶
用 DSH 跑 agent 任务,一个任务跑几分钟到几十分钟是常事,尤其是多轮 goal loop。这段时间你多半切去干别的了,任务什么时候结束,要么时不时切回窗口看一眼,要么自己写轮询——前者费注意力,后者绕得远。
dsh-task-complete-notifier 只解决这一件事:任务真正结束时,在屏幕右下角弹一张置顶卡片告诉你,卡片上还能直接敲下一条指令。DSH 的理念是「一切皆插件」,这类客户端侧的提醒需求正好适合做成插件。下面介绍它的功能、安装和使用。
这是什么¶
dsh-task-complete-notifier 是 Kreatur-ECHO 维护的 DeepSeek Harness 任务完成通知插件,当前版本 1.5.2,MIT 许可证。一句话概括:右下角置顶卡片显示对话标题,可直接输入下一条指令,可开关的「叮」声提示,环境缺失自动降级。
实现上它是 host-half only 的插件,零运行时 npm 依赖,唯一的 peerDependency 是 @deepseek-ai/cordis ^4.0.1。它为 DSH Desktop (Electron) 设计;在纯 dsh web(浏览器)环境下没有 Electron 可用,toast 会降级为 host 日志。
核心功能¶
只在任务真正结束时触发一次¶
插件监听 agent/status cordis 事件,在 running → idle 边沿触发。DSH 的 agent 状态机里,running 表示任务执行中——包括多轮 goal loop 的每一个中间回合——idle 才表示整个任务结束。所以多轮任务的中间回合不触发,被新消息打断的任务也不触发;子代理(subagents)同样被跳过,只有主任务结束才通知。
触发时它不立即弹窗,而是先等 3 秒,确认 agent 不会马上回到 running,再打开置顶窗口。
置顶卡片¶
toast 是一个独立的 Electron alwaysOnTop 置顶窗口,DSH 在后台或被其他应用遮挡时仍然可见。卡片是不透明的深色样式:#181818 背景、12px 圆角、#333333 边框、带投影,距右下角 30px,出现时有 0.3s 的 fadeInUp 动画。
关闭有三种方式:点「稍后/Later」、点击卡片外部、或等它自动关闭。
卡片内直接续指令¶
卡片底部有一个输入框(v1.1),弹出时自动聚焦,可以直接输入下一条指令,按 Enter(或点「发送」)后经 agent.followup() 投递到对应会话的 agent;如果那个 agent 正忙,指令会排队成为它的下一回合。整个过程不需要把 DSH 切到前台。
从 v1.2 起,卡片上还会显示会话的任务标题(折叠自 session/title 事件),你能看出是哪个任务刚完成、输入的指令会发往哪个会话。
两个细节:
1、一次只显示一个 toast。新的完成事件排进队列(最多 5 个,超出丢弃最旧),你提交或关闭当前卡片后才显示下一个——正在输入的指令不会被后弹的卡片覆盖。
2、如果会话已经消失,提交指令时卡片会显示内联错误并保持打开,已输入的内容不会丢。
声音提示¶
卡片弹出时播放一个内置的合成「叮」声(Web Audio)。右上角有 🔊/🔕 按钮可以开关,选择持久化在 localStorage(v1.4–v1.5)。
想用自己的音效,配置 soundFile 指定 mp3/wav/ogg/m4a 文件即可;soundVolume(0–1)控制音量。播放带 0.1s 淡入,且提前 0.1s 开始,不会有延迟感。
安装与启用¶
先说运行要求:Node ≥ 20;DSH 需带 agent loop,推荐 rc.6+ 以支持 agent.followup。
方式一,tarball 安装(推荐)。先从 GitHub Releases 下载 dsh-task-complete-notifier-1.5.2.tgz,再用 DSH CLI 安装:
dsh plugin --profile desktop add file:D:\Downloads\dsh-task-complete-notifier-1.5.2.tgz
然后重启 DSH Desktop。
方式二,一键脚本。解压 tarball 后,在解压目录执行:
powershell -ExecutionPolicy Bypass -File install.ps1
也可以直接指定 tarball 或其他 profile:
powershell -ExecutionPolicy Bypass -File install.ps1 -Profile web -Tarball D:\dsh-task-complete-notifier-1.5.2.tgz
方式三,手动安装。把 tarball 解压到任意位置(如 C:\Users\<you>\.dsh\plugins\dsh-task-complete-notifier),在 ~/.dsh/profiles/desktop/package.json 中添加 link 依赖及 bundles 条目:
{
"dependencies": {
"dsh-task-complete-notifier": "link:C:/Users/<you>/.dsh/plugins/dsh-task-complete-notifier"
},
"dsh": {
"profile": {
"bundles": [
"dsh-task-complete-notifier"
]
}
}
}
然后在 profile 目录里运行 pnpm install,重启 DSH Desktop。
验证:重启后日志应出现下面这行,说明插件已挂载,括号里是各环境能力的检测结果:
[task-notifier] host half mounted (v9: env webServer=true agents=true electron=true port=61997)
跑完一个任务,右下角应弹出卡片。
一次典型使用¶
1、在 DSH Desktop 里发起一个耗时任务,切去干别的事;
2、任务结束时右下角弹出置顶卡片,播放「叮」声,卡片上显示该会话的任务标题;
3、在输入框里直接敲下一条指令,按 Enter,指令经 agent.followup() 投递到那个会话;不想继续就点「稍后」或等它自动关闭;
4、有多个任务先后完成时,toast 逐个出现,逐个处理即可。
配置与降级¶
插件的文本、settle delay、cooldown、auto-close、placeholder、labels 都可以通过 profile 里 cordis.patch.yml 的插件挂载行配置;声效相关的 soundFile、soundVolume 也在配置项之列。
它的所有依赖都是可选的,缺什么就关掉对应功能,完成检测本身始终工作:
webServer缺失:跳过/task-notifier/*路由;agents/agent.followup缺失:隐藏输入框,检测仍工作;- Electron 缺失(纯
dsh web):toast 降级为 host 日志; session/title缺失:仅隐藏标题行。
前面那行挂载日志就是一次环境自检,env webServer=true agents=true electron=true port=61997 即各项能力的检测结果,装完先看这一行。
适用场景与注意¶
适合用 DSH Desktop 跑长任务、同时要做别的事的人:任务结束不用盯着,卡片置顶不会被挡住,看完直接在卡片里续指令。纯浏览器环境(dsh web)没有 Electron,toast 只能降级为日志,这个插件的目标环境是 DSH Desktop。
注意:插件以当前 dsh 进程权限运行,安装前建议先读一遍源码、确认许可证(本项目为 MIT)再装。
小结¶
dsh-task-complete-notifier 把「任务什么时候跑完」从一件要自己盯的事,变成一张主动弹出的置顶卡片,并且能在卡片里直接续指令,环境缺什么就降级什么,不挑部署形态。
- 社区目录页:https://www.skillhub.cn/plugins/Kreatur-ECHO/dsh-task-complete-notifier (独立社区站点,与 DeepSeek / 幻方无官方从属关系)
- GitHub:https://github.com/Kreatur-ECHO/dsh-task-complete-notifier