dsh-notification:在 Windows 上用系统 Toast 感知 DSH 会话状态

前言

用 DeepSeek Harness(DSH)跑长任务时,窗口最小化、切到别的应用,或托盘里挂着桌面端,很容易错过模型提问、工具审批和回合结束。浏览器里的 Notification API 还要单独授权,且和「桌面 profile」不是同一条路径。下面介绍维护者 drydeuterium 的 dsh-notification(npm 包名 dsh-desktop-notify):在 Windows 上通过系统 Toast,把「有待回答」「待审批」「回合完成」「错误与中断」推到通知中心,主机侧插件、零 npm 依赖,不往会话里加工具、不改模型可见的提示词。

这是什么

  • 仓库: drydeuterium/dsh-notification(社区目录:SkillHub 条目)
  • 分类:客户端(主机 bundle,非浏览器客户端包)
  • 许可:MIT(package.json 版本 0.2.0)
  • 验证环境(README 记载):DSH 0.2.1-rc.2、Windows 11、--profile desktop

插件只订阅 session/event,在主机进程里用 PowerShell 调用 WinRT ToastNotificationManager 发 ToastGeneric;非 win32 平台会打警告日志且不发送通知。

会触发哪些通知

触发 通知含义(概要)
工具 ask_user_question / exit_plan_mode(可配置 questionTools) 有待回答问题:会话名 + 问题文
approval/asked 待审批:工具名与原因
turn/end 且 completed 应答完成:会话名 + 应答预览
错误 / 中断 / 阻塞 / token 上限等 对应警告类 Toast:原因与错误信息

默认 rootsOnly: true:子代理(session.header.origin === 'subagent')会话不通知。Toast 应用标识为 DeepSeekHarness.DesktopNotify,通知上显示「DeepSeek Harness」与插件图标。点击 Toast 不会打开会话(仅展示;若要点击跳转需另做浏览器侧实现)。

安装与生效

在 desktop profile 下用官方命令安装(无需手改 package.json,dsh plugin 会处理 dsh.bundle.patch 与 dsh.profile.bundles):

dsh plugin --profile desktop add github:drydeuterium/dsh-notification

说明:包在注册表里叫 dsh-desktop-notify,与仓库名 dsh-notification 不同,是为避免与 npm 上同名包冲突。

生效方式:配置在应用启动时加载;运行中若要热更新,可先卸再装(README 称通常无需重启主机进程,若不生效再重启 DSH):

dsh plugin --profile desktop remove dsh-desktop-notify
dsh plugin --profile desktop add github:drydeuterium/dsh-notification

若配置了 logFile,启动日志里出现 kind: "startup" 且时间更新,表示该主机上的插件已加载,例如:

{"ts":"...","kind":"startup","pid":7376,"shown":false,"config":{"enabled":true,"language":"ja",
 "onQuestion":true,"onApproval":true,"onTurnEnd":true,"onError":true,"onAborted":true,
 "onBlocked":true,"rootsOnly":true,"sound":true,"longDuration":true}}

卸载:

dsh plugin --profile desktop remove dsh-desktop-notify

若要一并删除 Toast 应用注册:

reg delete HKCU\Software\Classes\AppUserModelId\DeepSeekHarness.DesktopNotify /f

配置

在 bundle 的 cordis.patch.yml 里,id 为 desktop-notify 的 config 可改;profile 侧覆盖时,在 ~/.dsh/profiles/<profile>/cordis.patch.yml 写相同 id 的行(匹配行会整段替换 config,缺省键会回到默认值,改一项时要写全需要的键)。

键 默认 含义
enabled true 总开关
language ja ja / en
onQuestion / onApproval / onTurnEnd / onError / onAborted / onBlocked true 分类型开关
questionTools ['ask_user_question', 'exit_plan_mode'] 视为「待回答」的工具名
rootsOnly true 排除子代理会话
preview / bodyChars true / 180 完成通知预览与正文最大长度
sound / longDuration true / true 通知音 / 约 25 秒展示
minIntervalMs 500 相同内容连发抑制间隔
logFile null JSON Lines 调试日志路径

示例:只保留提问与审批,关闭回合完成通知(注意会重置未写出的其它 config 键为默认):

- id: desktop-notify
  name: dsh-desktop-notify
  config:
    onTurnEnd: false

典型用法与自检

  1. 让模型发问:在 DSH 里触发 ask_user_question 等,应出现「有待回答」类 Toast。
  2. 有 logFile 时:查看最近记录,出现 "kind":"question" 且 "shown":true 表示插件已处理并尝试展示。
  3. 与 OS 通知栈对齐:README 提供 tools/toast-check.ps1、tools/wpn-history.py,可在不经过 DSH 的情况下确认 Toast 通道,并用 %LOCALAPPDATA%\Microsoft\Windows\Notifications\wpndatabase.db 核对是否登记;集中模式(QUIET_TIME)会导致横幅不出现但历史里可能有记录。

与其它主机通知插件(如 README 提到的 dsh-pet)同时启用时,完成类通知可能重复,可将本插件 onTurnEnd: false 或关闭对方同类通知。

适用场景与注意

适合:在 Windows 上使用 DSH 桌面 profile,希望离开前台仍能收到提问、审批和回合结果,且不想依赖浏览器通知权限的用户。

务必知晓:

  • 仅 Windows;Linux / macOS 不会发 Toast。
  • 插件在 当前 DSH 主机进程权限 下运行,安装前请自行审阅 源码与 MIT 许可。
  • 通知展示受系统「专注助手」、应用通知开关等策略约束;子进程不得以 detached: true 方式拉起 PowerShell(会导致 Show() 看似成功却未写入 OS,详见仓库 docs/detached-spawn.md)。
  • 社区目录 SkillHub 与 GitHub 为独立生态入口,与 DeepSeek / 幻方无官方从属关系;星标与收录信息以各站点当时页面为准。

结尾

dsh-notification 用一条 session/event 订阅把 DSH 会话里的关键节点映射到 Windows Toast,依赖为零、不改会话语义,适合桌面长跑场景。详情与排障步骤见 GitHub README,安装入口见 SkillHub 插件页。

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

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

Xiaoye