dsh-remind:DSH 任务完成与待办时用 Windows 原生通知提醒你

前言

用 DSH 跑 agent 时,一轮会话结束并不会主动打断你;切到别的窗口后,只能靠偶尔切回来瞄一眼。更麻烦的是审批和 ask_user_question:DSH 在等你点批准或填答案,前台却可能是浏览器或别的应用,容易干等。社区插件 dsh-remind(维护者 JHyugou)把「这一轮真的做完了」「需要你批准」「需要你回答」三类情况,转成带提示音的 Windows 原生 Toast,并且默认只在前台不是 DSH 时才弹,减少正在看界面时的打扰。

下面介绍它做什么、怎么装、怎么配,以及排查时可以用到的接口。

这是什么

dsh-remind 是 DeepSeek Harness 的客户端类 cordis 插件:跑在 DSH 桌面宿主(@deepseek-ai/dsh-desktop-host)所在的 Node 进程里,订阅会话状态、审批审计和工具调用,在条件满足时调用 PowerShell 脚本弹出 WinRT Toast。它不依赖 Electron 的 Notification API——宿主与 Electron 壳分离,插件侧也没有现成的 OS 级通知接口,因此走 Windows 自带的 PowerShell 5.1 + Toast 能力。

插件当前版本为 0.2.0(见仓库 package.json),许可证 MIT,零 npm 依赖。目录页:SkillHub - dsh-remind;源码:github.com/JHyugou/dsh-remind。

核心功能

三类提醒

类型 触发大致条件 通知形态(默认文案)
任务完成 顶层会话 agent 从 running 回到 idle;可选在后台 job 全部落地时再提醒 标题 DSH · 任务完成,正文含会话标题、工作区、用时
审批 订阅 approval/asked / approval/decided,确认窗口内仍待你决定 标题 DSH · 需要批准,正文含工具名、会话等
提问 工具名为 ask_user_question 的 tool/call;多题时通知里显示第一条与数量 标题 DSH · 需要你的回答,正文含问题原文与会话

三类通知均可配置提示音(如 default、reminder、alarm、none 等);默认任务完成用 default,审批与提问用更醒目的 reminder。

只在「没在看 DSH」时提醒

插件通过 Win32 GetForegroundWindow 读取当前前台窗口的标题与进程名,与配置项 focusMarkers(默认包含 DeepSeek Harness)做子串匹配。命中则视为正在看 DSH,任务完成类提醒默认不弹;审批与提问可通过 attentionOnlyWhenUnfocused 单独控制是否同样遵守前台判定。设计动机是:GUI 可能在 Electron 窗口里,也可能在浏览器打开 http://127.0.0.1:19387,页面 <title> 一致时,用标题匹配可以同时覆盖两种形态。

防误报与「真的在等你」

任务完成侧有四层过滤:只认顶层会话(排除子代理结束误报)、静默期复查(默认 700ms,期间若有排队 turn/step、运行中的 job、会话活动等则放弃)、同会话冷却(默认 5s)、弹窗前宽限期(默认 1500ms,刚切回 DSH 则不打扰)。

审批侧:approval/asked 会对每一次审批追加记录,包括策略为 never 或自动审批器立即决定的情况,因此不是一见 asked 就弹,而是先等待 attentionSettleMs(默认 800ms),期间收到同 id 的 approval/decided 则取消。

提问侧:同样在 800ms 确认窗口内,若同 callId 已有 tool/result(已回答或工具已返回)则取消。子代理里的审批/提问会沿 session.header.parentSession 上溯到顶层会话标题展示。

通知为 Windows 原生 Toast,可进操作中心;可选 openOnClick 点击后用默认浏览器打开带令牌的 DSH 地址。

安装与启用

本机需已安装 DSH 且 desktop profile 已生效。安装命令来自项目 README(需使用你本机克隆或解压后的仓库目录,不要用臆造的 github:owner/repo 一行命令替代):

dsh plugin --profile desktop add <克隆下来的仓库目录>

这一步会把包以 link: 形式写入 %USERPROFILE%\.dsh\profiles\desktop\package.json 的 dependencies,并把 dsh-remind 追加到 dsh.profile.bundles;cordis.patch.yml 负责挂进 profile 组合树。

卸载:

dsh plugin --profile desktop remove dsh-remind

或在 DSH GUI 的 Plugins 页移除。

注意:改插件 src/ 源码后需要重启 DSH 才加载新代码(ESM 模块缓存);只改 config.json 或通过 API 热改配置则不必为此重启。

配置

配置文件路径:

%USERPROFILE%\.dsh\plugins\dsh-remind\config.json

修改文件后需重启 DSH 生效;也可通过 /api/dsh-remind.setConfig 热改部分字段。常用项包括:

  • enabled:总开关,默认 true
  • onlyWhenUnfocused / focusMarkers / graceMs:前台判定与任务完成宽限期
  • settleMs、cooldownMs、notifyOnJob、minRunMs:任务完成判定与冷却
  • notifyOnApproval、notifyOnQuestion、attentionSettleMs、attentionGraceMs、attentionOnlyWhenUnfocused:审批与提问
  • sound、attentionSound:提示音
  • title、bodyTemplate、approvalTitle、questionTitle 等模板字段
  • debug:为 true 时写入 events.jsonl 便于排查

完整字段表与默认值见 GitHub README 配置一节。

典型用法与自检

立刻测一条通知

在 DSH 页面(浏览器或桌面窗口)按 F12 打开控制台,执行任务完成样式的测试:

fetch('/api/dsh-remind.test', { method: 'POST', headers: { 'content-type': 'application/json' }, body: '{}' })
  .then(r => r.json()).then(console.log)

审批或提问样式(带 reminder 提示音)可传 kind:

fetch('/api/dsh-remind.test', { method: 'POST', headers: { 'content-type': 'application/json' },
  body: JSON.stringify({ kind: 'approval' }) }).then(r => r.json()).then(console.log)
fetch('/api/dsh-remind.test', { method: 'POST', headers: { 'content-type': 'application/json' },
  body: JSON.stringify({ kind: 'question', sound: 'alarm' }) }).then(r => r.json()).then(console.log)

查看前台判定与最近记录

fetch('/api/dsh-remind.status', { method: 'POST', headers: { 'content-type': 'application/json' }, body: '{}' })
  .then(r => r.json()).then(x => console.log(x.result))

返回中的 foreground 表示当前是否算作在看 DSH;recent 与 attention.recent 分别对应任务完成与审批/提问的判定结果(如 notified、focused、queued-work 等)。

热改配置示例

fetch('/api/dsh-remind.setConfig', { method: 'POST', headers: { 'content-type': 'application/json' },
  body: JSON.stringify({ onlyWhenUnfocused: false, debug: true }) }).then(r => r.json()).then(console.log)

仓库还提供 node --test 单测,以及设置 DSH_REMIND_E2E=1 后的真实 Windows 通知端到端测试;契约检查可运行 node tools/doctor.mjs(见 README)。

适用场景与注意

适合谁:主要在 Windows 上使用 DSH desktop profile,经常把 DSH 放在后台跑长任务,或需要在外部应用里工作时仍能收到「跑完了 / 要批 / 要问」提醒的开发者。

环境与权限:插件与当前 DSH 宿主进程同权限运行,会执行本机 PowerShell 脚本发系统通知。安装前请自行阅读仓库源码与 MIT 许可证,确认符合你的安全与合规要求。本插件面向 Windows Toast;非 Windows 环境不在 README 描述范围内。

生态说明:DSH 社区插件目录(如 SkillHub)由社区维护,与 DeepSeek / 幻方无官方从属关系;安装方式以各插件 README 为准。

结尾

dsh-remind 用 Windows 原生通知和可配置提示音,补上 DSH 在后台跑 agent 时「结束」与「待你处理」的可见性,并通过前台窗口判定和多层静默逻辑控制误报。若你需要这类提醒,可从目录页了解条目信息,并按 README 用 desktop profile 安装本地仓库目录。

  • 目录页:https://www.skillhub.cn/plugins/JHyugou/dsh-remind
  • GitHub:https://github.com/JHyugou/dsh-remind
羽毛球分组比赛记分
小程序二维码

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

Xiaoye