前言¶
用 DeepSeek Harness(DSH)跑长任务时,窗口常被切到别的应用后面。一轮对话已经跑完、生成失败、输出触顶被截断,或者智能体在等你批准某次操作,这些状态若只靠盯着界面,很容易漏掉。社区插件 dsh-task-alert(维护者 Cartoncase,分类:客户端)针对的就是这件事:在对应时机于页面右上角弹出卡片;当 DSH 窗口在后台(被盖住或最小化)时,在 Windows 上再发一条系统通知,避免「后台跑着却不知道已经停在你这边」。
下面介绍它做什么、怎么装、怎么配,以及使用时需要知道的边界。
这是什么¶
dsh-task-alert 是面向 DeepSeek Harness 的任务提醒插件,npm 包名 dsh-task-alert,许可证 MIT。宿主半边监听 DSH 事件并经由 HTTP/SSE 推给浏览器半边;浏览器半边负责页内卡片、可选提示音,以及在窗口不在前台时的 Windows 原生 toast。
子代理、委派会话(origin=subagent 或 delegationDepth>0)一律不提醒,避免主对话以外的噪声。用户主动取消、崩溃恢复(aborted / interrupted)也不打扰。
核心功能¶
会提醒的场景¶
| 场景 | 页内卡片 | 系统通知 | 说明 |
|---|---|---|---|
| 一轮对话正常结束 | 有 | 仅窗口在后台时 | turn/end + completed |
| 生成失败 | 有 | 仅窗口在后台时 | turn/end + error、agent/error |
| 输出被截断 | 有 | 仅窗口在后台时 | turn/end + max-tokens |
| 等待审批 | 有(审批卡可常驻) | 仅窗口在后台时 | approval/asked;approval/decided 后自动收卡 |
卡片上会写清项目(会话工作目录名)和会话标题,而不只写「有操作要审批」,方便在多会话并行时辨认是哪一件事。
页内交互¶
卡片在右上角堆叠,数量受 maxCards 限制,超出丢弃最旧的;鼠标悬停时暂停自动关闭倒计时。卡片提供「查看会话」(通过 DSH 的 uiWorkspace.openSession 切到对应会话)、「×」立即关闭,以及快捷「设置」。点击系统通知时,会切会话并把 DSH 窗口叫到前台(Electron 侧通过 dsh://open)。
后台仍能收到的原因¶
浏览器半边通过 SSE(/task-alert/events)收事件,而不是依赖会被后台节流到约一分钟一次的 setInterval 轮询。断线或页面被冻结、DSH 重启后回到前台时,会请求 /task-alert/pending?since=<seq> 补最近 3 条,避免刷屏。
安装与启用¶
包发布到 npm 后,在 DSH 里一行安装(官方 README 原文):
dsh plugin --profile web add dsh-task-alert
装完重启 DSH。宿主半边只在启动时加载;可用健康检查确认服务已起来(示例输出中的版本号以你本机为准):
Invoke-WebRequest http://127.0.0.1:61948/task-alert/health -UseBasicParsing | % Content
# {"ok":true,"seq":0,"streams":1,"version":"0.2.0",...}
资料中的 package.json 当前版本为 0.2.6;health 返回的 version 应与已安装包一致。
本地开发若使用仓库自带脚本(PowerShell,装进桌面版 profile,幂等并会先备份清单):
powershell -NoProfile -ExecutionPolicy Bypass -File .\scripts\install.ps1
插件以当前 DSH 进程权限运行;安装前建议自行查看 GitHub 仓库 源码与 MIT 许可证,再决定是否启用。
配置¶
入口¶
改的是同一份配置,任选其一即可:
| 入口 | 适合 |
|---|---|
| DSH 设置 → 任务提醒 | 全部选项(推荐),注册在 settings.section 插槽 |
| 弹窗卡片上的「设置」 | 弹窗在眼前时的快捷开关与保留秒数 |
$DSH_HOME/dsh-task-alert/config.json |
手改;默认路径 ~/.dsh/dsh-task-alert/config.json |
控制台 __dshTaskAlert.config() / .settings() |
调试 |
保存后立即生效:页内卡片按新值渲染,宿主侧的类别过滤也在保存那一刻生效,无需重连或刷新整页。
主要字段¶
| 字段 | 默认 | 含义 |
|---|---|---|
enabled |
true |
总开关 |
notifyApproval |
true |
等待批准时提醒 |
notifyDone |
true |
一轮对话跑完时提醒 |
notifyError |
true |
生成失败时提醒 |
notifyTruncated |
true |
输出触上限被截断时提醒 |
inPage |
true |
页面右上角弹卡片 |
osNotification |
true |
窗口在后台时发 Windows 系统通知 |
sound |
true |
提示音(审批两声、其余一声) |
raiseWindow |
true |
点系统通知后把 DSH 窗口叫到前台 |
dismissSeconds |
12 |
卡片保留秒数;0 表示不自动关闭(审批卡可永远常驻) |
maxCards |
5 |
最多同时显示卡片数(1–10) |
dismissOnFocus |
true |
窗口重新获得焦点时收掉仍挂着的卡片 |
数值越界会被钳位(dismissSeconds 0–600、maxCards 1–10);配置文件 JSON 损坏时回落默认值,避免配置错误导致插件整体失效。
典型用法¶
- 安装并重启 DSH 后,在 DSH 设置 → 任务提醒 打开需要的类别(完成、失败、截断、审批),按需关闭页内卡片或系统通知。
- 在设置里使用「试一下」,或访问宿主路由
GET /task-alert/test造一条演示提醒;可用查询参数?kind=approval|error&project=…&title=…换场景。 - 故意把 DSH 窗口最小化或切换到其他应用,跑完一轮或触发审批,确认页内与系统通知行为是否符合
osNotification、raiseWindow等开关。
HTTP 侧常用路由(宿主半边,默认与本机 DSH web 服务同端口,资料示例为 127.0.0.1:61948):
| 路径 | 用途 |
|---|---|
GET /task-alert/events |
SSE 实时推帧,15 秒心跳,首帧带当前配置 |
GET /task-alert/pending?since=<seq> |
断线重连补帧 |
GET / POST /task-alert/config |
读/写配置 |
GET /task-alert/health |
存活探测 |
GET /task-alert/test |
演示提醒 |
适用场景与注意¶
适合谁:长时间让 DSH 在桌面版或 web profile 里跑任务、又经常把窗口留在后台的 Windows 用户;尤其依赖工具审批、多会话并行时需要明确「哪条会话在等你」的场景。
已知限制(来自 README):
- 同一台机器开多个 DSH 页面时,每个页面各弹一次(每页一条 SSE);桌面版通常只有一个页面。
- 系统通知依赖 Windows 通知权限;未授权时仍可有页内卡片,卡片上的「开启」可引导补授权。
- 会话标题依赖 DSH 的
session/title或sessionTitle;极少见取不到时显示「本轮对话」。
DSH 生态强调「一切皆插件」;社区目录 SkillHub 插件页 为独立站点,与 DeepSeek / 幻方无官方从属关系。星标与版本以仓库与 npm 为准,本文不引用未在资料中出现的用户案例或反馈。
结尾¶
dsh-task-alert 把「跑完了、失败了、截断了、卡在审批」四类状态做成可配置的页内提醒,并在 Windows 后台场景用 SSE + 系统通知补上感知缺口。需要安装命令、配置字段与实现细节时,以仓库 README 为准。