dsh-stats-hud: A client-side plugin that turns dsh web's session statistics rows into a gaming-style HUD.

前言

用 DeepSeek Harness(dsh)跑智能体任务时,步数、轮次、吞吐、缓存命中、上下文占用这些数字都挤在 web UI 原有的 stats 行里。信息在,但都是平铺文本,长任务跑到一半想快速回答「现在吞吐多少、上下文还剩多少、缓存效率如何」,得逐个读数。

dsh-stats-hud 解决的就是这个读数问题:它把会话统计渲染成一块固定在页面最右缘的竖排面板,用等级条、速度表和滚动计数器呈现,同时不动原有 stats 行。下面介绍它的功能、安装方式和工作原理。

这是什么

dsh-stats-hud 由 lauytgary 维护,MIT 许可证,分类为客户端(web 端)插件。一句话定位:把 DSH 会话统计行变成游戏风格的等级条、速度表和滚动 token 计数器,竖排显示在 dsh web UI 最右侧。它是纯浏览器侧插件,不改宿主代码,数据全部来自宿主已有的 projections。

面板上的仪表

  • CLOCK 徽章:本地 24h 时间,附 DS API PEAK / OFF PEAK 峰谷标识。峰值为北京时间周一至五 09:00-12:00 / 14:00-18:00,周末恒为 OFF-PEAK。
  • STEPS / TURN 滚动里程表:数字鼓轮样式,挂载时上卷,数值变化时滚动,进位按 9→0 处理。
  • LLM / TOOLS 双条形:两列布局,标签在值上方;条形分段按原始 LLM:TOOLS 时间比例划分,无上限,时间比例直接映射为条形比例。
  • THROUGHPUT 仪表盘:tokens/s 读数居中显示,红线初始 200,按 100 tok/s 步进自动扩展。
  • CONTEXT USAGE 条:按 token 比例分三段——Sys Prompt(灰)/ Tools(蓝)/ Messages(紫);占用 ≥80% 时整条变红;悬停弹出 tooltip,显示三类 token 明细。
  • CACHE HIT 条:<50% 红、<80% 黄、≥80% 绿。
  • CONTEXT 滚动计数器:三行里程表——CACHE HIT(绿)/ CACHE MISSED(橙)/ OUTPUT(粉)。

agent 运行期间,整个面板有呼吸效果,条形随之脉动。

响应式布局

面板按右侧空闲空间分三档,用 ResizeObserver 实时测量:

档位 条件 显示内容
full 窗口 ≥800px 且空闲 ≥180px 全部仪表
mini 窗口 ≥800px 但空闲 <180px 时钟(短 PEAK / OFF PEAK 徽章)+ 紧凑滚动行
hidden 窗口 <800px 不显示(display:none

窗口宽度 <800px 是硬性下限;测量失败时回退到 full。mini 档在窄窗口下可能轻微遮挡聊天列,但面板可点击穿透,不影响操作。

安装与启用

从 GitHub 安装:

dsh plugin --profile web add https://github.com/lauytgary/dsh_hud_plugin

或从本地路径安装:

dsh plugin --profile web add /path/to/dsh-stats-hud

安装后重启 dsh web(loader 条目在启动时扫描),再刷新页面,插件会出现在 Settings → Plugins。依赖要求:DeepSeek Harness dsh(在 0.1.0-rc.6、macOS 上测试过)和 pnpm(用于插件管理)。

注意一个细节:仓库地址是 lauytgary/dsh_hud_plugin,插件名是 dsh-stats-hud,两者不一致,卸载时用插件名:

dsh plugin --profile web remove dsh-stats-hud

工作原理

1、插件注册到 conversation.composer.dock 槽位(id dsh-stats-hud,order 1);面板本身 position: fixed,不占布局空间,原 stats 行保持不变。

2、数据来自宿主既有 projections:sessionStatstokenUsagecontextPressurecontextBreakdown,零宿主侧改动。

3、exports.inject = ["slots"] 是必需项:DSH 的 ctx 是严格代理,访问未声明的服务会直接抛错。

4、整个面板 pointer-events: none,可点击穿透;仅 CONTEXT USAGE 条恢复指针事件,以支持悬停 tooltip。

开发与测试

lib/client.js 是手写的 loader bundle(window.__ModuleLoader__.load),无需构建步骤。插件以 link: 依赖安装,本地编辑 lib/client.js 后只需重启,不用重装。

运行测试:

npm test

测试基于 node:test,零依赖,要求 Node ≥ 18。测试专用的 __test 导出由 DSH_HUD_TEST 环境变量控制,浏览器包不受影响。

如果想发布到 npm:移除 package.json 中的 private 后执行 npm publish,之后用户可用 dsh plugin --profile web add dsh-stats-hud 安装。当前默认未发布到 npm,安装走 GitHub 或本地路径。

适用场景与注意

适合长期盯着 dsh web 跑任务、希望更快读出吞吐、缓存和上下文状态的人。如果你只想偶尔看一眼,原 stats 行仍在,装了插件也不破坏任何原有布局。

两点提醒:mini 档在窄窗口下可能轻微遮挡聊天列(点击穿透所以安全);插件以当前 dsh 进程权限运行,安装任何第三方插件前都应检查源码与许可证,本插件采用 MIT。

结尾

dsh-stats-hud 展示了 DSH「一切皆插件」的一种典型做法:不动宿主一行代码,把已有数据换成更易读的呈现。源码与文档见 GitHub:https://github.com/lauytgary/dsh_hud_plugin;也可在社区目录查看:https://www.skillhub.cn/plugins/lauytgary/dsh_hud_plugin(社区维护的独立站点,与 DeepSeek、幻方无官方从属关系)。

羽毛球分组比赛记分
小程序二维码

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

Xiaoye