dsh-desktop-notifier:Harness Web 失焦时的桌面任务提醒

前言

在 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

装完后建议按顺序做三件事:

  1. 重启 dsh web——dsh.profile.bundles 只在 boot 时读取一次,装到已运行实例里不会被感知;
  2. 浏览器硬刷新(Ctrl+Shift+R);
  3. 在 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
羽毛球分组比赛记分
小程序二维码

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

Xiaoye