shxiaooo/dsh-account-quota

dsh-account-quota

DeepSeek Harness web plugin: an ambient balance/usage reading under the composer, with a clickable per-provider detail panel. Every figure is upstream-reported.

未分類balancecordisdeepseek-harness

dsh-account-quota

DeepSeek Harness(DSH)Web 插件:在输入框下方那一行,显示 DeepSeek 账户的真实余额。

  [1 轮 104 步 · 245 tok/s]  [11.6M tok · 缓存命中 99%]  [◔ 16%]  [🐋 ¥12.10 · 今日 -¥0.40]
   └──────── 官方内置 ────────┘                          └─内置─┘  └───── 本插件 ─────┘

余额胶囊可以点,点开是明细面板:总余额、今日消耗、今日充值 / 赠送。

OpenCode Go 的套餐用量是另一个插件 dsh-opencode-go-quota。两者各自独立, 可以分别开关、互不影响。本仓库只管余额这一半。

数据来源

卡片上每个数字都直接来自提供方 API,没有任何本地推算。

提供方数据源凭据
DeepSeekhttps://api.deepseek.com/user/balanceDEEPSEEK_API_KEY

「今日消耗」由余额差值算出:余额接口只以差值的形式反映账号级消费, 所以插件在本地保存一条余额序列,按逐段正差值累加,得出当日消耗和当日充值。

  • 序列落盘保存,刷新页面、换标签页、开新会话、重启主机,读到的都是同一条序列。
  • 余额是账号级的 —— 别的机器、脚本、官方 App 花的钱一样会让余额下降,都会被计入。
  • 采样时钟在 Host 侧,与浏览器是否打开无关,这样当天的起点才不会漂到 「早上第一次打开界面」的时刻。

安装

pnpm dsh plugin --profile web add link:~/dsh-account-quota
pnpm dsh plugin --profile web add link:~/dsh-opencode-go-quota   # 可选:套餐用量那一半

两个包互不依赖,装哪个就有哪一行。装完需要重启 dsh web 生效 —— 浏览器半在启动时组装进 boot graph。

配置

在 profile 的 cordis.patch.yml 里配置。

⚠️ patch 会整体替换该行的 config,要保留的键必须全部重写一遍。 写了未知的键会直接报错,而不是被忽略。

- id: account-quota
  config:
    cacheMs: 60000
    providers:
      deepseek:
        kind: tokens
        displayName: DeepSeek 官方
        apiKeyEnv: DEEPSEEK_API_KEY
        balanceUrl: https://api.deepseek.com/user/balance
        currency: CNY

顶层字段

字段默认值说明
cacheMs60000快照新鲜度下限,同时是 Host 侧的采样周期。调大省请求量,代价是零点后的第一段消耗会被并进更大的区间
requestTimeoutMs10000单次上游请求超时(覆盖到响应体读完为止)
maxResponseBytes65536上游响应体上限,边读边判,超限即中止传输
statePath$DSH_HOME/account-quota/state.json余额序列落盘位置。$DSH_HOME 未设置时回退 ~/.dsh

cacheMs 同时承担两个角色,因为两者问的是同一个问题 —— 「账户的画面可以有多旧」。 代价是与浏览器是否打开无关的固定请求量:默认 60 秒即每个适配器每天约 1440 次请求。

提供方适配器

  • kind: tokens 要求 balanceUrl 返回 { is_available, balance_infos: [...] }。
  • 写 providers 会替换内置表而不是追加:本包内置的只有 deepseek 一项, 要保留它就照抄一遍。

刷新节奏

环节周期在哪
上游采样(每个适配器一次请求)cacheMs,默认 60 秒Host
浏览器重读快照(本机 HTTP,不打上游)60 秒Client

界面上的数字最多比上游旧约 60 秒(再加一次请求耗时)。

显示规则

常驻行只有一项:¥12.34 · 今日 -¥0.56。

  • 今日消耗为 0 时显示 今日 ¥0.00(不写 -¥0.00)。
  • 当天还没有样本、或余额读取失败时,后半段整个不出现,只留余额。
  • 余额本身读不到时这一行仍然在,数值显示 — —— 读不到不等于零,也不等于插件没装。 点开面板可以看到失败原因。

展开面板列出全部字段:总余额 / 今日消耗(后面跟着统计起点与采样次数)/ 今日充值(>0 时)/ 充值 / 赠送。

自测

node selftest.js

已知限制

  • 仅适用于 web profile;headless 中该行因缺少 webServer 保持 pending。
  • 不显示 token 数 —— 上游不发布这个数据。
  • 消费金额只有当天,且只是差值的和:上游不发布逐请求消费,只有余额。所以 1)没有历史;2)分辨率是 ¥0.01;3)当天起点是当天第一次采样,不是 00:00, 面板会在「今日消耗」后面标出这个起点。跨本机午夜的差值被丢弃,不摊分。
  • 需要 Host 在跑:dsh web 停止期间不采样。序列在盘上,重启后接着算, 但停机期间的消耗会落进下一个采样区间,或被零点边界丢弃。
  • 百分比只有整数 —— 上游 percent 就是整数。
  • 路由没有鉴权,但 dsh web 默认只绑 127.0.0.1。用 webStartup.host: 0.0.0.0 暴露到局域网时,这个路由(余额与用量)和 GUI 其他接口一样对同网段可读。

来源与许可

本仓库是 zer0zio-stack/dsh-opencode-go-quota v0.4.0 的 fork,MIT 许可,原始版权归 zer0zio-stack 所有。 v0.5.0 起的改动逐版本记录在 PATCHES.md,方便日后与上游对齐。