dsh-usage-footer
一个给 DeepSeek Harness Web 界面加底部状态条的插件:余额、赠送额度、本次打开消耗、消耗速度(元/秒),无需改 DSH 本体。

在 DSH Web 窗口底部(shell.bottom 槽位)常驻一条状态条,顺序为:
↻ · 余额 · 赠送 · 本次打开消耗 · 消耗速度 · 最近刷新时间
安装
见 INSTALL.md。最省事的方式:在 Harness 里让 agent 用 plugin_manager 的 install_bundle,target 填 https://github.com/Roccn/dsh-usage-footer.git;装完按 Ctrl+R 刷新页面即可,不必重启应用。
- ↻:手动刷新按钮,16×16 的圆角方框(0.5px 边框、4px 圆角、悬停时 12% 当前色填充),高度与 12px 正文的文字盒等高。点击后立刻重读余额并重新采样会话,按钮会短暂变淡表示进行中;也可用键盘 Enter / 空格触发。
- 余额:DeepSeek 账户剩余额度与币种,来自已有的
account/getBalanceRemote(与「设置 → 账户」同一数据源)。账户可能有多个币种钱包,按币种分别汇总后取总额最大的那个显示(符号随币种:CNY 用¥、USD 用$);否则一个排在前面、余额为 0 的 CNY 钱包会把真实额度盖住,整条永远是 0。 - 赠送:赠送钱包余额合计,> 0 时显示。
- 本次打开消耗:打开本窗口时第一次读到的(充值余额 + 赠送余额)减去当前两者之和;充值显示为
+。因为 DeepSeek 抵扣先走赠送额度,只看充值余额会一直是 0——第一版就踩了这个坑。 - 消耗速度:所有正在运行会话的 token 增量折算成人民币,单位 元/秒,取近 2 分钟平均。
消耗速度怎么算
每 5 秒调
session/list,只取running === true的会话,累加它们的整段日志 token 用量 (uncachedInputTokens/cacheReadTokens/cacheWriteTokens/outputTokens)。与 2 分钟窗口内最早一次采样求差,得到 Δtoken / Δt。
按 deepseek-flash 单价折算(元 / 百万 tokens):
时段 缓存命中输入 缓存未命中输入 输出 高峰 0.04 2 8 空闲 0.02 1 4 高峰 = 北京时间周一至周五 9:00–12:00、14:00–18:00,其余为空闲。价格来源:https://api-docs.deepseek.com/zh-cn/quick_start/pricing/。
如果账户钱包不是 CNY(例如 USD),用
CNY_PER_CURRENCY里的汇率折算成钱包币种,使「消耗速度」与「余额」同为$或同为¥。当前常量:USD = 6.67(中间市场汇率,2026-11-04 查自 wise.com)。汇率漂移后改client.js顶部这个常量即可。
「消耗速度」的悬浮提示:首行是「当前时段价格」,按系统时间取高峰价或空闲价,写成 每百万token(命中:X元 未命中:X元 输出:X元);非 CNY 账户会多一行折算说明;其后按会话拆分——正在运行的会话数,以及每个会话各自的元/秒与 tok/s;没有会话在跑时写明「当前没有正在运行的会话」。
已知口径限制:
- 金额显示对齐 Platform Web 的规则:两位小数、千分位分组、正数按分截断(
1.6999显示1.69,不是四舍五入的1.70),负数四舍五入且最小 0.01,正数不足一分显示<0.01。这样和「设置 → 账户」里的数字逐位一致。 cacheWriteTokens按「未命中」单价计费(平台不单列缓存写入价)。- 中国法定节假日未建模,按高峰计价。
- token 用量是按步上报的,所以速率是台阶式的,用 2 分钟窗口平滑;无运行会话时显示
¥0.00。
刷新
- 余额每 30 秒轮询;窗口获得焦点、页面可见性变化、
hashchange时立即刷新。 - 消耗速度每 5 秒采样。
- 余额没有推送接口,所以「实时」= 轮询,不是逐笔流水。
- 基线存在
sessionStorage的dsh-usage-footer:<path+search+hash>(当前是dsh-usage-footer:/),格式为 v2(同时记录充值余额与赠送余额)。sessionStorage随窗口销毁:关闭应用再打开会从 0 重新计,页面内 Ctrl+R 刷新则保留当前计数。sessionStorage不可用时退回内存基线。
安装状态
以 junction 形式装进 ~/.dsh/profiles/desktop/node_modules/@local/dsh-usage-footer,
并在 ~/.dsh/profiles/desktop/cordis.patch.yml 末尾追加:
- insert:
- id: usage-footer
name: "@local/dsh-usage-footer"
卸载
删除 cordis.patch.yml 末尾那段 insert,并删掉 node_modules/@local/dsh-usage-footer 链接。
注意
CLIENT_VERSION硬编码为0.2.1-rc.5,仅用于账户接口的客户端标识头;DSH 升级后如接口校验变严,需要同步改这个常量。- 客户端
inject必须同时声明remote与remote.account/remote.session:只写后者时访问ctx.remote会抛cannot get property "remote" without inject,而桌面端 web boot 审计会把它当成致命错误,导致整个窗口打不开。
No comments yet. Be the first to write one.