DSH Plugins Marketplace

DSH Plugins

Plugins

/

dsh-taskbar-alert

d

dsh-taskbar-alert

Manifest valid

Flash the DeepSeek Harness taskbar button on Windows when an approval, a question or a plan review is waiting, or when a turn finishes.

hasBundlePatch

dsh-taskbar-alert · 任务栏闪烁提醒

English: README.en.md

当模型需要你操作、或一轮回复完成时,让 DeepSeek Harness 的窗口和它在 Windows 任务栏上的按钮闪动——切到别的软件、把 DSH 最小化、或者被别的窗口盖住时,都不会错过需要你决定的那一刻。

触发时机说明
🔔 权限审批工具调用需要你批准,审批卡片正在等你
🔔 方案确认 / 提问计划审阅(plan review)或 ask_user_question 正在等你回答
✅ 一轮回复完成主对话的一轮回复跑完

效果

  • 调用 Windows 原生 FlashWindowEx,同时闪动任务栏按钮和窗口边框;
  • 窗口在后台:FLASHW_ALL | FLASHW_TIMERNOFG,一直闪到你把它切回前台(也可以设置自动停止秒数);
  • 窗口已经在前台:FLASHW_ALL 固定闪 3 下。Windows 的 TIMERNOFG 语义是"窗口激活就不闪",那样盯着屏幕等审批时反而毫无反馈,所以前台改成短促的三下。

工作原理

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

  • approval/request — 审批请求;
  • user-questions/request — 提问 / 方案确认;
  • agent/status — 主会话(root agent)从 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 生效):

字段默认含义
approvaltrue审批请求时闪动
questiontrue提问 / 方案确认时闪动
completetrue一轮回复完成时闪动
flashSeconds0闪动多少秒后自动停;0 = 一直闪到窗口被激活
warmuptrue后台预热 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),辅助进程起不来。

License

MIT

Comments

Loading…