前言¶
在 DeepSeek Harness Desktop 里跑 Agent 时,turn 可能跑很久,也可能停在工具核准或 ask_user_question 上等你点选。窗口被其他应用盖住时,很难判断是还在执行、在等你,还是上一轮已经失败。常见做法是频繁把 DSH 拉到前台看界面,或盯着会话列表猜状态。
下面介绍社区插件 dsh-taskbar-status(维护者 Joker2377,分类:客户端)。它在 Windows 10/11 上把 DSH 桌面应用的工作列按钮变成进度条指示:执行中为灰色不定进度条,等待人工为琥珀色满条并闪烁,失败后为全红并保持,直到你按规则清除。插件是纯 host 端外挂,不修改 main.js,也不改 app.asar。
这是什么¶
dsh-taskbar-status 订阅 @deepseek-ai/dsh-session 在事件总线上发布的 session/event,把 turn、核准、提问与结束原因换算成四种工作列状态,再通过 koffi 调用 Win32 的 ITaskbarList3(SetProgressState / SetProgressValue,必要时 FlashWindowEx)画到 DSH 窗口对应的工作列按钮上。
非 Windows 平台会直接停用,不会加载原生 FFI。DeepSeek Harness Desktop 版本需满足 >=0.1.1-rc.2 <0.3.0(与 package.json 中 engines.dsh 一致)。当前插件版本为 0.6.0,许可证 MIT。
核心功能¶
四种状态¶
| 状态 | 工作列效果 | 进入条件 | 离开条件 |
|---|---|---|---|
| 执行中 | 灰色不定进度条(TBPF_INDETERMINATE) |
turn/start |
该 session 的 turn 全部结束 |
| 等待人工 | 琥珀色满条(TBPF_PAUSED)+工作列闪烁 |
approval/asked,或 ask_user_question 的 tool/call |
核准有结果、提问有回答,或 turn 结束 |
| 出错 | 全红(TBPF_ERROR) |
turn/end 且 reason.kind === 'error' |
下一轮开始、或窗口离开前景后再回来 |
| 闲置 | 清除(TBPF_NOPROGRESS) |
没有 turn、没有等待、没有未读错误 | — |
工具核准与 ask_user_question 提问都算「等你」,都会亮琥珀色;每出现一个新的阻塞,工作列按钮各闪一次。
多 session 与失败语义¶
同时跑多个 session 时,所有 session 共用同一个工作列按钮,显示优先级为:等待人工 > 执行中 > 出错 > 闲置。计数以 session id + turn 以及各自的 approval / question id 为 key,重复事件不会重复计数。
红灯是「闩锁」式的未读通知,不会自己消失;只有 reason.kind === 'error' 会变红,aborted、interrupted、blocked 按正常结束处理。所有 Win32 调用为 best-effort,失败只写 warn 日志,不影响 Agent 本身。
安装与启用¶
安装方式在 README 中写为:在 DSH 侧边栏打开 Plugins,粘贴仓库首页 URL 后按 Install。DSH 会用该链接执行 pnpm add,把 repo 拉进 profile,无需 git clone,也无需手改 profile。
- 复制仓库地址(须为 git 仓库首页,不要带
/tree/main这类路径):
https://github.com/Joker2377/dsh-taskbar-status
- 在 Plugins 安装栏粘贴并按 Install。
- 若安装时列出待核准的构建脚本
koffi,核准后重试一次;原生文件也可随@koromix/koffi-win32-x64附带,不跑脚本也可能能加载。 - 重新加载 App(重开窗口或重启),工作列开始反映状态。
若要锁定某一版,可在 URL 后接 commit:https://github.com/Joker2377/dsh-taskbar-status#<commit>。
解除安装:在 Plugins 页移除该 bundle 后重新加载;停用瞬间插件会清掉进度条并释放 COM 对象。
装前建议自行查看 GitHub 仓库 源码与 MIT 许可证。插件在 DSH host 进程权限下运行,会加载 koffi 与 Win32 FFI。
典型用法与行为说明¶
如何消掉红灯¶
- 开始下一轮 — 最直接的确认。
- 离开 DSH 窗口再回来 — 插件每秒比对前景窗口的拥有者 pid;出错时若你一直盯着 DSH 窗口,不会立刻清掉。
- 重载插件。
若你平时用浏览器看 Web GUI,DSH 桌面窗口可能永远拿不到前景,则只有第 1、3 条有效。可用 node scripts/probe.mjs --focus 查看当前前景窗属于哪个进程(需 Node.js >=22.19,仅跑脚本时需要)。
安装前试效果¶
取得源码后可在不走 DSH 插件系统的情况下验证 FFI:
node scripts/probe.mjs
脚本会找到窗口并依序演示灰 → 黄+闪烁 → 红 → 清除。另有 --detect、--compare、--focus 等参数,见 README「开发」一节。
执行中为什么是灰色¶
Windows 11 上 TBPF_INDETERMINATE 即为灰色跑动条,颜色不可由插件指定;带固定语义颜色的主要是 TBPF_PAUSED(黄)与 TBPF_ERROR(红)。这是系统设计,不是配置项遗漏。
适用场景与注意¶
适合:在 Windows 上长期使用 DSH Desktop,多任务时希望从工作列判断 Agent 是否在跑、是否在等你、是否上一轮失败,而不必一直把窗口置顶。
注意:
- 只处理一个 DSH 窗口;多开桌面实例时,作用在优先找到的那一个。
- 仅追踪直接的
ask_user_question的tool/call;经tool/ptc-dispatch间接调用不会亮琥珀色(该路径本身不阻塞)。 explorer.exe重启或远程桌面重连后,工作列可能被重建;下一次状态变更时会比对Shell_TrayWndhandle 并重画,中间没有心跳,灯不会主动恢复。- 窗口缩到系统匣且工作列按钮不可见时,需还原窗口后下一次更新才会重新套用。
疑难排解表(找不到窗口、一闪就消失、红灯不消等)见仓库 README。
结尾¶
dsh-taskbar-status 把 DSH session 事件映射到 Windows 工作列进度条,用灰、琥珀、红三种可见信号覆盖「执行中 / 等你 / 失败未读」三种常见痛点,适合把 DSH 放在后台的 Windows 用户。
- 社区目录页:https://www.skillhub.cn/plugins/Joker2377/dsh-taskbar-status
- 源码与完整说明:https://github.com/Joker2377/dsh-taskbar-status
SkillHub 为社区插件目录,与 DeepSeek / 幻方无官方从属关系;安装与使用以仓库 README 为准。