前言¶
用 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
典型用法与自检¶
- 让模型发问:在 DSH 里触发
ask_user_question等,应出现「有待回答」类 Toast。 - 有
logFile时:查看最近记录,出现"kind":"question"且"shown":true表示插件已处理并尝试展示。 - 与 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 插件页。