Windows 上审批、提问或方案确认在等你、或一轮回复完成时,让 DeepSeek Harness 的任务栏按钮闪动。
安装
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:yxiaoy6/dsh-taskbar-alert
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
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 生效):
| 字段 | 默认 | 含义 |
|---|---|---|
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),辅助进程起不来。
License
MIT
链接
同类插件
xmanrui/dsh-im★ 2328
通过二维码或机器人凭据将 IM 机器人接入 DeepSeek Harness(支持飞书、微信、钉钉、企业微信、QQ、Slack、Telegram、Discord 和 WhatsApp 共 9 种渠道)。
shaobeichen/dsh-pocket★ 2244
手机远程访问 DSH Web 界面:扫码即用局域网或公网(cloudflared 隧道)访问,实时同屏、移动端适配布局,带设置页管理。
OpenPetsHQ/openpets#dsh★ 1320
将 DeepSeek Harness 的生命周期状态、错误与审批请求,桥接到本地运行的 OpenPets 桌面伙伴。
inclusionAI/Avernet#deepseek-harness-channel-bcn★ 590
通过 WebSocket V2 将 DeepSeek Harness 接入 Avernet Bot 协作网络,支持自动注册、Agent 会话隔离、工具调用事件和多 Bot 路由工具。
c1overzz/dsh-bili-scroll★ 423
让你的 DSH 自己刷 B站 —— 读字幕原文挑内容、写日报,遇到值得看的会发评论 @ 你。
omdsh-dev/dsh-notification★ 89
回合完成桌面通知,按结果分控 + 关键词过滤。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。