dsh-multi-provider-usage: Aggregate quotas from three providers into the DSH sidebar

前言

DSH 的插件生态里,接海外模型和国内大模型基本各占一半,很多人同时挂着 OpenCode GO、Command Code 和 GLM Code Plan 三套账号。想确认还剩多少额度,得分别开控制台、看不同的页面,5 小时滚动窗口、周窗口、月窗口各自的口径也不一样,什么时候回满更是要自己算。已有的做法是装多个插件各盯一家,侧边栏被挤成三块还得分别展开。

下面介绍的 dsh-multi-provider-usage 把这些查到一个侧边栏组件里:一个组件,三行卡片,各自的额度条、时间条和充值余额并排摆。

这是什么

这是一个为 DeepSeek Harness(DSH)写的用量查询插件。仓库由 wjw1-Evan 维护,MIT 许可证,当前版本 0.8.4。它的做法是在宿主进程里定时向各家接口取数,通过同源代理 /provider-usage/* 暴露给浏览器侧边栏组件,API 密钥不进入浏览器。

它的参考实现是 @astervolans/dsh-opencode-go-usage,保留了同样的双半包结构(host + client)、同源代理、同一个侧边栏槽位和同一个 Plugins 面板配置页,只是把支持的提供商从一家扩到三家。

有一处容易踩:npm 包名和仓库名不一致。dsh-provider-usage 这个未加 scope 的名字在 npm 上已被另一个插件占用,所以发布名改成 dsh-multi-provider-usage;HTTP 路由(/provider-usage/*)和聊天命令(/provider-usage)保持简短不变。下面安装时用的命令都是包名,不是仓库名。

核心功能

三个提供商,一列排开

启用的提供商纵向堆叠,每个卡片头部带健康点、主百分比和充值余额。点头部可以折叠该提供商的窗口、额度条和时间条,折叠状态记在本地,任意子集可以保持折叠。

各家取数的窗口如下:

  • OpenCode GO — 5 小时窗口、周窗口、月窗口。接口把 5 小时字段叫做 rolling。优先走正在运行的 dsh-opencode-go 插件的当前账户,通过它的 opencodeGoUsage host 服务取数;取不到再退回官方 GET /v1/usage。
  • Command Code — 月度 credit 池、5 小时窗口、周窗口,来源是官方计费与用量接口(/alpha/billing/*、/alpha/usage/summary)。
  • GLM Code Plan — 国际版与中国版都支持,提供 5 小时 token 窗口、周 token 窗口、月 MCP 工具上限。国际版从 api.z.ai 取,中国版从 open.bigmodel.cn 取,路径都是 /api/monitor/usage/quota/limit。区域设为 auto 时会同时探测两方,卡片上用 International / China 角标标出实际应答的一方;配置里可以钉死某一方或填自定义 endpoint。两个都不应答时,错误信息会分别说明两个区域的探测结果,而不是只报最后一次。

充值余额

OpenCode GO 显示 OpenCode Zen 预付余额,Command Code 显示已购 + 赠送的「Extra Credits」余额,两者都同时出现在侧边栏卡片和 /provider-usage 文本里。

OpenCode 的 console token 是自动发现的,来源依次是 OPENCODE_CONSOLE_TOKEN 环境变量、OpenCode CLI 的 auth 文件、本地 opencode.db;token 不会离开宿主。发现不到时,余额位不会静默消失,而是变成可点的 Set up 标签,点开插件配置页,OpenCode GO 卡片内会渲染一份分步配置指引。

余额的变化是带动画的:正常轮询间隔到达后,如果余额和上次不同,数字会从旧值滚动到新值,同时有一枚红绿 delta 小标签(例如 -0.1)浮起淡出。没有弹窗,也不跟踪对话轮次,所以动画最多会比实际变化晚一个轮询间隔。

余额低于阈值时有颜色提示:等于或低于 5 显示琥珀色,等于或低于 1 显示红色。阈值按货币单位计,美元和人民币方案都适用,侧边栏和配置页的 live usage 区块同步生效。

时间条与超限状态

每个额度条下方有一条时间条,灰色是已流逝时间,蓝色是剩余时间。窗口右侧显示距离重置的倒计时。已经耗尽的窗口不会隐藏倒计时,而是在百分比后加一个小标签,同时悬浮提示里带绝对重置时刻。

失败隔离与重试

一个提供商出错不会盖住另外两个。路由只要有一个提供商取数成功就返回 200,全部失败才返回 502。个别接口失败时保留该提供商已有的数字,健康点转成琥珀色,悬浮提示里点名失败的调用。

错误行本身可点(也能用键盘触发),点一下强制做一次新的上游读取。

自更新

开机时以及按配置的间隔,宿主会同时检查 npm registry、npmmirror 镜像和 GitHub release feed,以三者中最新的版本为准。本地 link:/file: 检出在位于 main、工作区干净且是严格快进时会被快进;npm / market / tarball 安装的副本则自行更新:从第一个能提供 tarball 的来源下载(依次是 registry → mirror → GitHub),每个文件先写临时文件再重命名覆盖,避免在 pnpm 硬链接 store 上原地改写。

两种情况下,正在运行的 Host 都保留旧模块图,所以组件和配置页会显示「updated — restart DSH」。插件不会自己重启 DSH。

配置页

侧边栏 Plugins 面板里本 bundle 的卡片是配置入口:开关每个提供商、编辑 credential 引用与 endpoint、选 GLM 区域、看网络检测状态,保存立即生效。

x-opencode-session 修复:运行时把真实的按会话 harness session id 注入 OpenCode GO 的聊天请求,不改动 DSH 本体。

界面语言走 DSH 的 locale 服务,支持中英文。

插件通过声明 dsh.bundle.patch 让 CLI 自动并入 profile 的 bundle 层栈;widget 和 client bundle 属于 profile 的 client-modules 图,因此装完需要重启一次 DSH——运行中的 host 不会为刚 link 的包重建 window.__DSH_BOOT__ manifest。

安装与启用

从 npm 装,desktop profile:

dsh plugin --profile desktop add dsh-multi-provider-usage

web profile 则用:

dsh plugin --profile web add dsh-multi-provider-usage

开发时从本地检出装:

dsh plugin --profile desktop add /path/to/dsh-provider-usage

装完重启一次 DSH。若本地 link: 依赖让 pnpm 报 peer-dependency 警告(@deepseek-ai/schemastery、@deepseek-ai/dsh),属于预期:linked 检出在开发态从自己的 node_modules 解析 schemastery,正式 npm 安装则由 DSH 运行时提供 peer。

package.json 里声明了 engines.node >= 18,peer 依赖是 @deepseek-ai/dsh >= 0.1.7-rc.1 与 @deepseek-ai/schemastery ^3.18.4;在写本文时(2026-11-07),npm 上最新发布的是 0.8.4。

配置凭据

所有取值都走 DSH 的 credentials 域解析(进程环境变量、$DSH_HOME/.credentials.yaml、.env 三层),设置路由不会回传,也不会进浏览器。例如 OpenCode GO 的默认 ref 是 OPENCODE_GO_API_KEY;其余提供商的默认 ref 和解析优先级以仓库 README 的 Credentials 表为准。凭据缺失时对应卡片会显示错误行,点该行可重新读取,配置页里编辑 ref 保存后会以 refresh=1 重新读一次,改用的新凭据立刻能看到数字。

配置页的每个提供商卡片内嵌一个 live usage 区块:额度窗口、百分比、到重置的剩余时间、充值余额,与侧边栏渲染的是同一个 canonical snapshot。页面打开期间页面会跟随 widget 更新(标签可见时每 30 秒轮询一次,带 Updated HH:MM 戳);Refresh usage 按钮强制重新读取。GLM 卡片还带一行 referral link(Z.ai 的 Invite Friends, Get Credits),可点可复制;该 URL 是 bundle 常量,不过设置路由,保存配置也覆盖不了它。

典型用法

装完重启后,侧边栏直接出现三行卡片,按正常间隔自行刷新。需要看文本版或把额度贴给别人时,在对话里发:

/provider-usage

会打印所有已启用提供商的数字。

配置入口从两个地方进都可以:widget 头部的 Settings 按钮会跳到侧边栏 Plugins 面板里本 bundle 的配置页;也可以直接在 Plugins 面板点开这个 bundle。在其中编辑 credential ref 或 endpoint,保存即可生效。

适用场景与注意

适合同时使用多家模型开放平台、希望留在 DSH 里就能看到剩余额度和回满时间的人,尤其是不想为每家各装一个插件的。也适合把额度信息当作排查依据的场景:某家被限流时,健康点变琥珀、错误行点名失败调用,其余两家仍然正常显示。

几点注意:

  1. 插件运行在当前 dsh 进程的权限内,读的是该进程能访问的环境变量、凭据文件和网络出口。安装前应自行检查源码和许可证(MIT)再决定是否引入。
  2. 截至 2026-11-07,GitHub 仓库 star 数为 0,发布 npm 包的账号是 fsy_008,仓库 owner 是 wjw1-Evan,两者不是同一个用户名。仓库 README 提到该插件是参考 @astervolans/dsh-opencode-go-usage 的实现扩展而来。
  3. 本插件依赖 dsh-opencode-go 这个插件做 OpenCode GO 的账户发现,但该依赖只是「优先使用」,缺失时会退回官方 GET /v1/usage,两者不同时需要注意。npm 包名和仓库名不同,命令里要用 dsh-multi-provider-usage。
  4. 自更新检查的是 npm 和 GitHub,配置页里可以编辑 endpoint,但官方的取数路径仍是资料里列出的那些;如果平台侧改动接口路径,需要看插件更新。

社区目录是独立站点,与 DeepSeek / 幻方无官方从属关系,不要把 SkillHub 当作官方应用商店。

结尾

这个插件解决的事情不复杂:把分散在三套控制台的额度信息收进 DSH 侧边栏,配上时间条、余额动画、失败隔离和自更新,少装一个插件,少开几个页面。目录页在 https://www.skillhub.cn/plugins/wjw1-Evan/dsh-provider-usage ,源码在 https://github.com/wjw1-Evan/dsh-provider-usage 。

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

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

Xiaoye