dsh-desktop-notify:DSH 桌面端 Windows 系统通知

前言

用 DeepSeek Harness 桌面端跑长任务时,窗口最小化或缩到托盘后,会话完成、卡在审批或报错往往要你自己切回去看。浏览器 profile 里可以用 dsh-sysnotify 做系统通知;桌面端(Electron,~/.dsh/profiles/desktop)若仍依赖渲染器里的 Web Notification,在 Windows 上还可能被静默丢弃。下面介绍社区插件 dsh-desktop-notify(维护者 wxy123-ctrl,MIT),它在 desktop profile 里监听会话事件,用与 web 版验证过的同类通道弹出原生气泡,并支持点击回到对应会话。

这是什么

dsh-desktop-notify 是 DSH 客户端类插件(非官方)。当前版本 1.4.0(以仓库 package.json 为准)。一句话:在桌面端当会话完成工作、阻塞等待批准、阻塞等待回答、plan 模式计划待审批、出错或定时提醒到期时弹出 Windows 系统通知;点击通知会聚焦 DSH 桌面窗口并切换到触发通知的会话(含从最小化、托盘隐藏恢复)。

插件只在 dsh-app: 桌面环境生效:client.js 带桌面守卫,非桌面 profile 全程 no-op,与 web profile 的 dsh-sysnotify 互不干扰。

核心功能

六类通知场景

宿主半边监听会话与相关事件,文案与防抖(同类事件 2.5 秒)与 sysnotify 对齐,标题与正文如下(资料原文):

场景 标题 正文要点
完成工作 ✅ <会话标题> 最近一条用户指令 + 耗时
等待批准 ⏸️ <会话标题>:等待批准 操作、原因、正在执行的任务
等待回答 ❓ <会话标题>:等待回答 问题原文
计划待审批 📋 <会话标题>:计划待审批 计划首标题、任务、批准/完善提示
出错 ⚠️ <会话标题>:出错 错误信息
定时提醒到期(v1.3.0) ⏰ <会话标题>:定时提醒 schedule 注入会话时的到期内容

通知在 Windows 通知中心归组为 Windows PowerShell(桌面端未设置 AUMID,无法归组到 DSH 应用名——README 说明了原因与后续 delivery: renderer 预留)。

投递与点击链路(默认 powershell)

v1.1.0 起默认不用渲染器 new Notification(),改为 spawn PowerShell 执行 toast-notify.ps1(NotifyIcon 气泡)。点击后脚本 POST 到 notify-click,宿主入队 click 事件,渲染器长轮询收到后调用 uiWorkspace.openSession(sessionId),并按进程名 DeepSeek Harness 聚焦 Electron 窗口。

审批类通知在 v1.2.0 起同时使用会话事件 approval/asked 与 waterfall approval/request(prepend: true)两条路径,避免排在 GUI 审批应答者之后导致观察者永不执行的问题。

子代理默认静音(v1.3.0)

子 Agent 会话(存在 parentSession 或 delegationDepth ≥ 1)默认六类通知都不弹,避免一次任务连弹多条完成气泡;主会话默认开启。提权/工具审批的 GUI 弹窗不受影响。若需要子代理也通知,在 profile 补丁里设置 muteSubagents: false。

会话级开关

Composer 输入区「工作区内修改」芯片右侧有闹钟按钮(conversation.input.left 槽位),经 POST /plugins/dsh-desktop-notify/notify-pref 切换该会话全部六类通知静音;偏好写入插件目录 notify-prefs.json({"muted":[sessionId…]},缺席表示开启)。

安装与启用

适用 desktop profile,Node >=18。资料中的启用流程如下(勿使用未在 README 出现的 dsh plugin add github:… 拼接命令)。

  1. 将本插件以 link 或桌面端 Plugins 页绝对路径安装到 desktop profile(与编辑 package.json 等效)。
  2. 编辑 ~/.dsh/profiles/desktop/package.json:在 dependencies 增加 "dsh-desktop-notify": "link:<本仓库绝对路径>",在 dsh.profile.bundles 增加 "dsh-desktop-notify"。
  3. 在 desktop profile 目录执行:
pnpm install --dir <desktop profile>
  1. 重启桌面端(应用菜单 →「重启应用与 Host」)。
  2. 验证:任一会话输入框右侧出现闹钟按钮;触发一次阻塞 → 通知弹出 → 点击 → 窗口置前并切到该会话。

卸载:从 package.json 移除依赖与 bundle 后重新 pnpm install,或在 Plugins 页移除,再重启桌面端。

可选:在 profile 的 cordis.patch.yml 按插件 id 覆盖投递通道(默认 powershell):

- id: desktop-notify
  config:
    delivery: renderer   # 默认 powershell

升级前可在插件仓库目录运行 node selftest.mjs(README 称 129 项断言,无 UI 依赖)。

典型用法

日常无需额外配置:保持 desktop profile 已注册 bundle 并重启后,后台跑会话即可收到气泡。需要安静处理某一对话时,点该会话输入区右侧闹钟设为静音。子代理噪音过多时保持默认静音;若你希望 fork 出来的子会话完成也提醒,在 profile 补丁里设 muteSubagents: false。

排障时按 README「投递链三环」查看同目录 desktop-notify.log:宿主是否 spawn toast、PowerShell 退出码、点击是否出现 notify-click 或退出码兜底;渲染器控制台应能看到 [dsh-desktop-notify] 长轮询与 click 事件。

适用场景与注意

适合:主要在 Windows 上使用 DSH 桌面端,希望离开窗口时仍收到完成/审批/提问/plan/错误/定时提醒,并一键跳回会话的开发者。

注意:

  • 插件以当前 DSH 宿主进程权限运行;安装前请阅读 GitHub 仓库 源码与 MIT 许可证,自行评估信任边界。
  • 应用完全退出时宿主停止,不会有通知;关闭 GUI 仍要通知的场景请用 web profile 的 dsh-sysnotify。
  • 会话须落在安装了本插件的同一棵 cordis 宿主树上;其他工作区的会话点击通知无法 openSession(与 sysnotify 同限)。
  • 误装进浏览器 profile 时客户端 no-op,气泡可能仍由宿主弹出但点击无法定位桌面窗口。
  • 社区目录 SkillHub 插件页 与 GitHub 为独立生态入口,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-desktop-notify 把 desktop profile 里关键会话状态接到 Windows 原生气泡,并补上点击回会话与按会话/子代理静音,弥补桌面端 Web Notification 在 Windows 上的投递缺口。目录与源码:

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

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

Xiaoye