@kidli1412/dsh-session-cost: View session costs and balance in real-time on the DSH Web stats panel

前言

用 DSH(DeepSeek Harness)的 Web 客户端跑会话时,输入框下方的自带统计行只显示轮次、时长和 token 数。这一轮到底花了多少钱,要去官方平台对账才知道;账户余额还剩多少,平时也不会专门盯着,往往等到请求因余额不足失败才察觉。

@kidli1412/dsh-session-cost 解决的就是这两个问题:把本次会话的 Token 费用估算(按模型逐条 CNY 计价)与 DeepSeek API 余额,并入自带统计行。下面介绍它的实现、安装与配置。

这是什么

@kidli1412/dsh-session-cost 是 KIDLi1412 维护的 DSH Web 客户端插件(manifest 中 client.platform: web),MIT 许可证,当前版本 0.1.9。它属于 DSH「一切皆插件」生态里的社区作品。

插件分两端:

1、服务端:GET /api/session-cost/summary?session=<id> 增量折叠会话事件并按模型计价;GET /api/session-cost/balance 查询 DeepSeek 余额;同时注册 session-cost settings namespace 供配置卡读写。

2、浏览器端:注册 conversation.composer.dock 槽位,把费用/余额段追加进自带统计行的 DOM,并在设置页注册一张插件配置卡片。

核心功能

会话费用估算

费用在服务端按模型逐条计价:先从会话事件日志折叠出每个模型的输入/输出/缓存命中 token(语义与 dsh-token-metertokenUsage 投影一致),再按 lib/cost.js 里的 CNY 单价表计算。一个会话里混合多个模型时,各模型分别计价,不会笼统取平均。

费用每 30 秒刷新一次,token 用量变化后也会自动触发刷新。悬停可查看分模型明细,跨多个计价时段时会显示高峰/空闲/旧价的费用拆分。

DeepSeek 余额查询

余额复用官方接口 GET {baseURL}/user/balance,凭据经 DSH 的 credentials 缝解析。查询带 2 分钟内存缓存和单飞防抖,每 5 分钟刷新一次;?refresh=1 可强制绕过缓存。悬停显示余额构成(充值/赠送)。

显示与交互

费用/余额段追加到自带统计行同一行。DSH rc.7 起自带统计行有 748px 宽度上限加省略号截断,追加段会被裁掉;插件会自动把统计行放宽到容器全宽并取消裁剪,效果同 zh_pro 的「统计全显示」,但不依赖它。

⟳ 按钮手动刷新,强制查询上游,成功后短暂显示「已更新 HH:MM」。悬停气泡大致如下:

本会话费用估算: ¥0.1234
  deepseek-v4-flash · 输入 12,345 tokens · 输出 1,234 tokens · ¥0.0152
余额: ¥36.44
  充值余额: ¥30.00
  赠送余额: ¥6.44
更新于 10:32
费用为估算值:token 用量来自会话日志,单价见官方定价页(…)。

定价与估算

默认单价表取自官方定价页中文版(2026-08-17 起生效),单位为 CNY / 百万 tokens:

模型 输入(缓存未命中)空闲 / 高峰 输入(缓存命中)空闲 / 高峰 输出 空闲 / 高峰
deepseek-v4-flash ¥1.5 / ¥3.0 ¥0.05 / ¥0.10 ¥4.5 / ¥9.0
deepseek-v4-flash-vision-exp ¥1.5 / ¥3.0 ¥0.05 / ¥0.10 ¥4.5 / ¥9.0
deepseek-v4-pro ¥4.5 / ¥9.0 ¥0.15 / ¥0.30 ¥13.5 / ¥27.0
deepseek-chat(V3 遗留,默认) ¥2(平峰) ¥0.5 ¥3
deepseek-reasoner(V3 遗留,默认) ¥4(平峰) ¥1 ¥16

V4 模型实行峰谷定价:高峰时段为北京时间工作日 9:00–12:00、14:00–18:00,高峰价为空闲价的 2 倍;2026-08-23 0 时起周末全天按空闲价计费。插件按每条 usage 样本的事件时间归属时段分别计价;2026-08-17 0 时之前的样本按旧的平峰价(LEGACY_PRICING)计。

两点处理值得注意:

  • cacheWrite 没有 DeepSeek 等价项(上下文缓存自动命中计费),默认按缓存未命中输入价计(分时段),避免低估。
  • V3 遗留模型未列入官方页面,保持最后已知的平峰价。

价格变动后,可以更新 lib/cost.jsDEFAULT_PRICING,也可以通过插件配置 pricing 覆盖,支持平峰格式或分时段格式:

# ~/.dsh/settings.yaml 或 profile 插件配置
session-cost:
  pricing:
    deepseek-v4-flash:
      input: 1
      cacheRead: 0.02
      cacheWrite: 1
      output: 2
    # 或分时段(offpeak/peak 各自覆盖,未给字段继承默认):
    # deepseek-v4-pro:
    #   offpeak: { input: 4.5, output: 13.5 }
    #   peak: { input: 9, output: 27 }

安装与启用

从 npm 安装:

dsh plugin --profile web add @kidli1412/dsh-session-cost

从 GitHub 安装:

dsh plugin --profile web add github:KIDLi1412/dsh-session-cost

本地开发用链接安装,改动即时生效:

dsh plugin --profile web add link:path/to/dsh-session-cost

安装后重启 dsh web,浏览器硬刷新(Ctrl+Shift+R)。经过上面的步骤,打开任意会话,自带统计行末尾就能看到费用与余额。移除:

dsh plugin --profile web remove @kidli1412/dsh-session-cost

设置项

设置入口:设置 → 插件 → 插件配置 → 会话费用显示。

  • 低余额阈值:默认 10 元,余额低于该值显示红色,达到或高于时显示黑色。配置经 session-cost settings namespace 持久化到 ~/.dsh/settings.yaml,即时生效。
  • 0.1.1 及更早版本的 localStorage 配置会在首次加载时自动迁移。
  • 0.1.5 起移除了「独立状态栏」显示方式(统计栏下方单独一行),只保留并入统计栏,旧配置里的 displayMode 键会被忽略。

兼容性与安全

兼容性方面:

  • manifest 通过 dsh.compatibility.dshReleases0.1.2-alpha.40.1.2-alpha.50.1.2-rc.1 逐项声明为 compatible
  • Node 要求 ^22.19.0 || >=24.0.0(与 DSH 一致);dsh-market 显示的宿主要求为 engines.dsh: ^0.1.2-rc.1
  • 0.1.8 适配了 DSH 0.1.2:rc.1 起 live session 不再携带 .events 数组,插件改为读 session.seq、逐条读 session.eventAt(seq),与官方 dsh-token-meter 的读法相同。

安全方面:

  • 两个端点均为 loopback-only 精确路由(peer socket 地址 + Host 双重校验),浏览器同源调用。
  • API Key 不落盘:请求时经 credentials 解析 llm-deepseek 命名空间的 apiKeyEnv(默认 DEEPSEEK_API_KEY)。
  • 余额缓存仅存内存,TTL 2 分钟。

适用场景与注意

适合用 DSH Web 客户端直连 DeepSeek API、想随时掌握会话花费与账户余额的个人使用者和智能体开发者。

使用前留意两点:

1、费用是估算值。token 用量来自会话日志中 provider 上报的 usage 样本,单价表是写死的默认值,官方调价后需更新 DEFAULT_PRICING 或用 pricing 配置覆盖。

2、插件以当前 dsh 进程的权限运行,能读取会话日志、走宿主的凭据缝。安装任何第三方插件前,建议先检查源码与许可证;本插件为 MIT。

整体来看,这个插件把「花了多少、还剩多少」放进了每次会话都能看到的位置,配置成本只有一条安装命令。项目源码与文档见 GitHub:https://github.com/KIDLi1412/dsh-session-cost

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

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

Xiaoye