dsh-windows-notify:在 Windows 上把 DSH 会话事件做成可点击跳回的原生 Toast

前言

在 DeepSeek Harness(DSH)里跑长任务、等审批或结构化提问时,你往往不会一直盯着界面。系统通知能提醒你「该回来了」,但若点击后只能打开应用、却切不到对应会话,提醒的价值会大打折扣。桌面版 DSH 的 dsh:// 深链主要用来聚焦窗口,本身不携带会话参数;不少通知方案在浏览器场景下也会遇到类似限制。

下面介绍社区插件 dsh-windows-notify(维护者 yschdxm),它在 Windows 上用原生 Toast 覆盖常见会话事件,并实现「点击通知 → 聚焦 Harness → 跳到那条会话」的闭环。插件归类为客户端,当前 npm 包版本为 2.0.1,在 GitHub 仓库 yschdxm/dsh-windows-notify 开源(MIT)。

这是什么

dsh-windows-notify 是标准 DSH bundle:Host 半边监听会话与账号事件并触发 Windows Toast,Client 半边在 Web GUI 内轮询待跳转请求并调用 openSession。实现上依赖 Windows 自带的 PowerShell 5.1 与 WinRT,README 写明无 npm 运行时依赖、无第三方二进制。

一句话:Windows 原生通知 + 点击跳回对应会话(桌面 App 或浏览器中的 Web GUI 均支持)。

点击通知后如何定位到会话

README 用流程说明插件自建的跳转链路,避免「只聚焦、不切会话」:

Toast 点击
  └─ Windows 协议 dshfocus://focus?u=<focus-url>
       ├─ launcher.ps1  GET  <-  host /plugins/dsh-windows-notify/focus?session=<id>&t=<token>
       │                       (记录待跳转请求,5 分钟内有效)
       └─ Start-Process 'dsh://open'  → 聚焦/唤起桌面 App
                                              │
  client.js(页面内)轮询 /pending ◄──────────┘
       └─ ctx.get('uiWorkspace').openSession(sessionId)   ← 真正切到那条会话

行为要点(均来自 README):

  • 桌面 App 已打开:聚焦窗口并切换会话。
  • App 最小化或在托盘:dsh://open 恢复并聚焦,再切换会话。
  • App 未运行:点击会启动 App;待跳转请求保留 5 分钟,页面加载后自动跳转。
  • 纯浏览器打开 Web GUI 时,Client 半边走相对路径 /plugins/...,同样生效。

配置项 openOnClick: false 可关闭点击跳转,仅保留普通通知。

核心功能

通知形态与身份

  • Windows 原生 Toast:PowerShell 5.1 + WinRT。
  • 通知身份:优先使用应用 AUMID com.deepseek.dsh,通知标题显示为「DeepSeek Harness」并带应用图标;AUMID 不可用时回退到 PowerShell 的 AUMID(此时可能显示为 Windows PowerShell,README 在排障一节有说明)。

覆盖的事件

README 列出的触发场景包括:

  • 会话:任务完成、出错、输出上限、主动停止、被打断、被阻断。
  • 交互:审批等待;结构化提问(含计划确认)。
  • 账号:需要登录、登录过期;会话级错误。

降噪与去重

  • 目标续跑静默:goal 自动续跑期间不打扰,仅在目标完成或受阻时提醒。
  • 子代理静音:按 origin === 'subagent' / delegationDepth > 0 过滤;fork 出来的顶层会话仍会通知(默认 notifySubagentTurns: false)。
  • 去重:同会话、同原因 2 秒内只弹一次。

可观测性

  • Toast 仅在 Show() 成功时输出 toast shown;失败写入 %TEMP%\dsh-windows-notify\notify.log 并在控制台告警。
  • 启动时自检 toast.ps1、launcher.ps1、powershell.exe;可通过 GET http://127.0.0.1:<port>/plugins/dsh-windows-notify/health(仅 loopback)查看通道状态。

可选配置:静音(silent)、正文长度(maxBodyChars,默认 260)、调试日志(debug)等,见下文配置节。

安装与启用

插件通过 DSH 的 dsh plugin add 安装;README 给出三种方式,其中 npm 为推荐路径:

# 方式零(推荐):从 npm 官方源安装
dsh plugin --profile <profile> add @yschdxm/dsh-windows-notify

# 方式一:Plugin Manager(GUI)→ 安装 bundle → 选择仓库目录
# 方式二:命令行从 GitHub 安装
dsh plugin --profile <profile> add github:yschdxm/dsh-windows-notify

本地 link 开发需自行 clone 仓库后执行 dsh plugin --profile <profile> add link:<本地路径>(README 示例路径为 link:F:/dev/dsh-windows-notify)。

安装后建议重启一次 Harness(桌面版可选「重启应用与 Host」,或退出后重新打开);Client 半边在页面下次加载时生效。

环境与兼容性(README):

  • 测试环境:DeepSeek Harness Desktop 0.2.1-rc.2,Windows 11 26100,Node 24。
  • package.json 要求 Node >=20,DSH >=0.2.1-rc.1 <0.3.0。
  • 支持 Windows 10/11 自带的 Windows PowerShell 5.1。

插件以当前 DSH 进程权限运行;安装前可在 GitHub 查看源码与 MIT 许可证,自行评估是否纳入你的 profile。

配置

在 profile 的 cordis.patch.yml(或任意后置补丁层)中按 row id 覆盖;省略字段则使用默认值:

- id: dsh-windows-notify
  config:
    appId: com.deepseek.dsh   # Toast 归属的 AppUserModelID
    silent: false             # true = 静音
    notifyTurnEnd: true
    notifySubagentTurns: false
    notifyErrors: true
    notifyApproval: true
    notifyQuestions: true
    notifySignIn: true
    openOnClick: true         # false = 关闭点击跳转(只弹普通通知)
    protocol: dshfocus        # 点击使用的自定义协议
    maxBodyChars: 260
    log: true                 # 写 %TEMP%\dsh-windows-notify\notify.log
    debug: false              # 记录每条会话事件与通知成功日志

典型用法无需额外命令:装好 bundle、重启 Harness 后,在后台跑会话即可在对应事件收到 Toast;需要少打扰时可设 silent: true,或按需关闭某一类 notify* 开关。

诊断与排障

文件/入口 用途
%TEMP%\dsh-windows-notify\notify.log 启动自检、通道状态、通知失败、focus 请求/消费记录(JSON 行)
%TEMP%\dsh-windows-notify\launcher.log 点击后的协议解析、host 请求、聚焦方式(app/browser)
GET http://127.0.0.1:<port>/plugins/dsh-windows-notify/health 通道状态、端口、待跳转数量(仅 loopback)

README 常见问题摘要:

  1. 没有弹窗:Windows 设置 → 系统 → 通知,确认「DeepSeek Harness」允许通知且未开专注助手;查看 notify.log 中的 toast-failed。
  2. 点击没反应:检查 HKCU\Software\Classes\dshfocus 是否指向本插件的 launcher.ps1;查看 launcher.log。
  3. 只聚焦、不切会话:确认 Client 半边已加载(重启 Harness),并检查 notify.log 是否有 focus-consumed。
  4. 通知显示成 Windows PowerShell:回退分支被触发,检查 com.deepseek.dsh 的应用快捷方式是否存在。

卸载时除在 plugin_manager 移除 bundle 外,可按 README 清理协议注册:

Remove-Item 'HKCU:\Software\Classes\dshfocus' -Recurse -Force

适用场景与注意

适合在 Windows 10/11 上使用 DSH 桌面版或浏览器 Web GUI、且希望会话结束、审批、提问、登录态变化等事件以系统 Toast 提醒,并能一键回到对应会话的开发者。

需注意:

  • 仅 Windows 平台;依赖本机 PowerShell 5.1 与 Harness Host 提供的插件 HTTP 路由。
  • 自定义协议 dshfocus 会写入当前用户注册表(HKCU),卸载时应按文档清理。
  • DSH 生态强调「一切皆插件」;社区目录 SkillHub 插件页 为独立站点,与 DeepSeek / 幻方无官方从属关系。

结尾

若你已经在 Windows 上长期挂 DSH 任务,dsh-windows-notify 把「提醒」和「回到正确会话」绑在同一条点击路径上,并提供了较完整的配置与日志入口。进一步了解可访问 SkillHub 目录页 与 GitHub 仓库。

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

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

Xiaoye