跳到主要内容

dsh-credits

已验证

dsh-credits · v0.4.3 · MIT · Web 界面

DeepSeek Harness 额度插件:按供应商展示内置套餐、余额或自定义 HTTP 额度,并提供模型计价、本会话估算与累计消耗

安装

dsh plugin add dsh-credits

用 dsh --profile default --dump-config 确认 layer 已生效 —— 参见安装指南。

源码

标签

作者

说明文档

dsh-credits

npm version

DeepSeek Harness(Web / 官方桌面版)额度插件:在输入框下方显示账户额度与本会话估算消耗;右下角另有可拖动的累计消耗胶囊。设置在侧栏「额度与消耗」(最后一项,圆形 ¥ 图标),分成多张可折叠卡片。

兼容性:使用 DSH Session v2,不兼容旧版会话事件。已验证 0.2.0-rc.2;依赖声明同时接受 0.2.0-rc.2 起的 0.2.0 系列和 0.2.1-alpha.1 起的 0.2.1 系列。

支持中文和英文,界面语言跟随 DSH 设置。DeepSeek 支持 API Key 余额与 DSH 登录账号的充值、赠送余额。

  • 账户额度 + 状态灯
    DeepSeek 模式如 🟢 余额 ¥97.69;OpenCode Go 模式如 🟢 Go 额度 月 6% · 周 12% · 5h 9%。点击圆点可立即强刷。
  • 跟随当前对话模型
    底部读数跟输入框选中的模型供应商走。每个 DSH 供应商独立选择内置模板、复用另一供应商的额度,或配置自定义 HTTP 接口;未配置或已关闭时不显示额度。
  • 底部条布局
    默认独立换行,额度单独占底下一行;也可改成跟底部已有统计共用一行、排在最后。底部条、累计胶囊、悬停卡片都可以关掉。
  • 本会话估算消耗
    按模型单价估算,可为不同 DSH 供应商设置独立单价和价格生效时间段。DeepSeek 按北京时间自动套用峰谷价:V4 自 2026-08-17 00:00 起;deepseek-flash / deepseek-v4-flash / deepseek-v4-flash-vision-exp 自 2026-09-10 12:00 起切换为 V4.1 Flash 新价。
  • 生成吞吐 TPS 从 DSH Session v2 settlement 的压缩流和 provider usage 计算精确 TPS n tok/s。可在「设置 → 额度与消耗 → 展示 → 生成 TPS」关闭。
  • 累计消耗胶囊
    右下角可拖动气泡,查看全部 / 今天 / 昨天 / 本周 / 本月 / 自定义时间范围内的跨会话估算总额(按当前计价货币与单价现算)。复刻会话继承的历史不会重复计入累计消耗。
  • 设置卡片
    展示、额度查询、模型单价、YAML 导出各一张卡;阈值与查询频率已收进每个供应商的额度配置。每张卡独立「放弃修改 / 保存」,保存后写入当前 profile,重启后保留;改过的字段可「恢复默认」。关掉再打开,未保存的草稿还在。 整个插件的启停统一使用 DSH 插件列表中的开关;设置页保留底部额度、气泡、TPS 和供应商额度的独立开关。旧版配置中的总开关 enabled 不再生效。

快速使用

dsh plugin --profile web add dsh-credits

装完后重启 dsh web。本地开发可改为:

dsh plugin --profile web add <本目录绝对路径>

Web 和官方桌面版的安装与配置分别属于 web / desktop profile。桌面版先启动一次,再从托盘或应用菜单完全退出;使用桌面版「Manage dsh Command…」安装的命令:

dsh plugin --profile desktop add dsh-credits

装完后重新打开桌面版,在「设置 → 额度与消耗」配置。桌面版自带的插件管理页也可用于安装。本地开发可将包名替换为项目目录的绝对路径。

升级:

dsh plugin --profile web remove dsh-credits
dsh plugin --profile web add dsh-credits@latest

桌面版将升级命令中的 --profile web 替换为 --profile desktop,执行前完全退出应用,完成后重启。

卸载:

dsh plugin --profile web remove dsh-credits

界面预览

悬停底部读数会展开详情:DeepSeek 列出全部币种钱包,Go 列出三个用量窗口,下面是本会话估算。

DeepSeek 官方余额悬停卡片

底部额度默认独立占一行:

DeepSeek 余额条

OpenCode Go 额度条

OpenCode Go 模式下,卡片改成三个窗口的用量百分比与重置时间:

OpenCode Go 额度卡片

右下角可拖动的累计消耗胶囊,按今天 / 昨天 / 本周 / 本月 / 自定义区间汇总跨会话估算:

累计消耗胶囊

设置 → 额度与消耗:多张可折叠卡片,同一功能区两列排布,每张卡单独保存。以下截图为旧版示例;当前版本已移除顶部总开关,名称也已更新。

设置卡片列表

展示卡片

额度查询现在以 DSH 供应商列表为主体:每个供应商都有独立的额度开关、信息来源和保存按钮。

供应商级额度查询

识别出适合的模板后会直接显示为「内置模板」,展开后仍可切换其他套餐或余额模板:

内置额度模板设置

没有适合的模板时,可使用自定义 HTTP 接口配置请求、鉴权、返回字段与数值换算:

自定义 HTTP 额度设置

供应商额度配置里的阈值与刷新

供应商额度怎么用

在「设置 → 额度与消耗 → 额度查询」中:

  1. 页面列出 DSH 已启用的供应商及已保存的额度绑定,每个供应商独立开启或关闭额度展示。已不在 DSH 目录中的绑定会标记「供应商未配置」,仍可编辑或关闭。
  2. 插件会在后台按供应商 ID 和 Base URL 匹配模板。匹配成功时,页面直接显示对应的「内置模板」,不会再出现单独的「自动识别」选项。
  3. 如需调整,可点「编辑」,在「额度信息来源」中选择:
    • 内置模板:使用模板的查询地址和解析规则,并复用当前 DSH 供应商保存的 Key;模板仍可手动切换。
    • 复用另一供应商的额度:两个模型供应商实际共用同一账号时,直接展示另一项已经查询到的额度;状态阈值和刷新频率也沿用来源供应商,在来源配置中修改。
    • 自定义 HTTP 接口:自行填写 URL、鉴权和返回字段映射。
  4. 未识别出模板的供应商默认进入「自定义 HTTP 接口」;接口尚未填写时保持关闭,不会随意套用其他供应商的模板。
  5. 修改后点击当前供应商编辑区底部的「保存」。测试按钮使用当前草稿,不要求先开启该供应商的额度展示。

切换模型时只查看当前 DSH 供应商自己的绑定;没有配置或已关闭的供应商不显示额度,也不会回退到无关账户。本会话消耗和 TPS 不受影响。每个供应商拥有独立的查询与缓存,因此可以在 DSH 中添加多个指向 OpenCode Go 的自定义供应商,并为每个账号分别配置同一个模板。

自定义 HTTP 操作流程

自定义接口不要求编写整段 JSON 配置,常用设置都可以在页面完成:

  1. 填写额度接口 URL 和请求方法。
  2. 选择请求凭证:直接填写凭证、复用当前/其他 DSH 供应商的 Key、使用凭证引用,或无需鉴权。
  3. 选择鉴权方式:Bearer、Token、Basic、任意请求头、Cookie、URL 参数、JSON 参数或 Form 参数。需要时再添加普通请求头和请求体。
  4. 点击「测试并读取字段」。成功提示会列出实际解析出的指标;失败时可以复制请求方法、脱敏后的请求头与请求体、响应状态码和响应体。
  5. 为每个展示指标选择计算方式并映射字段:
    • 直接读取指标值:读取余额、剩余次数或任意数值;可选总量字段用于显示百分比。
    • 总量减已用量:分别选择总量和已用量字段,插件计算剩余量。
  6. 字段返回数组时可取第一项、求和、计数、最小值或最大值;换算乘数支持科学计数法,例如 1e-12。重置时间字段只用于显示。
  7. 测试结果正确后保存,再开启「展示该供应商额度」。

直接填写的 Token 或 Cookie 保存到 DSH credentials,不写入导出的普通配置;页面只显示「已设置」,可输入新值覆盖。附加请求头中的 Cookie、Authorization、Token、API Key 等敏感字段也会脱敏。

设置页「保存」会通过 DSH 原生配置编辑器写入当前 profile 的 cordis.patch.yml,立即生效,重启后保留。Web 与桌面 profile 各自保存;「YAML 导出」用于备份或迁移。直接凭证与敏感请求头只保存到 DSH credentials,配置中保留引用。写入失败会显示保存失败并保留原配置;不提供原生配置编辑器的旧宿主需要升级后才能使用设置页保存。

内置与官方模板

内置额度源:

provider 说明 上游接口 密钥
deepseek DeepSeek 官方余额 GET /user/balance DEEPSEEK_API_KEY
deepseek-account DSH 登录账号充值与赠送余额 宿主 deepseekAccount.getBalance 复用 DSH 登录,无需 API Key
opencode-go OpenCode Go 订阅用量 GET https://opencode.ai/zen/go/v1/usage DSH 供应商凭证或 OPENCODE_GO_API_KEY

deepseek-account 与 API Key 的 deepseek-official 是不同供应商,各自绑定余额来源。插件不读取或转发账号登录 Token;由宿主服务查询,将同币种充值与赠送余额合计展示。退出登录或账号状态变化时清空旧缓存,旧请求不能覆盖新账号读数;账号余额查询失败时不沿用旧余额。未登录时提示先登录 DeepSeek 账号。

自动匹配时,明确的官方域名优先于供应商 ID,可区分国内与国际接口;代理域名按供应商 ID 推断,也可手动选择模板。只有 DeepSeek 和 OpenCode Go 自动模板使用 DSH 的 Base URL;其余模板使用固定的官方额度接口。模型接口与额度接口路径不同,代理余额查询请使用自定义 HTTP,填写代理实际提供的额度地址。DeepSeek 自动模板会移除末尾 /v1 后拼接 /user/balance,已填写完整余额端点则保留。

除 DeepSeek 和 OpenCode Go 外,还提供:

  • 订阅套餐:Kimi For Coding、智谱 GLM Coding / Z.AI、MiniMax Coding Plan(国内 / 国际)
  • 账户余额:StepFun、OpenRouter、Novita AI

硅基流动不再提供内置余额模板。旧 /user/info 无法可靠反映网页现金余额和代金券;需要时请给对应 DSH 供应商选择「自定义 HTTP 接口」,自行配置网页接口与会话凭证。网页内部接口可能随时调整,Cookie 失效时需要重新填写。

高级 YAML 的每个 providerQuotas 绑定可以使用三种数据形态:

  • balance:DeepSeek 风格多币种余额
  • usage:OpenCode Go 风格多窗口用量
  • metric:任意单指标/多指标剩余额度(HTTP + JSONPath)

服务端会按 DSH 供应商分别缓存所有已启用额度源;切模型时底部直接换展示,不必再等一轮查询。

当前对话模型的供应商 底部展示
绑定为 OpenCode Go 模板的供应商 该账号的订阅用量(5 小时 / 周 / 月)
绑定为 DeepSeek 模板的供应商 该账号的官方余额
绑定为余额/套餐模板或自定义 HTTP 的供应商 该供应商自己的解析结果
未配置或单独关闭的供应商 不显示额度;本会话消耗与 TPS 仍可正常显示

OpenCode Go 供应商绑定的密钥解析顺序:DSH 供应商配置的凭证引用 / 已保存凭证 → 模板的 OPENCODE_GO_API_KEY(credentials / 环境变量)。此路径不读取 OpenCode auth.json。

仅旧的独立查询路径仍保留:opencodeApiKey → DSH 供应商凭证 → OPENCODE_GO_API_KEY(credentials / 环境变量)→ ~/.local/share/opencode/auth.json。新配置请使用供应商绑定。

配置

覆盖文件:Web 为 $DSH_HOME/profiles/web/cordis.patch.yml,官方桌面版为 $DSH_HOME/profiles/desktop/cordis.patch.yml。也可在设置 → 额度与消耗 改完后按卡片点「保存」。

新配置以 providerQuotas 为准,不再需要全局的额度查询模式、默认展示源或未匹配回退项。providerId 必须与 DSH 供应商列表中的实际 ID 一致。

旧配置兼容范围:quotaSources 中带 providerIds 的有效 HTTP 数据源会迁移为供应商绑定;旧 manual 类型不支持,需改成 HTTP 查询。quotaMode: custom、旧 provider 和全局 baseUrl / opencodeApiKey / opencodeBaseUrl 仅服务于旧查询路径,不覆盖已有供应商绑定。升级后请在设置页按供应商核对模板、地址和凭证,再保存新的 providerQuotas;安装升级本身不会改写原有配置文件。保存时会迁移旧的明文凭证;含账号密码的旧 URL 需要先改成凭证配置。

常用展示项:

配置 默认 说明
providerQuotas [] 每个 DSH 供应商独立的额度来源绑定;未显式配置时会在后台匹配内置模板,失败则准备一份关闭的自定义 HTTP 配置
showDock true 是否显示底部额度读数
dockLayout own own 独立换行;shared 与底部已有统计共用一行
showCapsule true 右下角累计消耗胶囊
showPopover true 悬停底部读数时的双栏详情
showTps true 是否显示最近一次生成 TPS

多个 OpenCode Go 账号

- id: dsh-credits
  config:
    showDock: true
    dockLayout: own
    showCapsule: true
    showPopover: true
    providerQuotas:
      - providerId: opencode-go
        enabled: true
        sourceType: template
        templateId: opencode-go
        thresholdMode: percent
        warningThreshold: 30       # 剩余额度 < 30% 黄灯
        dangerThreshold: 10        # 剩余额度 < 10% 红灯
        refreshIntervalMs: 300000
      - providerId: go-personal  # DSH 中另一个自定义供应商,使用另一份 Key
        enabled: true
        sourceType: template
        templateId: opencode-go
        thresholdMode: percent
        warningThreshold: 30
        dangerThreshold: 10
        refreshIntervalMs: 300000
    currency: USD

两个 DSH 供应商需要分别保存自己的 Key;插件会产生 provider:opencode-go 和 provider:go-personal 两个适配器及缓存。切到哪个供应商,就显示哪个账号的三个用量窗口。状态灯按「剩余最少」的窗口判定;套餐没有固定美元上限可展示。

DeepSeek 人民币账户

- id: dsh-credits
  config:
    providerQuotas:
      - providerId: deepseek-official
        enabled: true
        sourceType: template
        templateId: deepseek
        thresholdMode: value
        warningThreshold: 10
        dangerThreshold: 5
        refreshIntervalMs: 300000
    currency: CNY
    prices:
      deepseek-flash:
        cacheHit: 0.04
        cacheMiss: 2
        output: 8
        peak: { cacheHit: 0.04, cacheMiss: 2, output: 8 }
        offPeak: { cacheHit: 0.02, cacheMiss: 1, output: 4 }
      deepseek-v4-pro:
        cacheHit: 0.3
        cacheMiss: 9
        output: 27
        peak: { cacheHit: 0.3, cacheMiss: 9, output: 27 }
        offPeak: { cacheHit: 0.15, cacheMiss: 4.5, output: 13.5 }
      deepseek-chat: { cacheHit: 0.1, cacheMiss: 1, output: 2 }
      deepseek-reasoner: { cacheHit: 1, cacheMiss: 4, output: 16 }

DeepSeek 美元账户

- id: dsh-credits
  config:
    providerQuotas:
      - providerId: deepseek-official
        enabled: true
        sourceType: template
        templateId: deepseek
        thresholdMode: value
        warningThreshold: 2.0
        dangerThreshold: 0.5
        refreshIntervalMs: 300000
    currency: USD
    prices:
      deepseek-flash:
        cacheHit: 0.006
        cacheMiss: 0.3
        output: 1.2
        peak: { cacheHit: 0.006, cacheMiss: 0.3, output: 1.2 }
        offPeak: { cacheHit: 0.003, cacheMiss: 0.15, output: 0.6 }
      deepseek-v4-pro:
        cacheHit: 0.042
        cacheMiss: 1.26
        output: 3.78
        peak: { cacheHit: 0.042, cacheMiss: 1.26, output: 3.78 }
        offPeak: { cacheHit: 0.021, cacheMiss: 0.63, output: 1.89 }

prices 是「当前 currency 下每 1M token」的单价。V4 / V4.1 可写 peak / offPeak(高峰 / 低谷)。内置 deepseek-flash / deepseek-v4-flash / deepseek-v4-pro / deepseek-v4-flash-vision-exp 如果只有三个刊例字段,插件仍按内置时间表计价(兼容旧配置);配置值恰好等于某段历史官方价时也会继续按时间表重算,只有用户手改过的峰谷 / 单价才作为自定义覆盖。自行添加的模型只写三字段则全天按该价计,等效峰谷倍率 1。高峰为北京时间周一至周五(不含中国法定节假日)09:00–12:00、14:00–18:00,其余时段(含节假日、周末及调休补班周末全天)为低谷。DeepSeek 账户的 CNY / USD 是两套独立钱包:底部会列出选定货币,以及其它仍有余额的钱包;悬停卡片列出全部钱包。计价货币只影响本会话/累计估算和状态灯,不会把其它钱包藏掉。计价仅支持官方提供的 CNY / USD 两套价格,不做汇率换算;旧版 EUR 实际复用了 USD 数值,升级后会按 USD 显示。CNY / USD 各自照官方价目列出:V4.1 Flash 低谷 $0.003 / $0.15 / $0.60、高峰 $0.006 / $0.30 / $1.20;V4 Flash(含 vision-exp)低谷 $0.007 / $0.22 / $0.66、高峰 $0.014 / $0.44 / $1.32,V4 Pro 低谷 $0.022 / $0.66 / $1.98、高峰 $0.044 / $1.32 / $3.96。时间线:V4 峰谷自 2026-08-17 00:00 起;V4.1 Flash 自 2026-09-10 12:00 起。历史用量始终按该笔发生的时间点计价。没有精确价表的 DeepSeek 新模型会按名字回退:含 flash → 默认 Flash,含 pro → 默认 Pro,其它 deepseek* → 默认 Flash;本会话消耗卡片会在模型名后显示黄色感叹号并提示回退到了哪个默认价。完全没有可回退定价的模型(例如 glm)也会列出,金额显示“无法计算”。

渠道单价与生效时间段

设置页「模型单价」可选择通用价表或某个 DSH 供应商。providerPrices 使用实际供应商 ID;该渠道未单独配置的模型继续使用 prices / 内置价表。渠道单价会覆盖同名模型的官方价格。

每个模型可添加 schedules,按调用发生时间选择单价:起点包含、终点不包含,空起点或终点表示不限。时间段不能重叠,YAML 时间必须包含时区;设置页使用本地时间并自动转换。没有命中时间段时使用该模型原有单价。所有自定义单价均以当前 currency 每 1M token 填写,切换货币后需自行调整自定义价格。

- id: dsh-credits
  config:
    currency: CNY
    providerPrices:
      my-provider:
        my-model:
          cacheHit: 0.1
          cacheMiss: 1
          output: 2
          schedules:
            - from: '2026-10-01T00:00:00+08:00'
              to: '2026-11-01T00:00:00+08:00'
              cacheHit: 0.05
              cacheMiss: 0.5
              output: 1

累计消耗的「全部」统计已记录历史至今的调用。复刻会话继承的历史不重复计入累计消耗;复刻后新产生的调用正常计入。本会话仍显示完整会话历史的估算,独立会话里用量相同的调用不会被误删。

自定义 HTTP(高级 YAML)

接口地址不允许包含 user:password@host。已有此类配置需移除 URL 中的凭证,改用凭证输入框与 Basic 鉴权;旧配置返回时遮罩 URL 凭证,不覆盖磁盘文件。

自定义额度接口的响应体上限为 1 MiB;读取超过上限会停止,并提示使用更精简的接口。错误诊断对所有非空已知凭证脱敏,包括短密钥;短值可能同时遮罩上游文本中相同的普通字符。

设置页已经覆盖常用配置。只有批量维护、版本控制或特殊解析时才建议手写 providerQuotas:

- id: dsh-credits
  config:
    providerQuotas:
      - providerId: my-provider
        enabled: true
        sourceType: custom
        source:
          id: quota-my-provider
          name: My Plan
          kind: metric
          request:
            method: GET
            url: https://example.com/quota
            dshProvider: my-provider  # 复用这个 DSH 供应商的 Key
            authStyle: bearer
          response:
            metrics:
              - key: remaining
                label: 剩余额度
                calculation: direct
                valuePath: $.data.remaining
                totalPath: $.data.total
                unit: USD
                aggregate: value
                scale: 1
                offset: 0
                resetsAtPath: $.data.resetsAt

自定义 HTTP 支持直接取「剩余」,也支持用「总额 - 已用」计算剩余。OpenRouter 已是内置模板,不需要再写代理脚本。

请求鉴权支持:

  • Bearer、Authorization: Token、Basic Auth、任意请求头、Cookie、URL 查询参数
  • 将凭证注入 JSON 或 application/x-www-form-urlencoded 请求体
  • 直接填写敏感凭证、复用 DSH 供应商 Key,或在高级选项中使用 credentials / 环境变量引用
  • 直接填写的值通过 DSH credentials.set 只写保存;设置页和配置 API 只显示「已设置」,不会回显原值,再次填写即覆盖
  • 附加多个普通请求头,例如硅基流动网页接口需要的 x-subject-id

响应映射支持普通点路径、数组下标和 [*] 通配符;数组可取第一项、求和、计数、最小值或最大值,最后再应用乘数与加减偏移。例如 $.data.wallets[*].remaining 配合「求和」可汇总代金券列表。当前每个供应商绑定只请求一个 URL;现金与代金券若来自两个接口,暂时不能在同一绑定中组合请求。

硅基流动网页余额示例

硅基流动未提供内置模板,可使用登录后的网页接口配置自定义 HTTP。以下示例只说明字段结构,不应把真实 Cookie 提交到仓库:

- id: dsh-credits
  config:
    providerQuotas:
      - providerId: siliconflow-cn
        enabled: true
        sourceType: custom
        source:
          id: quota-siliconflow-cn
          name: 硅基流动-国内额度
          kind: metric
          request:
            method: GET
            url: https://cloud.siliconflow.cn/walletd-server/api/v1/subject/profile/peek
            credentialMode: direct
            authStyle: cookie
            headers:
              x-subject-id: <当前账号的 subject id>
          response:
            metrics:
              - key: remaining
                label: 剩余额度
                calculation: direct
                valuePath: $.data.financialInfo.balance
                totalPath: $.data.financialInfo.recharged
                unit: CNY
                aggregate: value
                scale: 1e-12
                offset: 0

页面配置时,将完整 Cookie 填入凭证输入框,x-subject-id 放在附加请求头。先测试并确认实际返回字段;如果接口返回的金额使用 10^-12 为单位,就把换算乘数设为 1e-12。网页接口及字段可能调整,Cookie 过期后需要重新填写。代金券接口与现金余额是两个请求,当前版本不能自动合并。

架构

浏览器只读本地缓存,不直连上游:

路径 作用
GET /query-credits 账户额度缓存。响应里同时带所有已启用额度源的 views;?source= 只决定顶层摊平哪一套,?force=1 强刷
GET /query-credits/spend?range=today 跨会话累计消耗。range 可为 all / today / yesterday / week / month / custom;自定义时再带 from、to(YYYY-MM-DD 或 ISO)
GET /query-credits/config 读当前配置
POST /query-credits/config 保存配置并立即生效
POST /query-credits/test-connection 使用当前供应商草稿测试模板或自定义 HTTP,并返回可选字段或脱敏后的错误诊断

节假日日历目前覆盖 2026 年,复用 NateScarlet/holiday-cn 的年度 JSON,保留国务院通知来源和 MIT 许可证。仅使用内置数据,不自动联网更新;新增年度或调整计费政策时手动更新,具体步骤见 日历维护说明。未收录年份仅按星期判断,节假日估算可能偏高。

本会话花费由 queryCreditsCost 投影折叠 Session v2 的 assistant/message / assistant/attempt settlement(每笔带事件时间),重试产生的实际用量也会计入,并按该笔发生时的北京时间峰谷价计价;前端切货币时仍按各自行情重算,不会用“此刻”的单价覆盖早上的高峰用量。TPS 由 liveTokenUsage 计算:从 settlement 压缩流还原“首个输出 token → 最后一个输出 token”的时间窗,配合 provider 精确 usage 得到该步平均输出速度。当前步尚未算出时沿用上一步的数值并置为斜体,本步结算后换成新值并恢复正体。累计消耗同样计入失败与重试尝试、按事件时间计价,并落盘到 $DSH_HOME/storages/dsh-credits-spend.json。胶囊位置和所选时间范围记在浏览器 localStorage。

密钥走 Harness credentials,默认不写进配置文件。

更新记录

0.4.3

  • 修复设置页仅更新内存的问题:保存通过 DSH 原生配置编辑器写入当前 profile,重启后保留;保存失败保留原配置,并恢复本次修改的凭证
  • 保存时将旧明文 Key、Token、Cookie 和敏感请求头迁移到 DSH credentials,配置只保留引用;Web / 桌面配置档分别保存
  • 复刻会话按继承历史边界去重,累计消耗只新增复刻后的调用;嵌套复刻、旧缓存恢复与独立的相同调用均正确处理
  • 累计消耗新增「全部」统计范围
  • 新增渠道独立单价 providerPrices 与价格生效时间段 schedules;设置页、YAML 导出、本会话和累计统计统一使用这些价格
  • 修复逐笔舍入导致小额费用在模型分组中丢失的问题;价格区间校验时区、起止顺序和重叠,拒绝非法单价
  • 保存配置原地更新,保留会话投影和 TPS;未新增特殊渠道或非官方接口模板

0.4.2

  • 修复插件列表图标在深色主题下对比度不足:使用白色 ¥ 符号和灰色圆形描边,兼顾深浅背景
  • 更新兼容性、安装与升级说明,清理过时发布状态和已移除总开关的配置说明

0.4.1

  • 禁止额度 URL 内嵌凭证,遮罩旧配置返回;限制自定义响应体为 1 MiB,补齐短密钥脱敏
  • 官方域名优先识别国内 / 国际额度模板,修复 DeepSeek Base URL 带 /v1 时的余额地址
  • 设置页显示并标记缺失供应商,仍可编辑与关闭额度;补充旧配置、代理端点、复用阈值与 OpenCode 凭证路径说明,清理旧额度编辑代码
  • 插件列表名称与描述支持中文 / 英文,设置导航统一为「额度与消耗 / Credits & spend」;新增与设置导航一致的圆形 ¥ 图标
  • 补齐模板名称与介绍、默认额度与指标名称、阈值滑块、货币选项及无效 JSON 提示的中英文显示;用户填写的名称和上游错误内容保留原文
  • 移除插件内部额度总开关,统一由 DSH 插件列表控制启停;旧配置的顶层 enabled 被忽略,供应商及各展示项开关保留
  • 内置 holiday-cn 的 2026 年放假及补班数据,峰谷提示和费用估算排除中国节假日;日历手动维护,不自动联网更新
  • 更新 DSH 版本兼容声明,支持 0.2.0-rc.2 与 0.2.1-alpha.1 所在系列
  • Web / 官方桌面版共用插件代码,新增 deepseek-account 登录账号充值与赠送余额
  • 账号状态变化时清空余额缓存,阻止旧请求覆盖新账号余额;未登录时提示登录
  • 修复账号查询失败时前端可能继承默认 API Key 余额的问题,补充账号与前端回归测试
  • 修复新版宿主移除帮助图标导出后额度栏与悬浮气泡整体崩溃的问题,改用插件自带 SVG

0.4.0

迁移到 DSH Session v2(dsh 0.1.3-alpha.2 起);不再兼容旧版会话事件。

  • 本会话与累计消耗从 assistant/message / assistant/attempt settlement 读取精确 usage
  • 失败尝试和重试产生的实际 token 均计入费用,重试后不再覆盖上一笔消耗
  • TPS 取 settlement 压缩流里“首个输出 token → 最后一个输出 token”的时间窗,配 provider 精确 usage 算出该步平均速度,并保留最近一次数值;当前步尚未算出时显示上一步的数值并置为斜体,本步结算后换新值并恢复正体
  • 新增 deepseek-flash 内置定价
  • deepseek-flash / deepseek-v4-flash / deepseek-v4-flash-vision-exp 自 2026-09-10 12:00(北京时间)起按 V4.1 Flash 新表计费:CNY 低谷 0.02 / 1 / 4、高峰 0.04 / 2 / 8;USD 低谷 0.003 / 0.15 / 0.60、高峰 0.006 / 0.30 / 1.20
  • CNY / USD 两套价目均照官方页列出,不做汇率换算
  • 设置 → 模型单价新增「检查官方定价」:抓官方定价页与内置表比对,把差异列成候选,勾选后写入草稿;不自动改价,解析失败静默降级
  • 配置里保存的历史官方价仍按内置时间表重算;只有手改过的峰谷 / 单价才作为自定义覆盖
  • 没有精确价表的 DeepSeek 新模型按名字回退到默认定价:含 flash → 默认 Flash,含 pro → 默认 Pro,其它 deepseek* → 默认 Flash;本会话消耗卡片在模型名后标出黄色感叹号并提示所用回退定价
  • 完全没有可回退定价的模型(例如 glm)仍会列出,金额显示“无法计算”
  • 临时预览模型 deepseek-v4.1-flash-expires-on-0910 不再内置
  • 会话投影状态版本更新,旧缓存自动失效重折
  • 保存设置不再重挂投影
  • 移除旧投影 schema / view 字段和已移除的 dsh-client-runtime 注入
  • dsh-credentials peer dependency 更新到 0.1.3-alpha.2

0.3.1

阈值与查询频率全面改为供应商级独立配置,移除全局「阈值与刷新」设置卡。

  • 删除全局「阈值与刷新」卡片;阈值、刷新频率均在每个供应商的额度配置中设置
  • 百分比模式默认预警 / 告急改为 30% / 10%
  • 金额模式默认 CNY 10 / 5,USD 2 / 0.5
  • 旧配置遗留的 0 阈值视为未设置,自动回退默认值
  • 查询频率改为数字输入框,单位分钟,支持 0.5~60 分钟,默认 5 分钟
  • YAML 导出不再输出全局阈值 / 刷新字段,改为随 providerQuotas 保存
  • 会话消耗按「提供方 / 模型」区分,例如 opencode-go/deepseek-v4-flash
  • 旧会话投影缓存升级后自动失效重建,旧会话也能补上提供方前缀
  • 右下角累计消耗胶囊支持视口边界避障 / 贴边,关闭后不会跑出画面

0.3.0

额度查询重构为供应商级配置,并扩展自定义 HTTP、诊断和模型计价能力。

  • 将内置 deepseek / opencode-go 抽象为额度源适配器注册表
  • 支持自定义 HTTP / JSONPath 额度源:balance / usage / metric
  • 自定义 HTTP 支持 Cookie / Token / Basic / Header / Query / JSON / Form 鉴权、请求体与数值转换
  • 自定义指标支持直接读取、总量减已用量、百分比基准、重置时间、数组汇总、乘数和偏移
  • 测试连接可读取响应字段;请求失败时可查看并复制脱敏后的请求与响应诊断
  • 设置页改为以 DSH 供应商列表为主体,每个供应商可独立使用内置模板、复用另一供应商或自定义 HTTP
  • 模板匹配改为后台默认逻辑:匹配成功直接展示可编辑的内置模板,匹配失败进入自定义 HTTP;不再暴露全局查询模式或「自动识别」选项
  • 同一模板的多个供应商分别使用各自凭证和缓存,可配置多个 OpenCode Go 账号
  • 直接输入的敏感凭证写入 DSH credentials,页面和配置 API 不回显原值
  • 服务端与客户端统一按 kind 渲染,不再写死 opencode-go
  • 供应商子卡片独立标记未保存状态;改回原值后自动清除提示
  • 内置 deepseek-v4-flash-vision-exp 定价,恢复官方默认价不会删除自定义模型
  • 计价货币仅保留官方 CNY / USD 两套价格;修复旧 EUR 复用 USD 数值但标签错误的问题
  • V4 按工作日峰谷和周末全天低谷计价,本会话与累计消耗均按每笔请求发生时间计算
  • 更新供应商级额度配置、自定义 HTTP 和内置模板的高清截图

0.2.4

适配 dsh 0.1.1-rc.1 的新版会话投影接口。

  • 为本会话金额与实时 TPS 投影增加持久化状态 schema 和前端 wire 视图
  • 修复升级 dsh 后设置已开启但 TPS、本会话金额不显示的问题
  • 保留旧版投影字段,兼容较早版本的 dsh

0.2.2

该版本将设置页改成多张可折叠卡片,并更新了当时的界面截图。

  • 展示 / 额度查询 / 阈值与刷新 / 模型单价 / YAML 导出各一张卡,每张独立草稿和保存
  • 同一功能区两列排布,勾选框与标题同行
  • 提示文案缩短;底部条「共用一行」不再绑定第三方统计插件

0.2.1

悬停双栏卡片改成响应式:字号随卡片宽度缩放,窄窗口时两列改上下叠,主标题不再被挤换行。

0.2.0

适配官方设置页,不再用输入框旁边的齿轮。

  • 设置收进一级「额度」入口,排在侧栏最后;图标改为带 ¥ 的硬币
  • 可开关底部条、累计胶囊、悬停卡片
  • 底部条默认独立换行,可选与底部已有统计共用一行
  • 额度查询支持「跟随当前模型」或「自定义固定展示」

发布到 npm

此仓库通过 GitHub Actions 发布。工作流需要配置具有发布权限的 NPM_TOKEN 仓库 secret;普通分支推送不会发包,推送 v* 标签才会触发。

发布前同步 package.json 与 package-lock.json 的版本,运行测试和打包检查,提交并推送,再创建同版本标签。以 0.4.3 为例:

npm test
npm pack --dry-run
git tag -a v0.4.3 -m "Release 0.4.3"
git push origin v0.4.3

工作流执行 npm publish --provenance --access public。确认 Actions 成功及 npm 版本可查询后,再使用该版本的安装指令;同一版本不能重复发布。

验证

npm test
curl http://127.0.0.1:3080/query-credits
curl http://127.0.0.1:3080/query-credits/spend?range=today
curl http://127.0.0.1:3080/plugins/dsh-credits/client.js

开发

  • 服务端:src/index.js(ESM,零构建)
  • 浏览器:client/client.js(手写 __ModuleLoader__ 工厂)。改完需重启 dsh web
  • 测试:npm test(零依赖冒烟)

FAQ

Q: 插件怎么知道查的是谁的额度?
A: 插件先根据当前模型的 DSH 供应商 ID 找到它自己的 providerQuotas 绑定。内置模板默认复用该供应商保存的凭证;DeepSeek / OpenCode Go 自动模板还使用供应商的 Base URL,其他模板使用固定官方额度接口。自定义 HTTP 按页面选择使用直接凭证、DSH 供应商 Key、凭证引用或无鉴权。Key 不会发给浏览器。

Q: 状态灯规则?
A: 每个供应商使用自己的 warningThreshold / dangerThreshold。DeepSeek 按余额金额对比,OpenCode Go 按剩余额度百分比对比;未填写时使用该模式的默认值。🟢 ≥ 预警线;🟡 告急线~预警线;🔴 < 告急线或接口不可用。

Q: 切模型后底部读数会跟着变吗?
A: 会。插件按当前模型的 DSH 供应商 ID 读取它自己的 providerQuotas 绑定;没配置或单独关闭时不显示额度,不会回退到其它账号。

Q: “自动识别”去哪了?

A: 它现在只是后台默认逻辑,不再是页面选项。识别成功时会直接显示匹配到的内置模板,你仍可修改模板;识别失败时使用自定义 HTTP 配置。

Q: 一个自定义供应商能同时查询现金余额和代金券两个接口吗?

A: 当前不能。一个供应商绑定只发送一个 HTTP 请求,可以在同一个响应内配置多个指标或汇总数组;来自两个不同 URL 的数据暂时不能合并。

Q: 8 月 17 日峰谷价会自动切吗?
A: 会。北京时间 2026-08-17 00:00 之后,V4 Flash / Pro / Flash Vision Exp 在周一至周五(不含中国法定节假日)09:00–12:00、14:00–18:00 按高峰价;其余时段及节假日、周末(含补班)全天按低谷价。

Q: 9 月 10 日的 V4.1 Flash 新价会自动切吗?
A: 会。北京时间 2026-09-10 12:00 起 deepseek-flash / deepseek-v4-flash / deepseek-v4-flash-vision-exp 按 V4.1 Flash 新价计费。历史样本始终按该笔发生的时间点计价。

Q: 用了官方还没收录 / 不存在的模型(例如 deepseek-v5-flash、glm)会怎样?
A: DeepSeek 系新模型按名字回退到默认 Flash / Pro 定价,并在本会话消耗卡片里用黄色感叹号标出回退到了哪个价;完全无法回退的模型(例如 glm)仍会列出,金额显示“无法计算”。需要精确金额时可在设置里为对应模型补一条自定义单价。

Q: TPS 多久刷新一次?数字为什么有时候是斜体?
A: 每一步刷新一次,显示该步的平均输出速度(时间窗取压缩流里“首个输出 token → 最后一个输出 token”,不含收尾等待)。斜体表示“这不是当前这步的最终数值”——当前步还在生成、尚未算出时先显示上一步的数值并置为斜体,本步结算后换成新值并恢复正体。

Q: 官方调价了怎么办?
A: 设置 → 模型单价里有「检查官方定价」按钮:抓官方定价页与内置表比对,把有差异的项列为候选,勾选后写入草稿,保存前可以再核对。内置表本身会随插件版本更新。