任务栏闪烁提醒:DSH 插件

前言

DeepSeek Harness 在 Windows 上运行时,审批、方案确认或一轮回复完成时,窗口可能会被其它应用盖住或被最小化。这时错过提示,就需要手动切回 DSH。任务栏闪烁提醒插件通过 Windows 原生 API,在需要你操作或一轮回复完成时,让窗口和任务栏按钮同步闪动,减少视觉遗漏。

插件简介

任务栏闪烁提醒是 DeepSeek Harness 的一个客户端插件,由维护者 yxiaoy6 开发。它监听 DSH 的审批、提问和会话完成事件,通过 PowerShell 辅助进程调用 Win32 的 FlashWindowEx,对 DeepSeek Harness 的窗口和任务栏按钮进行闪烁提醒。安装后,在设置页会出现对应的配置项。

核心功能

  • 触发时机:审批请求、提问/方案确认、一轮回复完成时触发。
  • 闪动效果:同时闪动任务栏按钮和窗口边框。
  • 后台行为:窗口在后台时,一直闪到窗口被切回前台(可设置自动停止秒数)。
  • 前台行为:窗口已在前台时,固定闪 3 下。

工作原理

Host 半侧(index.js)监听三个 Host 事件,不依赖页面:

  • approval/request — 审批请求。
  • user-questions/request — 提问 / 方案确认。
  • agent/status — 主会话从 running 变 idle,即一轮完成。

审批 / 提问必须用 { prepend: true } 注册。这两个是 cordis 的 waterfall 事件:监听器按注册顺序”最外层优先”执行,任何一个监听器不调用 next() 就直接终止整条链。DSH 的 session 控制器在启动时就注册了 approval/request 监听,把审批转发给页面并等用户点击、从不调用 next()。插件是后挂的 bundle,普通注册永远排在它后面、一次都不会被调用。prepend: true 把观察者放到最外层,提醒完再 next() 把决定权交还。

真正闪动由一个常驻的 PowerShell 辅助进程完成:它启动时用 Add-Type 编译一次 user32.dll 的互操作代码,之后通过 stdin 接收 flash / stop / quit 三种命令。辅助进程按窗口标题里的 DeepSeek Harness 查找可见的顶层窗口(包括被任务栏隐藏前的正常窗口),因此窗口重建、多开窗口也能命中。

辅助进程默认在插件启动 2.5 秒后预热,让第一次提醒即时生效;也可以关掉预热,改由第一次提醒时按需启动(会有约 1~2 秒的编译延迟)。

设置

插件声明了自己的 Config(@deepseek-ai/schemastery),因此 设置 → 插件 → 任务栏闪烁提醒 会出现以下字段(安装后刷新一次页面或重启 DSH 生效):

字段 默认 含义
approval true 审批请求时闪动
question true 提问 / 方案确认时闪动
complete true 一轮回复完成时闪动
flashSeconds 0 闪动多少秒后自动停;0 = 一直闪到窗口被激活
warmup true 后台预热 PowerShell 辅助进程,让第一次提醒不延迟

也可以在 profile 的 cordis.patch.yml 里直接改这一行的 config。

限制

  • 仅 Windows:闪动走 Win32 API;其它平台插件会静默不激活提醒。
  • 只闪动,不改变图标颜色:把任务栏图标本身改成红色/加红色角标需要应用主进程调用 BrowserWindow.setOverlayIcon,而 DSH Desktop 的 Electron 壳没有向插件暴露该能力(壳自带的 flashFrame 只用于它自己的更新提醒)。因此本插件实现的是”闪动”这一半。
  • 目标是 DSH Desktop 窗口:只有在 DSH Desktop(Electron 窗口标题里带 DeepSeek Harness)里运行时才有窗口可闪。浏览器标签页里的 DSH 不会闪动——那种场景请用浏览器通知类插件(例如 dsh-notify-me)。
  • 每次提醒会拉起/复用一个隐藏的 powershell.exe(约 30–60 MB 常驻)。介意常驻内存可以把 warmup 设为 false,辅助进程仍会在第一次提醒时按需启动并在退出时回收。
  • 通知/闪动只是提醒,不改变审批策略:它不会替你批准任何操作。

安装与启用

插件包本身是一个 DSH bundle,在 profile 里安装并挂载后即生效:

plugin_manager install_bundle <本目录>

安装后 plugin_manager 会把它插入 cordis.patch.yml,插件立即激活;刷新一次页面后即可在设置页看到条目。

开发自检

在非沙箱终端中运行:

node --check index.js
node probe.mjs

probe.mjs 用一个还原了 cordis 派发规则的假 context 加载插件本体:它先注册一个”永不调用 next()“的审批应答者(模拟真实 session 控制器),再加载插件,然后分发一次 approval/request、一次 user-questions/request 和一次 agent/status。输出应同时出现:

[probe] approval outcome: allowed-once | bridge claims: 1
[probe] question outcome: {"answers":[]} | bridge claims: 1
[dsh-taskbar-alert] OK flash 1
[dsh-taskbar-alert] OK flash 1
[dsh-taskbar-alert] OK flash 1
[dsh-taskbar-alert] OK stop 1

bridge claims: 1 说明裁决仍然由应答者做出(插件没有抢走审批),三次 OK flash 1 说明三个触发都走到了 FlashWindowEx、且都命中了 1 个 harness 窗口。

probe.mjs 需要在非沙箱终端里跑:沙箱禁止子进程管道(spawn EPERM),辅助进程起不来。

适用场景与注意

  • 适合在 Windows 上使用 DSH Desktop 的用户,希望减少因窗口被遮挡而错过提示的情况。
  • 插件以当前 DSH 进程的权限运行,安装前应检查源码与许可证(MIT)。
  • 如果介意常驻内存,可以将 warmup 设为 false。

结尾

任务栏闪烁提醒通过 Windows 原生 API,在需要你操作或一轮回复完成时提醒你,减少视觉遗漏。插件目录页与代码仓库见下方链接。

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

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

小夜