前言¶
在 DeepSeek Harness(DSH)里跑长任务时,你往往会切到编辑器、文档或别的标签页。任务跑完或卡在审批、计划确认、提问上时,如果仍盯着别的窗口,很容易错过 Harness 页面上的状态变化。本插件 dsh-desktop-notifier(维护者 lurejewel)在浏览器侧用系统通知栏(Windows 上即操作中心)补这一环:页面不在前台或失焦时,把「任务完成」和「需要你操作」推到你当前正在用的环境里,点击通知可切回对应会话。
这是什么¶
dsh-desktop-notifier 是面向 DSH Web 表面的客户端插件,功能全部跑在浏览器里,通过 Notification API 投递提醒。它不新增宿主路由、不写会话日志、不改 agent 循环;状态来自客户端 runtime 已有的会话列表与 UI 会话状态。
DeepSeek Harness 版本需 >= 0.1.7-rc.2(插件 0.2.0 已按 Session Controller 拆分后的客户端契约适配)。Node.js 需 >= 20。浏览器以 Chrome / Edge 为主(通知授权依赖用户手势;Safari 未在资料中验证)。
核心功能¶
何时会提醒¶
| 时机 | 是否提醒 | 说明 |
|---|---|---|
| 任意会话任务完成 | 是 | 含你正在看的会话,只要 Harness 窗口/标签已切走 |
| 会话运行时长低于阈值(默认 1 分钟) | 否 | 避免极短任务频繁弹窗 |
| 会话开始等待你操作 | 是 | 审批、计划确认、提问等;不受时长阈值限制 |
| 子代理(subagent)会话完成 | 否 | 默认跳过;父会话完成时会提醒;可用 includeSubagents 打开 |
| 页面在前台(可见且持有焦点) | 否 | 人就在看页面时不打扰 |
| 页面可见但焦点在别的程序(含双屏) | 是 | 由 document.hasFocus() 判定 |
| 另一个 DSH 标签页在前台 | 否 | 经 BroadcastChannel 跨标签抑制重复提醒 |
通知标题取自会话标题;正文示例为「✅ 任务完成 · 用时 3 分 12 秒」或「⏳ 等待你审批」。同一会话的同类通知使用相同 tag,会替换而非无限堆叠。
与 Harness 版本的对应关系¶
| 插件版本 | 需要的 DSH | 说明 |
|---|---|---|
0.2.0 |
>= 0.1.7-rc.2 |
适配 Session Controller 拆分后的契约 |
0.1.0 |
0.1.0 – 0.1.5-rc.x |
在 0.1.7-rc.2 上部分失效:完成提醒仍可用,「等待审批/提问」与点击通知切回会话可能不工作;应升级到 0.2.0 |
0.1.7-rc.2 起,边沿判定读 uiSession.sessionStatus;点击通知经 uiWorkspace.openSession(sessionId) 切回会话。
安装与启用¶
官方安装命令如下(包声明了 dsh.bundle patch,dsh plugin 会自动挂进 profile 配置层,无需手写挂载行):
dsh plugin --profile web add dsh-desktop-notifier
装完后建议按顺序做三件事:
- 重启
dsh web——dsh.profile.bundles只在 boot 时读取一次,装到已运行实例里不会被感知; - 浏览器硬刷新(
Ctrl+Shift+R); - 在 Harness 页面任意点击一次:Chrome/Edge 只允许在用户手势里申请通知权限,这是资料中写明的唯一授权入口。
快速自检¶
在 DevTools 控制台执行:
__dshNotifyTest__() // 直接弹一条测试通知,绕过「失焦才提醒」规则
若返回 false 且控制台提示权限未授权,说明第 3 步尚未完成。
安装状态自检¶
node scripts/verify-install.mjs <port> <token>
# 例:dsh web: http://127.0.0.1:3080/?token=XXXX -> node scripts/verify-install.mjs 3080 XXXX
脚本检查 web boot graph 中是否有本插件行、对应客户端 bundle 是否返回 200。npm 安装用户可在 ~/.dsh/profiles/web/node_modules/dsh-desktop-notifier 下执行。Web 表面含 /plugins 在进程令牌栅栏之后,裸 curl 拿不到结果。
从源码 link: 安装、以及从 link 切换到 npm 正式版时的清理步骤见 GitHub README;Windows 本地可用仓库内 scripts/install-local.ps1,profile 用户 patch 层热应用时可不重启 dsh web,硬刷新即可。
典型用法:localStorage 配置¶
不改源码时,可在浏览器 localStorage 写入键 dsh-desktop-notifier:config 的 JSON 对象,覆盖 lib/client.js 中 DEFAULTS:
localStorage.setItem('dsh-desktop-notifier:config', JSON.stringify({
thresholdMs: 60000, // 只有运行超过该毫秒数的任务才在完成时提醒
includeSubagents: false, // true = 子代理会话完成也提醒
pendingInteraction: true, // 等待审批/提问时提醒
silent: false, // true = 通知不出声
debug: true // true = 控制台打印 [dsh-desktop-notifier] 判定日志
}))
字段类型错误或 JSON 无效时会整段回退内置默认值;改完需刷新页面。
开发者在仓库根目录可用 node test/client.test.mjs 跑客户端逻辑测试(Node 内桩全局变量执行真实 lib/client.js)。
适用场景与注意¶
适合谁: 经常在 DSH Web 里挂长任务、又需要切到其他应用或标签的开发者;希望在 Windows 操作中心(或浏览器对应的系统通知)里收到完成与阻塞类事件提醒的用户。
权限与安全: 插件随 DSH Web 在浏览器中运行,通知能力受浏览器与 OS 策略约束。安装前可在 GitHub 仓库 查看源码与 MIT 许可证,确认符合你的环境要求。
已知限制(资料原文):
- 需要浏览器进程在运行;标签页关闭后不会有提醒(宿主侧任务仍可继续;原生 toast 需宿主侧方案,本插件仅做浏览器通知)。
- 插件加载时已在运行的任务,耗时从页面加载时刻起算(会话日志无「本轮开始时刻」),可能少算,不会因此误报长任务。
- Windows 操作中心里显示的是 Chrome/Edge 的应用身份,不是独立 DSH 应用。
DSH 生态强调「一切皆插件」;社区目录 skillhub.cn 为独立站点,与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-desktop-notifier 用最小侵入的方式补上了「人不在 Harness 页面上」时的可见反馈:完成与等待你操作两类边沿、焦点与跨标签抑制、可配置的阈值与子代理策略,都写在客户端 bundle 里。若你已在 >= 0.1.7-rc.2 的 Web profile 上使用 DSH,可按上文命令安装并做一次 __dshNotifyTest__() 与失焦场景验证。
- 目录页:https://www.skillhub.cn/plugins/lurejewel/dsh-desktop-notifier
- GitHub:https://github.com/lurejewel/dsh-desktop-notifier