Skip to main content
K

dsh-subusage

kouzakiumi/dsh-subusage

显示独立 DeepSeek API Key 与 DSH 本机账号余额(账号入口默认开启)、火山方舟(arkcli 官方 CLI 路由:Agent / Coding Plan 个人版与企业版席位,设置页合并为一组)、Z.ai(中国与国际)、Kimi、MiMo、OpenCode Go、Command Code、SuperGrok、Codex(ChatGPT 订阅,默认关闭)、MiniMax(中国)、Synthetic、NanoGPT、SiliconFlow、OpenRouter、Novita、Hyperbol

Install

dsh plugin --profile web add github:kouzakiumi/dsh-subusage

README

dsh-subusage —— 模型选择器旁的余量药丸,右侧是同一界面的浅色与深色用量弹层(真实组件离线渲染示例)

订阅用量显示

选中的模型还剩多少额度,输入框旁边一眼可见。

dsh-subusage 把已支持的 28 个提供商数据入口的额度与余额装进 DeepSeek Harness 的输入框旁边——不切控制台、不猜百分比、不等报错。

npm version license DSH

安装只需一条命令 → 快速开始


为什么需要它

没有它有了它
额度散落在五六家控制台,查一次余额要开五个标签页药丸常驻输入框旁:选中哪家模型就看哪家,多窗口自动取最差一窗
Agent 跑到一半撞上 429,才知道额度用尽弹层先给结论再给依据:「即将用尽 · 最紧张:每周 · 剩 5% · 3 天后重置」
Cookie、OAuth 悄悄过期,报错才发现MiMo Cookie 提前 2 小时变黄、30 分钟变橙、过期变红;认证失效直说原因与修法
每家插件各管各的凭据,格式五花八门一个设置页集中管理 28 条路由的开关与凭据,缺什么补什么

状态,一眼分清

药丸不写字也能传达状态:每个额度窗口一根彩条(绿 / 黄 / 橙 / 红,满格 = 100% 剩余),需要留意时才追加一个词。下面是已发布基础状态的离线预览(虚构用量数据);0.11.2 新增的续用/预算/能力范围状态见下节:

药丸 15 种状态(浅色,离线预览)
深色主题 药丸 15 种状态(深色,离线预览)

三块能力,一个设置页

能力解决什么问题入口
余量药丸不用切到各家控制台,选中模型就知道这家还剩多少模型选择器左侧,槽位 conversation.input.right
设置页开关与凭据集中管理;缺凭据、Cookie 过期时把修复入口直接送到卡片上设置 → 订阅用量 → 提供商管理
只读额度 API其他插件与 Agent 复用同一份额度数据,不必各自对接各家接口Agent 工具 subusage_quota、Host 服务 subUsage.quota()

套餐药丸以图形为主:每个额度窗口一根彩色余量条(绿 / 黄 / 橙 / 红,满 = 100% 剩余),正常时不写字;需要留意时追加一个词,如 周 偏少、5时 已用尽、需配置、拉取失败。一般成功结果按提供商缓存 60 秒,手动刷新可跳过普通 TTL(仍遵守上游限流退避与 Retry-After);DeepSeek 账号入口每次调用宿主余额链,不复用本插件的旧余额缓存,避免切换账号后显示另一份钱包。

本插件不注册模型路由,药丸按 provider id 匹配;因此使用哪个插件提供该模型路由不影响匹配,id 对不上时才不显示。

28 个提供商数据入口,默认开启 11 个

DeepSeek API、DeepSeek 账号、火山方舟(Agent / Coding Plan 个人版与企业版席位)、Z.ai(中国与国际)、Kimi、小米 MiMo、OpenCode Go、Command Code、SuperGrok、Codex(ChatGPT 订阅)、MiniMax(中国与国际)、Synthetic、NanoGPT、SiliconFlow、OpenRouter、Novita、Hyperbolic、DeepInfra、Chutes、Ollama Cloud、Vercel AI Gateway、ZenMux、LiteLLM——订阅窗口、余额、周期额度池都支持。新安装默认开启 11 条,其余在设置页一键开启;完整清单、额度类型与鉴权方式见下方技术文档。

0.12.0:双 DeepSeek 入口、余额药丸与折叠详情

本次发布包括以下改进;发布包不自动更新你的本机运行环境,也不代替真实账号验收:

  • Command Code 轮换池逐账户行标明具体受限周期,详情默认折叠为「点击查看详情」,展开后限高滚动。
  • 余额药丸分级:药丸直接显示金额与单位,不再一律中性灰。人民币 < 1 元红、1–5 元黄、≥ 5 元灰;美元 < 0.2 红、0.2–1 黄、≥ 1 灰;credits 及其它无统一价值单位只在已解析的非正余额时标红,正余额保持灰色而不按绝对量虚构价值。这些是产品预警阈值,不是汇率换算,也不是「还能跑多少次」的保证。累计花费不套用余额阈值。
  • 新增 deepseek-account(DeepSeek 账号):默认开启,复用 DSH 本机 deepseekAccount 服务的登录态读取充值余额;不读取、导出或保存 OAuth token,也不使用独立 API Key。与 deepseek(DeepSeek API)的开关、缓存和余额完全独立;deepseek-official 这个名字指向账号入口。纯余额型条目(两个 DeepSeek 入口与 SiliconFlow、Novita、Hyperbolic、DeepInfra、Vercel AI Gateway)不要求本机装有对应模型路由。
  • MiMo 无订阅不再画成 0%:只有「用量组为空 / 零容量」配合可读的套餐详情才判未订阅;零容量不生成 0% 用量窗口。套餐读取失败仍标部分数据,余额读取失败仍保留已成功的用量。
  • ZenMux 订阅端点失败保留余额并标部分数据,明确写「套餐状态暂不可确认」,不宣称未订阅。

35 个测试文件、清单与语法检查、深浅主题各 11 个余额场景及 40 账户折叠验收已通过。离线预览使用虚构数据,不代表新账号入口或无订阅响应已经真实在线验收——详见开发说明。

余额药丸与套餐优先:0.12.0 深色离线预览 余额药丸分单位预警、MiMo 无套餐与套餐优先,真实组件离线渲染,使用虚构金额

额度与续用:0.11.2 的关键修正

  • Codex Pro / ProLite / ProMax:合法单周窗口正常展示,不再因没有 5 小时窗而黄警;多工作区查询携带账户身份,企业支出限制与 Credits 单独保留。
  • ZenMux / Novita / LiteLLM:补齐 ZenMux 周窗;Novita 接受官方金额字符串;LiteLLM 的 Key、用户、团队预算分别展示,任何一层都不会被更宽松的预算覆盖。
  • 包含额度耗尽不等于服务停摆:Command Code 有已购余额时显示“按量续用”;NanoGPT 使用接口路由建议,未知余额/策略明确待确认。其他厂商未核验的续用条件不作保证。
  • 轮换与能力范围:自动轮换池尚有健康账户,不因默认账户限额报全池耗尽;AFP 文本周限制不连坐日能力池,共享月额度仍影响各能力。部分能力耗尽只提示范围,不冒充整个套餐不可用。
  • 数据完整性:合法单窗、无上限和纯余额成功不是“不完整”;真实端点读取失败仍可标部分覆盖。金额或窗口未知时不编造百分比。

以上均已通过离线回归;不代表真实企业席位、新旧私有接口或付费资格已经在线验收。详细契约与仍待核验范围见开发说明。

快速开始 · 支持清单 · 实测范围 · 凭据指引 · 更新记录

快速开始

dsh plugin --profile web add dsh-subusage

web 仅为示例 Profile,替换为实际目标;Desktop 应使用目标桌面壳提供的 DSH Desktop CLI,不从普通公共 CLI 管理 desktop。

  1. 安装并启用 bundle,按部署方式重载或重启(只刷新页面不保证 Host 升级)。
  2. 打开 设置 → 订阅用量 → 提供商管理,开启需要的提供商并填凭据——每类凭据的官网入口与填入位置见凭据获取指引;MiMo 用「登录并自动导入」。
  3. 回到会话,选中该提供商的模型:输入区左侧出现药丸,点开看窗口明细。
  4. 排障:点「立即刷新」→ 看设置页顶部 X/Y 家数据获取成功(可点击,直接跳到第一家没读成功的)。

DSH 已登录账号:默认开启的「DeepSeek 账号」直接读取宿主账号余额,不需要复制 OAuth token 或填写 API Key;用 subusage_quota(providers: ["deepseek-account"]) 查询。

独立 API Key:使用「DeepSeek API」(deepseek),与账号入口分别管理,不接 OAuth:

# 任选一种凭据来源
$env:DEEPSEEK_API_KEY = "<你的 DeepSeek API Key>"   # 启动环境;改完需按部署方式重启
# 或在 设置 → 订阅用量 → DeepSeek API →「连接与凭据」里手动填写

启动环境变更需要按部署方式重载;手动保存 Key 后可直接刷新。选中对应模型时药丸显示余额,也可让 Agent 调用 subusage_quota(providers: ["deepseek"]) 查询独立 API 余额。两种余额读取均不要求安装模型路由;不会把两份余额相加或互相替代。

先说清楚:哪些是实测过的

7 家在真实账号上跑通:火山方舟 Agent Plan、火山方舟 Coding Plan、Kimi Coding、小米 MiMo、Command Code、SuperGrok、Codex (ChatGPT)。其余只经过桩测试——响应形态取自公开文档、第三方实现或抓包,没有在真实账号上跑通,可能随接口变化而失效;失效时在设置页关掉那一家即可,其余不受影响。验证范围与主要风险见实测覆盖。额度数字仅供参考,不要当计费依据。


技术文档

安装、配置、排障的完整参考。快速上手看上面就够了。

支持的数据 / Supported data

共 28 条 provider id:新安装默认开启 11 条、默认关闭 17 条(数字与清单取自 lib/index.js 顶部的 PROVIDERS,展示顺序与短名取自 lib/client.js 顶部的 PROVIDER_META / PROVIDER_ORDER)。

提供商provider id额度类型鉴权默认
DeepSeek APIdeepseek余额(账户)Bearer,与推理同一把 Key开
DeepSeek 账号deepseek-account余额(本机账号充值)复用 DSH deepseekAccount 登录态,无独立 Key开
Z.ai(中国)zai-coding-cn订阅窗口Bearer(团队档另加组织 / 项目请求头)开
Kimi Codingkimi-coding订阅窗口Bearer开
Xiaomi MiMoxiaomi-token-plan-cn周期额度池官方平台 Cookie(含登录流程)开
OpenCode Goopencode-go订阅窗口Bearer开
Command Codecommandcode5 小时 / 周 / 月额度池提供方插件的凭据链开
SuperGrokxai-oauth周期池共享 Grok CLI 登录文件,过期经 grok-kit 续约开
Codex (ChatGPT)openai-codexChatGPT 订阅窗口只读 Codex CLI 的 OAuth 登录文件关
MiniMax(中国)minimax-cn短周期 / 周Bearer开
ARK Agent Plan (arkcli)arkcli-agent-plan订阅窗口(AFP)IAM AK/SK 签名开
ARK Coding Plan (arkcli)arkcli-coding-plan订阅窗口IAM AK/SK 签名开
Z.ai(国际)zai-coding订阅窗口裸 authorization,区域凭据独立关
Syntheticsynthetic滚动订阅池Bearer关
NanoGPTnanogpt日 / 周配额 + 余额Bearer(余额端点用 x-api-key)关
MiniMax(国际)minimax短周期 / 周Bearer关
ARK Agent Plan Team (arkcli)arkcli-agent-plan-team席位额度(AFP)IAM AK/SK 签名关
ARK Coding Plan Team (arkcli)arkcli-coding-plan-team席位额度IAM AK/SK 签名关
SiliconFlowsiliconflow余额Bearer,与推理同一把 Key关
OpenRouteropenrouter限额窗口 + 余额推理 Key(余额需 management / provisioning key)关
Novita AInovita余额Bearer关
Hyperbolichyperbolic余额Bearer关
DeepInfradeepinfra余额Bearer关
Chuteschutes通用限额窗口Bearer关
Ollama Cloudollama-cloudsession / 周 / 月裸 Authorization(不加 Bearer)关
Vercel AI Gatewayvercel-ai-gateway余额Bearer关
ZenMuxzenmux5 小时 / 周窗口 + PAYG 余额Management API Key关
LiteLLMlitellmKey / 用户 / 团队预算 + 花费虚拟 Key + 用户自填 proxy 地址关
  • 各家的窗口语义、明细字段与单位换算(例如 ZenMux / Ollama 的 0–1 小数、Novita 的 1/10000 USD、Kimi 随套餐变化的窗口集合)见 提供商清单与额度语义。
  • 评估过但不接入的厂商与理由见 提供商覆盖与取舍(含已由用户决策跳过的 Anthropic)。

非公开控制台接口可能变更;缺失或非法百分比不会被当作零用量;「读取成功」只表示接口读取健康度,不保证仍有额度。

Support status / 实测覆盖

已实测验证

下面这些在真实账号上跑通过(本仓库开发机 + 各家的官方 CLI / 插件):

提供商验证范围凭据来源
火山方舟 Agent Plan(个人版,arkcli-agent-plan)5 小时 / 周 / 月 AFP 绝对值 + 日限额 + 档位本机 IAM AK/SK 直连 GetAFPUsage,HTTP 200
火山方舟 Coding Plan(个人版,arkcli-coding-plan)session / weekly / monthly 三个窗口同一组 AK/SK 直连 GetCodingPlanUsage,HTTP 200
Kimi Coding5 小时 / 周 / 月窗口真实 Key
小米 MiMo余额 + 套餐额度真实平台会话 Cookie(含自动登录)
Command Code月额度提供方插件的凭据链
SuperGrok统一周池 + 加量余额真实 ~/.grok/auth.json
Codex (ChatGPT)主 / 次窗口 + 档位真实 ~/.codex/auth.json(本插件默认关闭)

未验证

其余提供商只经过桩测试——响应形态取自公开文档、第三方实现或抓包,没有在真实账号上跑通过:

Z.ai(中国与国际)、OpenCode Go、MiniMax(中国与国际)、Synthetic、NanoGPT、SiliconFlow、DeepSeek API、DeepSeek 账号、OpenRouter、Novita、Hyperbolic、DeepInfra、Chutes、Ollama Cloud、Vercel AI Gateway、ZenMux、LiteLLM,以及火山方舟的团队版席位。

它们可能可用,也可能因为接口变更、字段差异或权限要求而失败。上表也只是既有账号、当时版本的验证记录,不是持续可用性保证。

如果你用了其中之一,不管成功还是失败,都欢迎开 issue——附上提供商名称、错误文案与 DSH 版本即可(不要贴 Key 或 Cookie)。失败和成功一样有用:失败帮我们修适配,成功帮我们把这一行挪进上表。

主要风险

  • 额度数字仅供参考,不要当计费依据。 部分额度接口未公开或半公开,字段语义可能变化;插件会按已核验单位换算金额与百分比,不猜缺失额度。
  • 未验证的提供商会随接口变化而失效(见上一节)。失效时在设置页关掉那一家的检测即可,其余不受影响;欢迎开 issue 帮我们补上。
  • 凭据以明文落盘:本插件的配置不是加密凭据库;Windows 上真正的访问边界取决于目录 ACL,chmod 不能替代它。
  • 火山方舟是账号级读取:一组 IAM AK/SK 能查到该账号名下所有套餐(Agent Plan、Coding Plan、团队席位)。把装了本插件的机器或配置文件交给别人时请注意这一点。
  • 浏览器自动化:MiMo 的自动登录会启动一个隔离的 Chromium 会话——不点「登录并自动导入」就不会触发。
  • 收录不等于安全审计:无论 DSH STORE 还是 awesome-dsh-plugin,收录只表示满足它们各自的清单规则,都不是对代码的安全审查。

Compatibility / 兼容性

项目值来源
核心 peer 范围@deepseek-ai/dsh 及各核心包均为 >=0.2.0-rc.1 <0.2.1-0 || >=0.2.1-0 <0.3.0-0package.json 的 peerDependencies
Node.js>=22.19.0engines 与 dsh.compatibility.node
已验证的 Core 版本0.2.0-rc.2、0.2.1-alpha.1、0.2.1-alpha.2实机运行;逐版本状态与验证方式见 dsh.compatibility.dshReleases
最后验证日期2026-10-11开发与验证说明

范围里那个 || 分支不是冗余。 node-semver 只有在范围中某个比较符与该版本的 major.minor.patch 元组完全一致、且自身带预发布标签时,才放行预发布版本。所以 >=0.2.0-rc.1 <0.3.0-0 这种看起来覆盖 0.2.x 的写法会静默排除 0.2.1-alpha.1——而它正是当前活跃版本。必须为每个 minor 元组各写一个带预发布标签的分支。

dsh.compatibility.dshReleases 逐版本声明已知状态:只有实际验证过的标 compatible,其余一律 unknown——没有证据不猜。本插件只依赖 Core 的公开扩展 API 面(Cordis 服务 llm/slots/locale/remote/settings/modelDirectories、4 个核心包的公开导出、client 基座的公开模块),不碰内部组件、不依赖桌面壳版本——这是 0.2.x 各版本实际全兼容的原因;dshReleases 记录的是实测证据,不是依赖声明。实际验证范围(在线接口、真实账号、浏览器像素验收等)见 开发与验证说明。这是树外 Host / Client bundle,通过 cordis.patch.yml 插入,不修改 DSH 核心、安装树或 ASAR。

Install / 安装

来源标识说明
npmdsh-subusage已发布版本见 npm
GitHub Release tarballhttps://github.com/KouzakiUmi/dsh-subusage/releases/latest/download/dsh-subusage.tgz资产名固定不带版本号
本地开发目录仓库路径以链接方式使用工作副本
# npm 包名(推荐:预构建,免构建授权)
dsh plugin --profile web add dsh-subusage

# GitHub 固定 Commit(DSH STORE / awesome-dsh-plugin 只接受这种来源)
dsh plugin --profile <profile> add 'git+https://github.com/KouzakiUmi/dsh-subusage.git#<40 位完整 Commit>'

# GitHub Release tarball(资产名不带版本号,所以这个地址不会随发版而失效)
dsh plugin --profile <profile> add https://github.com/KouzakiUmi/dsh-subusage/releases/latest/download/dsh-subusage.tgz

# 本地开发目录(link 工作副本)
dsh plugin --profile <profile> add D:\src\dsh-subusage

升级与卸载:

dsh plugin --profile <profile> update dsh-subusage
dsh plugin --profile <profile> update dsh-subusage@https://github.com/KouzakiUmi/dsh-subusage/releases/latest/download/dsh-subusage.tgz
dsh plugin --profile <profile> remove dsh-subusage
  • <profile> 换成目标 profile;Desktop 请使用随包 DSH CLI 或应用内插件管理页,PATH 上的 npm 全局 dsh 不一定是它。参数与 profile 名以目标部署的 dsh plugin --help 为准;桌面插件页同样接受包名、GitHub 地址或本地目录。
  • 不要用浮动分支(#main)安装:市场与商店只认固定到完整 40 位 Commit 的来源,浮动分支无法核实你装到的到底是哪份代码。
  • 安装只把包放进 profile,不等于已启用;按部署方式重载或重启,让 Host 与 Client 一起生效(只刷新页面不保证 Host 升级)。
  • 只取压缩包:npm pack dsh-subusage;核对发布结果:npm view dsh-subusage version dist-tags。
  • 本包没有 preinstall / install / postinstall / prepare 脚本,安装期不执行任何代码;也不需要 pnpm 的 allowBuilds 授权。

前置:这几家需要提供方插件

绝大多数提供商只要一把 API Key 就能用。但下面几家要先装提供方插件——它们负责注册模型路由、完成登录并持有凭据;本插件只读取同一份凭据,不代为登录、也不保存它们。

提供商前置提供方插件凭据从哪来
Command Code@mars-sea/dsh-commandcode-provider在该插件的设置页登录,或运行 cmd login(兜底读 ~/.commandcode/auth.json)
SuperGrokdsh-grok-kit运行 grok login,登录文件 ~/.grok/auth.json
Codex(ChatGPT 订阅)dsh-codex-connect(npm 同名包)运行 codex login,登录文件 $CODEX_HOME/auth.json 或 ~/.codex/auth.json

Codex 默认关闭:它的提供方插件本身就带一个用量药丸,两个并排只是重复信息。想要本插件这一份(比如想把 Codex 和别家放在一起看)可以在提供商管理里手动开启。

这几家的凭据不在本插件的设置页里:请用上表的登录方式。缺登录时本插件的卡片会直接给出对应的登录命令。

Configuration / 配置

  • 设置页路径:设置 → 订阅用量 → 提供商管理。「没有检测到API的默认隐藏」默认开启;首次没有可见条目时管理区自动展开。关闭的提供商仍可配置凭据,只是不会发起用量请求。
  • 凭据从哪来:每一类凭据的官网入口、环境变量名与界面填入位置都写在凭据获取指引——包括火山的 IAM AK/SK(子用户还要挂 ArkReadOnlyAccess 且不限制到项目)、MiMo 的平台会话 Cookie、以及各家 API Key 的对照表。注意推理 Key 与额度凭据不通用。
  • 默认开关策略:新安装默认开启 11 条、默认关闭 17 条(Codex 默认关闭——它的提供方插件自带用量药丸);开关即时保存,升级保留已保存的开关,不重算默认值。默认隐藏只影响显示,不会自动开启被关闭的提供商。
  • 火山方舟是一组:4 条路由共用同一组 IAM AK/SK,所以设置页只呈现一张卡片、一个开关(本机已装的第一条路由作为代表,都没装则用第一条),卡片里写明本机实际装了哪几条。这些 provider id 并没有合并——药丸仍按 id 匹配路由。旧插件 @volcengine/ark-plan-api 的两个国内路由(ark-coding-plan-cn / ark-agent-plan-cn)已移除:它们与 arkcli 的路由查同一份订阅,并列显示只会让人以为买了两个套餐;装了旧插件的用户,药丸仍按那两个 id 显示同一份数据(入口归并到 arkcli 路由)。
  • 火山方舟不按路由收起:它的额度走账号级管控面,一组 AK/SK 就能查到名下所有套餐(GetCodingPlanUsage 与 GetAFPUsage 是同一套协议、同一组凭据)。推理路由装没装只影响模型能不能用,不影响额度能不能查——所以只持有 Coding Plan、却没在 DSH 里配 coding-plan 路由时,那条额度照样会显示(前提是配了 AK/SK)。
  • 凭据来源优先级(inherit 模式):凭据服务 → 启动环境 → 旧手动配置兜底;切到自定义(manual)模式时只使用保存的手动 Key。界面会区分这三种来源。
  • 不接受本地 Key 的提供商:commandcode(凭据链属提供方插件)、xai-oauth、openai-codex(只读各自 CLI 的登录文件),以及 MiMo(Cookie 会话)。
  • 保存与验证分离:凭据先确认持久化,再独立做在线验证;检测关闭的提供商只保存凭据、不发起验证,验证失败不代表保存失败。
  • 出错时在卡片上修:MiMo 未登录 / Cookie 被拒 → 「登录并自动导入」;Cookie 临近到期或已过期 → 「重新登录」;其他家缺凭据 → 「配置凭据」(展开该厂商编辑器并滚动过去)。正常状态不显示行动条。
凭据与环境:各家默认继承变量与说明(取自 PROVIDERS[id].envName)

「默认继承变量」指凭据服务 / 启动环境的默认引用名;留空表示不使用继承变量(凭据来自登录文件或官方平台会话)。

模型商默认继承变量说明
DeepSeek APIDEEPSEEK_API_KEY余额型:GET /user/balance 返回账户余额,与推理是同一把 Key
DeepSeek 账号无deepseek-account 路由;只读 DSH「账号与余额」中已登录账号的充值余额,没有继承变量、也不使用独立 API Key,请在 DSH 的账号与余额页面登录
Z.ai(中国)ZAI_CODING_CN_API_KEY团队套餐另填组织、项目 ID(作为 bigmodel-organization / bigmodel-project 请求头)
Z.ai(国际)ZAI_CODING_API_KEY独立国际 Coding Plan Key,鉴权用裸 authorization,不带 Bearer
KimiKIMI_CODING_API_KEY需要 Kimi Coding Key,不是 Moonshot 开放平台 Key
Xiaomi MiMo界面不使用继承 Key通过官方平台 Cookie 会话读取(envName 只作为服务侧引用名保留)
OpenCode GoOPENCODE_API_KEYOpenCode Go Key
MiniMax(国际)MINIMAX_API_KEYminimax 路由;国际站订阅 Key
MiniMax(中国)MINIMAX_CN_API_KEYminimax-cn 路由;中国站订阅 Key
Command CodeCOMMANDCODE_API_KEY凭据由提供方插件管理,本页只读继承;兜底读取 ~/.commandcode/auth.json(cmd login)
SuperGrok无xai-oauth 路由;读取 dsh-grok-kit / Grok CLI 共享的 OAuth 登录文件 ~/.grok/auth.json(旧版 ~/.dsh/.xai-oauth-auth.json),不保存凭据。access token 过期时借 dsh-grok-kit(≥0.2.0)的官方登录链自动续约——同一文件、同一把写锁、compare-and-write,不会顶掉共享登录态(本插件绝不自行裸 POST 刷新);未安装 grok-kit 或续约失败时才提示手动重新登录。API Key(XAI_API_KEY)取不到订阅周池
Codex无openai-codex 路由;只读 Codex CLI 的 ChatGPT 订阅登录文件($CODEX_HOME/auth.json 或 ~/.codex/auth.json,要求 auth_mode 为 chatgpt),不保存、不刷新 token
火山方舟 Ark(4 条路由)VOLC_ACCESSKEY + VOLC_SECRETKEY额度查询要 IAM Access Key 的 AK/SK 配对,与推理 API Key(ARKCLI_*_API_KEY / ARK_*_API_KEY)不是同一套;4 条路由共用一组 AK/SK。这一组 AK/SK 能同时查到 Agent Plan 与 Coding Plan(含团队版席位)——不存在「Coding Plan 专用查询 key」
SiliconFlowSILICONFLOW_API_KEY余额型:GET /v1/user/info 返回账户余额,与推理是同一把 Key
OpenRouterOPENROUTER_API_KEYkey 限额与用量用推理 key 即可;账户余额需要 management / provisioning key,普通 key 会被 403 拒——此时静默降级为只显示限额,不判失败
SyntheticSYNTHETIC_API_KEY模型订阅请求额度
NanoGPTNANOGPT_API_KEY也可手动填写 Usage only 管理令牌;配额之外还会读一次账户余额(余额端点用 x-api-key 而不是 Bearer;拿不到就静默降级,不影响配额)
Novita AINOVITA_API_KEY余额型,与推理同一把 Key;金额单位 1/10000 USD
HyperbolicHYPERBOLIC_API_KEY余额型;金额单位是美分
DeepInfraDEEPINFRA_API_KEY余额型
ChutesCHUTES_API_KEY通用限额窗口
Ollama CloudOLLAMA_API_KEY订阅窗口型;鉴权是裸 Authorization(本插件已按其要求发送)
Vercel AI GatewayAI_GATEWAY_API_KEY余额型;金额是十进制字符串
ZenMuxZENMUX_MANAGEMENT_API_KEY额度端点只认 Management API Key(推理 key 不适用),所以变量名单独区分。在 https://zenmux.ai/platform/management 创建该 key
LiteLLMLITELLM_API_KEY + 代理地址自建网关:除虚拟 Key(与推理同一把)还要在凭据区填写自己的 proxy 地址。管理端点在 proxy 根——填了 /v1 也会被去掉,不会拼成 /v1/key/info

按 provider id 的字面映射(补齐上表按语义分组、未逐条列出的 4 条火山路由,逐条对应 PROVIDERS[id].envName):

deepseek                 DEEPSEEK_API_KEY
zai-coding-cn            ZAI_CODING_CN_API_KEY
zai-coding               ZAI_CODING_API_KEY
kimi-coding              KIMI_CODING_API_KEY
xiaomi-token-plan-cn     XIAOMI_TOKEN_PLAN_CN_API_KEY   (界面走官方平台 Cookie)
opencode-go              OPENCODE_API_KEY
commandcode              COMMANDCODE_API_KEY
xai-oauth                —                              (OAuth 登录文件)
openai-codex             —                              (OAuth 登录文件)
minimax                  MINIMAX_API_KEY
minimax-cn               MINIMAX_CN_API_KEY
synthetic                SYNTHETIC_API_KEY
nanogpt                  NANOGPT_API_KEY
siliconflow              SILICONFLOW_API_KEY
openrouter               OPENROUTER_API_KEY
novita                   NOVITA_API_KEY
hyperbolic               HYPERBOLIC_API_KEY
deepinfra                DEEPINFRA_API_KEY
chutes                   CHUTES_API_KEY
ollama-cloud             OLLAMA_API_KEY
vercel-ai-gateway        AI_GATEWAY_API_KEY
zenmux                   ZENMUX_MANAGEMENT_API_KEY
litellm                  LITELLM_API_KEY                (另需自填 proxy 地址)
arkcli-agent-plan        ARKCLI_AGENT_PLAN_API_KEY      (额度用 VOLC_ACCESSKEY / VOLC_SECRETKEY)
arkcli-coding-plan       ARKCLI_CODING_PLAN_API_KEY
arkcli-agent-plan-team   ARKCLI_AGENT_PLAN_TEAM_API_KEY
arkcli-coding-plan-team  ARKCLI_CODING_PLAN_TEAM_API_KEY

解析顺序(inherit 模式):凭据服务 → 启动环境 → 旧手动配置兜底;自定义(manual)模式只使用保存的手动 Key。Cookie 与登录文件型凭据不走这条链,见 MiMo 登录与 Cookie 与 Codex ChatGPT 订阅凭据。修改启动环境后是否需要重启取决于目标部署,不能把「我已经改了环境变量」当作运行进程已经读到。

Permissions & data / 权限与数据

读取 / 写入的文件

路径用途读写
~/.dsh/dsh-subusage.json本插件自己的配置:开关、手动 Key、MiMo Cookie、Z.ai 组织 / 项目、LiteLLM 地址、火山 AK/SK、计时元数据读写;POSIX 上新建目录 0700、临时文件 0600,替换前再收紧
~/.codex/auth.json(或 $CODEX_HOME/auth.json)Codex CLI 的 ChatGPT 登录(要求 auth_mode: chatgpt)只读,不保存、不刷新
~/.grok/auth.json(回退 ~/.dsh/.xai-oauth-auth.json)Grok CLI / dsh-grok-kit 的 OAuth 登录平时只读;过期时经 grok-kit 官方链续约并写回同一文件,不自行裸刷
~/.commandcode/auth.jsonCommand Code CLI(cmd login)的 Key只读兜底

网络访问:只连上面清单里各家自己的额度 / 余额端点,以及 platform.xiaomimimo.com(MiMo 用量与登录)、api.commandcode.ai、cli-chat-proxy.grok.com、chatgpt.com/backend-api、火山管控面 open.volcengineapi.com,外加你自己填写的 LiteLLM proxy 地址。完整域名表见 网络端点。deepseek-account 不自行发起 HTTP 请求——它复用 DSH 的 deepseekAccount 服务,由宿主完成鉴权与余额请求(宿主服务可能按自身配置联网);本插件不读取、导出或保存 OAuth token。MiMo 自动登录会另外打开官方平台页面,由你在该页面自行输入密码与验证码。本插件没有自己的服务器,不做遥测,也不把你的数据发给任何第三方。

命令、进程与安装期行为

项情况
执行外部命令不执行。没有任何 shell 调用
生命周期脚本preinstall / install / postinstall / prepare 全部没有;安装期不运行任何代码
运行依赖playwright-core(唯一一个)。只用于可选的 MiMo 自动登录;不下载浏览器,用你本机已有的 Chrome/Chromium
浏览器只有你点「登录并自动导入」时才启动一个隔离的临时会话,五分钟未完成自动超时;不读你日常浏览器的配置、Cookie 或 profile
DSH 核心不修改源码树、不碰任何 @deepseek-ai/* 包、不遮蔽官方插件清单;只用公开 Host 服务与 cordis.patch.yml 插入自己的行

密钥如何处理

  • Key 与 Cookie 不回传页面:读取接口不返回凭据本身,界面不回填已保存的秘密(Cookie 只在需要替换时输入);公开设置只有 hasKeys / hasCookie 这类布尔状态与来源标记。
  • 日志与产物不落盘:真实 Key / Cookie 不会写进日志、测试、截图或读取结果;MiMo 响应在返回前做字段级 Cookie 脱敏。
  • MiMo 自动登录使用独立临时 Chrome 会话:不读取日常 Chrome 配置,不读取密码 / 验证码字段,Cookie 不通过 RPC 返回页面;五分钟未完成自动超时。
  • 计时元数据(xiaomi.loginAt / xiaomi.expiresAt)只是本地时间戳,不是秘密,也不参与凭据有效性判断。
  • 这不是加密凭据库:本版仍兼容本机 JSON 配置存储,凭据以明文落盘;加密凭据存储通道尚未实施。Windows 上的实际访问权限取决于目录 ACL,chmod 不能替代 ACL 或加密库。请不要上传、分享该配置文件,也不要把它写进日志或工单。

额度查询 API

Agent 工具 subusage_quota(模型可直接调用,只读:不写设置、不碰凭据)

参数类型说明
providersstring[](可选)限定范围。可传本插件的 provider id(deepseek、zai-coding-cn、kimi-coding…),也可直接传厂商名(zai、kimi、mimo、minimax、commandcode、grok、codex、ark、deepseek…);大小写与 - . _ 都无关。省略即读取全部
refreshboolean(可选)true 绕过最多 60 秒的缓存,仅在确需最新数字时使用

调用约定(无可读条目时返回汇总与下一步,不伪造额度):

  • 模型手里的名字往往不是这里的 provider id(它更可能看到 DSH 的路由名,例如 zai),所以匹配是宽松的:一个名字命中多条路由时全部返回(zai → 中国版 + 国际版,ark → 4 条),每条各自带着真实 state(没启用的如实标 disabled),由调用方自己判断要看哪条。
  • 一个名字都认不出时,返回里会先给一条说明(写明可用写法),再读取全部路由,并按下述规则保留有数据或读取失败的条目——数据先给出去,判断交给调用方,而不是回一个空结果。
  • 点名的家原样返回,其余按「有没有数据」收起:providers: ["kimi"] 时被点中的家即使没配凭据也照原样给出(用户问的正是「它为什么没数据」);不点名时——以及名字一个都没认出来、走全量兜底时——省略检测已关闭、未配置凭据、以及接口没报告任何额度的条目,省略条数按家写进 omitted(同一家的多个 Command Code 账户只算一家),否则二十多条路由会把真正的数字淹掉。读取失败的条目会保留——那是「这次没读到」,不是「没配置」,省略掉只会把排障方向带偏;认不出的名字自己那行也保留。
  • Command Code 按账户各回一条:账户清单读自提供方插件的 llm-commandcode 设置,每条带 account(账户名)、accountActive(当前激活的那个)与 accountMode(fixed 固定账户 / auto 自动轮换),激活账户排在最前。「还剩多少」与「现在实际用哪个账户」一次问清。

Host 服务(Cordis Service,key 为 subUsage):

const service = ctx.get("subUsage");
const view = await service.quota({ providerIds: ["deepseek"], force: false });
// view = {
//   updatedAt,
//   providers: [{ providerId, label, state, windows, extras, coverage?, freshness?, lastSuccessAt?, error?,
//                 account?, accountActive?, accountMode?, availability?, availabilityReason? }]
// }
  • state:ok | no-key | no-cookie | error | disabled
  • windows[].percent 是已用百分比(0–100);extras 放余额与套餐名等补充项。budgetScope / detail.scope 区分多预算和能力范围
  • availability? 为 included | paygo | blocked | unknown,availabilityReason? 解释依据;读取成功、余额或健康百分比不能单独保证续用资格
  • account / accountActive / accountMode 只在多账户的 Command Code 上出现(见下);此时同一条路由会有多条条目(每个账户一条,providerId 相同),消费方按 account 区分
  • 视图刻意精简:不返回设置,也不返回 keySource / apiDetected / 继承变量名等内部状态,第三方消费者拿不到任何与 Key 相关的字段。多账户路由(Command Code)连错误文案里的凭据引用名也会换成账户标签(Account 2),内部 apiKeyEnv 只留在本机界面那条通道里(用户要靠它定位该往哪个 ref 写凭据)
  • 视图里不出现值为 undefined 的字段:字段缺席表示「这家没有报告」,而不是「报告了空」——带 undefined 的键会被调用方的 schema 校验判成型别错误
  • 单家读取失败只影响它自己的条目,其余照常返回
  • 与设置页共用同一份缓存(TTL 60 秒),频繁调用不会反复请求各家接口;多账户各按「路由 id + 账户引用名」占一份缓存,读全部账户不会互相驱逐
  • quota() 本身不过滤条目(第三方可能正需要「这家没配」这个事实);subusage_quota 工具的不点名调用才省略空条目

Troubleshooting / 常见问题

现象排查方法
药丸不显示依次确认:当前模型的 provider id 是否与上表一致(自定义 id 不会自动映射)→ 该家检测开关是否开启 → 是否被「没有检测到API的默认隐藏」收起(可在设置页临时关掉它)→ 运行中的 Host 与 Client 是否都已重载
设置页没有提供商标签展开提供商管理,确认开关和凭据;无凭据的条目默认隐藏,可临时关闭自动隐藏查看指引
提示「无凭据 / 未检测到 Key」先确认填的是额度凭据而不是推理 Key(两者不通用,见凭据获取指引),再按该家小节核对来源、环境变量与权限
提示「已保存」但仍是「无凭据」凭据编辑要点「保存设置」才提交(提供商开关才是立即保存);确认后若仍为空,把界面文案反馈上来
某家读取失败,其他家正常单家失败只影响自己的条目。按文案分类处理:认证类(401 / 凭据被拒)换对应产品与区域的凭据;权限 / 未订阅类(403)检查账号权限与套餐;限流类等待退避后重试
显示认证失效检查是否用了对应产品 / 区域的订阅 Key;MiMo 重新登录或导入 Cookie;旧额度不会当作有效数据保留
MiMo Cookie 过期会话 Cookie 自签发起 24 小时有效。药丸与设置页会在 2 小时内 / 30 分钟内分别变黄、变橙,到期显示「Cookie 已过期,请重新登录」;重新登录或重新导入即重新计时。倒计时只是提醒,真实失效以官方接口返回为准
药丸显示「未记录登录时间」凭据由旧版本保存,没有计时元数据;重新登录或重新导入一次后开始计时
Kimi 缺少 7 天窗口,或提示结构错误窗口集合按套餐体系下发:老套餐(节奏命名,如 Allegro)为 5 小时 + 7 天,新套餐(Go / Plus 命名)为 5 小时 + 月度总额。0.8.3 起按实际下发的窗口解析,不再要求 7 天窗口;升级后仍报 Invalid Kimi usage response 即为未识别的字段结构,插件不会猜测额度,可回报该响应
显示缓存、部分数据或额度未知查看更新时间和错误说明;缓存来自之前的成功读取,部分数据不保证有可用额度,余额也不等于订阅余量
刷新后数字暂未变化成功结果按提供商缓存 60 秒;手动刷新可跳过普通 TTL,但仍遵守限流退避和 Retry-After
MiMo 自动登录无法启动Host 所在机器需安装 Google Chrome 并有桌面环境;远程或无桌面部署使用手动导入
保存成功但验证失败凭据已保存,检查网络、区域或账号后重试;保存与在线验证分别反馈
保存提示配置已改变另一窗口或实例更新了设置;重新读取配置后再编辑,避免旧表单覆盖新值
升级后仍是旧界面或 RPC 不匹配确认运行中的 Host 和 Client 都已重载;仅刷新页面不能保证 Host 升级
Command Code 额度与实际账户不同在 设置 → 订阅用量 的 Command Code 面板或用量的药丸弹层里都能切换提供方插件的服务账户(同一开关):「自动轮换」时显示默认账户(顶层 Key)的用量,不跟随轮换中的实际服务账户,提供方自定义 apiBase 也不跟随。想一次看全部账户的余量与当前激活项,可让 Agent 调 subusage_quota(providers: ["commandcode"])
SuperGrok 提示认证失效access token 过期时插件会先经 dsh-grok-kit(≥0.2.0)的官方登录链自动续约同一共享登录文件,通常无需操作;只有未安装/旧版 dsh-grok-kit 或续约失败(如 refresh_token 已失效)才需在 设置 → Grok Kit 重新登录或运行 grok login 后重试。API Key(XAI_API_KEY)取不到订阅周池
火山方舟报签名或权限错误AK 与 SK 必须来自同一个 IAM 用户(跨来源拼凑只会 401 且看不出根因);确认用的是 IAM Access Key 而不是方舟推理 API Key;403 多为未订阅或权限不足

Development / 开发

路径职责
lib/index.js提供商适配、凭据解析、持久化、缓存、Host RPC 与 subusage_quota 工具
lib/client.jsClient 模块、共享 store、设置页与模型药丸(含界面中英文文案)
lib/volcengine.js火山方舟 AK/SK 签名与窗口解析(纯函数、零依赖)
lib/mimo-login.js隔离 Chrome 登录、Cookie 提取与任务生命周期
cordis.patch.yml、package.jsonbundle 注册、入口、依赖与打包白名单
tests/、scripts/桩网络 / 隔离文件系统回归;清单、打包、离线预览与浏览器检查
docs/开发约定、提供商覆盖、UX 设计、发布与更新记录

没有源码转译步骤,直接维护 lib/*.js。基础检查不需要安装 DSH 或连接账号:

node tests/run-all.mjs
node scripts/check-manifest.mjs
node --check lib/index.js
node --check lib/client.js
node --check lib/mimo-login.js

离线预览(生成 HTML,使用虚构用量与桩 Hook,不连接 DSH、不读取真实凭据):

foreach ($theme in @('dark', 'light')) {
  foreach ($width in @(530, 500, 499, 360)) {
    node scripts/render-ui-preview.mjs $width xiaomi-token-plan-cn $theme credentials
  }
}
node scripts/render-ui-preview.mjs 530 nanogpt light pill
node scripts/check-browser-runtime.mjs   # 需要工作区可解析 playwright-core 且本机装有 Google Chrome

文档入口:凭据获取指引(每类凭据的官网入口、环境变量与填入位置、报错对照)、开发与验证(RPC 契约、缓存与凭据约定、离线预览与实机验收范围)、提供商清单与额度语义、提供商覆盖与取舍、UX 设计、发布与市场收录、更新记录、审查记录。

打包说明:package.json 的 files 白名单是 lib / cordis.patch.yml / README.md / LICENSE,因此 assets/title.svg、assets/screenshots/ 与 docs/ 不进 npm 包——图片通过 GitHub 绝对地址加载,npm 页面无需把图片打进包也能显示。改动白名单属于发布决策,需单独处理。

界面预览

以下为 0.10.11 的离线组件测试截图,使用虚构用量数据,不包含真实账号信息,也不是运行中的 DSH 截图。

深色设置页:查看订阅用量、管理凭据与提供商。

深色订阅设置页(离线测试预览)

浅色用量弹层:顶部先给结论(额度充足 / 余量偏低 / 即将用尽…),下面是各窗口的剩余百分比与重置时间。右下角是收起态药丸——每个窗口一根彩条,正常时不写字。

浅色 NanoGPT 用量弹层(离线测试预览)

药丸 15 种状态一览(浅色 / 深色)见开头的能力展示。

截图声明见根目录 screenshots.json。上述四张保留 0.10.11 的基础界面预览;下方三张为 0.11.2 新增语义状态的真实组件离线预览(虚构用量、桩网络、无凭据),底部水印明确标注「非运行中的 DSH 截图」。真实 DSH Loader、实际账号在线接口与多账户映射仍未验收,截图不代表已通过这些检查。

新增:额度耗尽与整体续用分开表达

查看 0.11.2 的按量续用、轮换池与部分能力限制(虚构数据)

包含额度耗尽但可按量续用

默认账户限额但轮换池仍可用

日能力池耗尽不等于全部套餐不可用

License & security / 许可与安全

MIT,见 package.json 的 license 字段。本项目与 DeepSeek Harness 及各服务商无官方关联;非公开接口可能随时变更,请以各服务商官方条款为准。

报告安全问题:请不要在公开 issue 里粘贴 Key、Cookie 或完整配置文件。优先使用 GitHub 仓库的 Security → Report a vulnerability 私有渠道;该入口不可用时,也可以在 issue 中只描述问题与影响范围,凭据一律留空。任何复现步骤请先自行脱敏。

Related plugins