dsh-notify:DSH 任务完成时的 Windows 原生通知

前言

在 DeepSeek Harness(DSH)里跑长任务时,窗口最小化去做别的事很常见。若只靠盯着界面,很难知道 agent 是还在多回合里跑、已经停下来等你,还是整件事已经结束。社区里也有「回合结束就弹通知」的做法,但在开启 goal 目标模式时,一个目标往往要跑很多回合——每个回合结束都响一次,只会逼你把通知关掉。

下面介绍维护者 ztl0001 的客户端插件 dsh-notify(市场包名 dsh-notify-toast)。它在 Windows 通知栏弹出系统原生 toast,并在设计上区分「某一回合结束」和「任务真正做完」,尽量做到一条通知对应一件完成的事。

这是什么

dsh-notify 是 DSH 的 Cordis 插件:监听宿主会话与 agent 状态,在合适时机调用 WinRT toast API,把会话标题、结果状态和最后一条回复的摘要推到 Windows 通知中心。

和其他「回合结束就通知」做法的差异

DSH 里「一个回合结束」不等于「任务做完了」。插件把两类信号合在一起判断:

信号 说明 单独用的问题
session/event 的 turn/end 带结束原因(完成、出错、被取消等) 多回合目标下每回合都通知太吵
agent/status 的 idle 没有驱动在跑 不知道是怎么结束的

做法:回合结束时只记录结果;等 agent 进入 idle,再经过 settleDelayMs 确认没有立刻继续,才发通知。挂了 goal 时,中间回合一律安静,只在目标完成或阻塞时通知一次;例外是 agent 停下来等人(提问、阻塞、报错)——此时值得打断你。

调度放在 turn/end 上(定义结果的事件),idle 与 running 用于过滤与取消待发通知,避免宿主「先报 idle、后提交 turn end」时通知永远排不上的情况。

核心功能

  • Windows 原生通知,不依赖 BurntToast 等第三方模块;由系统自带的 powershell.exe(Windows PowerShell 5.1)弹出。
  • 通知内容可包含会话标题、结束原因对应的状态,以及可配置的回复摘要(includeSummary、summaryLimit)。
  • notifyOn 支持 every-turn(挂目标时仍只在整目标结束或需关注时通知)、attention(仅 agent 停下来等人)、never。
  • onlyMainSessions 默认不通知子代理会话。
  • sound 可按结果选提示音,或静音,或指定 WinRT 提示音名。

安装与启用

在终端执行(将 <你的 profile> 换成实际 profile 名):

dsh plugin --profile <你的 profile> add dsh-notify-toast

也可以在 DSH Settings → 插件市场里搜索 dsh-notify 一键安装。

安装后在 Settings → 插件 中改配置,或写入 profile 的 cordis.patch.yml,例如:

- id: dsh-notify
  name: 'dsh-notify-toast'
  config:
    notifyOn: every-turn
    onlyMainSessions: true
    settleDelayMs: 400
    includeSummary: true
    includeCwd: false
    summaryLimit: 220
    sound: kind

配置项说明

项 默认 说明
enabled true 总开关
notifyOn every-turn 通知策略(见上文)
onlyMainSessions true 不通知 subagent 会话
settleDelayMs 400 进入空闲后再等的毫秒数,用于合并连续回合
includeSummary true 是否带标题与回复摘要
includeCwd false 是否附带工作目录
summaryLimit 220 正文最大字符数
sound kind kind / silent 或具体 WinRT 提示音名
appId 空 可选 AppUserModelID;留空时按 DSH_APP_USER_MODEL_ID 等回退
debug false 决策过程写入宿主日志,排查「该弹没弹」时打开

环境要求

  • Windows(WinRT toast)。
  • Node:^22.19.0 || >=24.0.0(与 package.json 的 engines 一致)。
  • 通知不出现时,常见原因是专注助手(Focus Assist)、勿扰模式或系统通知被关闭;日志里会有 dsh-notify: 前缀的记录。

典型用法与排查

  1. 安装并启用后,正常在 DSH 里跑任务;窗口可最小化,待 agent 真正空闲且满足 notifyOn 规则时会收到一条 toast。
  2. 若完全没有通知,README 建议先确认插件是否进入加载器树(例如在 list_plugins 中查看 include:dsh-notify 的 fiberPhase 是否为 active),再查 cordis.patch.yml 缩进与 config 结构,最后开 debug: true 看日志。
  3. 从源码本地装进宿主时,需同时处理 dsh.profile.bundles 与 dependencies;仓库提供 set-bundle-state.mjs 与 register-local-plugin.mjs,且要求在完全退出 DSH 后执行——运行中的宿主会回写配置。

适用场景与注意

适合在 Windows 桌面上使用 DSH、且希望长任务或 goal 跑完后用系统通知提醒自己回来的开发者。

插件在当前 DSH 进程权限下运行,安装前请自行查看 仓库源码 与 MIT 许可证。非 Windows 平台不会弹通知;不要把社区目录当成官方应用商店,包名以市场为准:dsh-notify-toast。

结尾

dsh-notify 用 turn/end 与 idle 的组合,把「吵人的每回合通知」和「漏报的真正完成」拆开处理,在 Windows 上提供可配置的 DSH 任务完成提醒。

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

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

小夜