dsh-task-alert:DSH 任务完成与审批提醒(页内卡片 + 后台系统通知)

前言

用 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 损坏时回落默认值,避免配置错误导致插件整体失效。

典型用法

  1. 安装并重启 DSH 后,在 DSH 设置 → 任务提醒 打开需要的类别(完成、失败、截断、审批),按需关闭页内卡片或系统通知。
  2. 在设置里使用「试一下」,或访问宿主路由 GET /task-alert/test 造一条演示提醒;可用查询参数 ?kind=approval|error&project=…&title=… 换场景。
  3. 故意把 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 为准。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye