dsh-tab-status-light:在浏览器标签页图标上显示 AI 会话状态

前言

在 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

几点行为需要记住:

  1. 未选中会话、会话尚未跑完过任意一轮,或仅切换到早就结束的历史会话时,保持原始鲸鱼 favicon,不会把历史重播成绿/红。
  2. 绿、红是「刚发生」的通知:SETTLE_MS 默认 10 000 ms 控制绿色停留;SETTLE_MS_RED 默认 20 000 ms 控制红色停留;新一轮结束会再次点亮对应颜色。
  3. 中断后的红灯会占满 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 中的机制摘要如下,便于理解边界而非重复造轮子:

  1. 读取 ctx.sessions.list(主视图会话)与 ctx.uiSession.sessionStatus,并订阅该会话 event source 上的最新 turn/end 原因。
  2. fetch() 站点自带的 favicon.svg / favicon-dark.svg,在 </svg> 前插入 <circle>,将 <link rel="icon"> 的 href 换成 data URL;卸载时恢复原 href。鲸鱼图案不拷贝进插件,上游换 logo 会跟随。
  3. 闪烁由小型 Web Worker 驱动,标签在后台时仍可闪(不支持 Worker 时退回页面定时器);两帧预计算为 data URL,避免每 tick 再读文件导致节奏不齐。

适用场景与注意

适合谁:长时间用 DSH Web UI 跑智能体、习惯多标签并行,又希望用余光判断「该不该切回去」的开发者。

局限(来自 README):

  1. 只反映主视图会话,后台会话不会显示在图标上。
  2. Chrome Memory Saver / 节电导致标签页冻结时,页面 JavaScript 会停,任何 Web API 都无法维持闪烁;可在 chrome://settings/performance 中将该站点加入「始终保持这些网站活动」。navigator.wakeLock 不能解决隐藏标签问题。
  3. 标签解冻或从后台回到前台时会立刻重同步并重绘,看到的图标应对应当前状态。
  4. 通过 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
羽毛球分组比赛记分
小程序二维码

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

小夜