前言¶
在 DeepSeek Harness(DSH)Web UI 里跑智能体时,常见情况是主界面占着一个标签页,人却切去查文档、回消息或看别的网页。此时要判断「这一轮还在跑」「已经结束」「在等你点批准」还是「被中断了」,只能再切回 DSH 看一眼对话区或状态栏。dsh-tab-status-light 把会话状态画在浏览器标签页的 favicon 上:灰色闪烁表示进行中,绿色表示刚完成,黄色表示等你交互,红色表示中断,不用切换标签也能扫一眼。
下面介绍插件的定位、状态规则、安装方式与实现要点,并说明适用边界。
这是什么¶
dsh-tab-status-light 是面向 DSH Web UI 的纯客户端插件(分类:客户端),由维护者 kyle2241345145351324321 发布,源码与文档在 GitHub 仓库 kyle2241345145351324321/dsh-tab-status-light。社区目录页:SkillHub 插件页。
它不占用 DSH 的 slot,只读取当前主视图会话的运行与交互状态,并重绘标签页图标。当前 package 版本为 1.2.0,采用 MIT 许可证。
核心功能:四种状态与判定依据¶
插件在官方 README 中约定四种图标状态,颜色与动画如下。
| 状态 | 颜色 | 动画 | 判定依据 |
|---|---|---|---|
| 进行中 | 灰 #9ca3af |
每 600 ms 切换:纯鲸鱼 ↔ 鲸鱼 + 灰点(暗半帧无圆点) | SessionStatus.running === true |
| 完成 | 绿 #22c55e |
亮 10 秒后回到纯鲸鱼 | 在本页看到过该轮在跑,且最后一个 turn/end 原因不是中断类 |
| 等你回答 | 黄 #eab308 |
常亮直到你回复 | SessionStatus.pendingInteraction !== undefined(提问 / 核准 / 计划审查等) |
| 中断 | 红 #ef4444 |
亮 20 秒后回到纯鲸鱼 | 在本页看到过该轮在跑,且最后一个 turn/end 为 aborted / blocked / error / interrupted |
几点行为需要记住:
- 未选中会话、会话尚未跑完过任意一轮,或仅切换到早就结束的历史会话时,保持原始鲸鱼 favicon,不会把历史重播成绿/红。
- 绿、红是「刚发生」的通知:
SETTLE_MS默认 10 000 ms 控制绿色停留;SETTLE_MS_RED默认 20 000 ms 控制红色停留;新一轮结束会再次点亮对应颜色。 - 中断后的红灯会占满 20 秒窗口,即使其间又有回合完成,也不会被绿色盖掉,避免取消被静默当成成功。
资源占用方面,README 写明:闪烁时约每秒 2 ms JavaScript(约单核 0.2%);空闲时无定时器、无重复扫描。
安装与启用¶
插件以 DSH bundle(dsh.bundle.patch)形式分发。任选一种方式安装后,用 Cmd+R / Ctrl+R 刷新页面。
在 harness 里通过 plugin_manager:
plugin_manager({ action: "install_bundle", target: "dsh-tab-status-light" })
CLI(Web profile):
dsh plugin --profile web add dsh-tab-status-light
# 也可以直接从 GitHub 安装(不走 npm)
dsh plugin --profile web add github:kyle2241345145351324321/dsh-tab-status-light
本地开发时指向 checkout 目录,改文件后刷新即可:
plugin_manager({ action: "install_bundle", target: "/path/to/dsh-tab-status-light" })
依赖说明:需要 harness 的 Web profile,且具备 @deepseek-ai/dsh-client-ui-session 与 @deepseek-ai/dsh-api-session-controller(标准安装一般已包含)。
典型用法¶
安装并刷新后无需额外配置即可工作:保持 DSH 在一个标签页打开,切到其他标签时观察 favicon 即可。
若需微调闪烁周期、停留时间或中断判定,编辑仓库根目录 client.js 文件头部的常量(开发模式下可 install_bundle 指向本地路径后改代码再刷新):
| 常量 | 默认值 | 含义 |
|---|---|---|
BADGE |
{cx:37, cy:37, radius:11, ring:4} |
圆点位置、半径、描边环宽度 |
BADGE_COLOR |
灰 / 绿 / 黄 / 红 | 各状态颜色 |
BLINK_MS |
600 |
进行中闪烁周期 |
SETTLE_MS |
10000 |
绿色停留时长 |
SETTLE_MS_RED |
20000 |
红色停留时长 |
RED_TURN_END_KINDS |
aborted blocked error interrupted |
计为中断的 turn/end 原因 |
实现要点(便于判断是否信任行为)¶
README 中的机制摘要如下,便于理解边界而非重复造轮子:
- 读取
ctx.sessions.list(主视图会话)与ctx.uiSession.sessionStatus,并订阅该会话 event source 上的最新turn/end原因。 fetch()站点自带的favicon.svg/favicon-dark.svg,在</svg>前插入<circle>,将<link rel="icon">的href换成 data URL;卸载时恢复原href。鲸鱼图案不拷贝进插件,上游换 logo 会跟随。- 闪烁由小型 Web Worker 驱动,标签在后台时仍可闪(不支持 Worker 时退回页面定时器);两帧预计算为 data URL,避免每 tick 再读文件导致节奏不齐。
适用场景与注意¶
适合谁:长时间用 DSH Web UI 跑智能体、习惯多标签并行,又希望用余光判断「该不该切回去」的开发者。
局限(来自 README):
- 只反映主视图会话,后台会话不会显示在图标上。
- Chrome Memory Saver / 节电导致标签页冻结时,页面 JavaScript 会停,任何 Web API 都无法维持闪烁;可在
chrome://settings/performance中将该站点加入「始终保持这些网站活动」。navigator.wakeLock不能解决隐藏标签问题。 - 标签解冻或从后台回到前台时会立刻重同步并重绘,看到的图标应对应当前状态。
- 通过 SVG data URL 换 favicon;极旧、不支持 SVG favicon 的浏览器可能无变化。
安全与许可:插件在当前 DSH 进程、当前浏览器页面的客户端上下文中运行,逻辑以仓库源码为准;安装前建议浏览 client.js 与 LICENSE(MIT)。DSH 生态奉行「一切皆插件」;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无法定从属关系,本文不等同于官方应用商店说明。
结尾¶
dsh-tab-status-light 把 harness 会话状态映射到标签页 favicon:进行中灰闪、完成绿、待交互黄、中断红,并刻意避免用历史回合误导当前状态。需要安装命令、调参表与行为细节时,以仓库 README 为准。
- 目录页:https://www.skillhub.cn/plugins/kyle2241345145351324321/dsh-tab-status-light
- GitHub:https://github.com/kyle2241345145351324321/dsh-tab-status-light