
DeepSeek Harness(DSH)是一只住在 DSH 界面右下角的小海豚,它会盯着DeepSeek账户余额。QQ弹弹,支持拖拽吸附、左侧吸附翻转、数字滚动动画,界面自动启用,建议直接喊来你的d
DeepSeek Harness(DSH)是一只住在 DSH 界面右下角的小海豚,它会盯着DeepSeek账户余额。QQ弹弹,支持拖拽吸附、左侧吸附翻转、数字滚动动画,界面自动启用,建议直接喊来你的d
DeepSeek Harness(DSH)Web 界面右下角的常驻挂件:小鲸鱼气泡图 + DeepSeek API 余额 + 今日已用 + 每轮对话消耗,并且泡泡内容可以完全自定义(点击序列、模块化排版、并列加权出泡、随机语句/随机图片)。标准 DSH bundle 插件,dsh plugin 一键安装,无需任何会话令牌。
.dshw-usage-archive.json);金额按 8 位小数记账、显示保留两位{cost} 引用),入口:菜单 → 每轮消耗提示 → 「自定义提示」deepseek-flash → DeepSeek-V4.1-Flash,旧名标注"同 V4.1 Flash"){cost});内容、自动关闭秒数与任务结束音效都在菜单 → 每轮消耗提示 → 「自定义提示」里设置assets/minecraft-exp-orb.wav)与 A(assets/task-end-a.wav),也可选任意片段或音效组petpet、money1 两张图,也可上传 png/gif,供图片/随机图片模块使用除内置的 DeepSeek 余额外,可在「小鲸鱼记账 → 模型」里添加任意厂商;每个模型独立配置余额预警 / 今日预算 / 额度:
probeUrl 探活验证 key,余额显示「—」,今日已用按会话事件估算):硅基流动(CN / EN)、火山方舟 Ark、OpenAI、Anthropic Claude、Google Gemini、xAI Grok、Groq、Mistral AI、Together AI、Fireworks AI、DeepInfra、Cerebras、阿里云百炼(通义千问)、百度千帆(文心)、腾讯混元、讯飞星火、魔搭 ModelScope、本地模型(Ollama / LM Studio)OPENROUTER_API_KEY);删除模型会连带清理该模型的额度模块与设置a.b[0].c 与 scale 乘数);点「测试连通性」可先验证 keyinput + cacheRead + output,推理 token 已含在 output 内,跨天保留),也可切换手动填写;支持「不重置 / 每日 / 每月」kind:'quota' 模板):直接读厂商官方接口的「窗口已用% + 重置时间」,与上面按会话统计的额度互补。支持一个接口返回多个窗口(目前 OpenCode Go 为 5h / 周 / 月三窗口),逐窗口展示已用百分比与各自的紧凑重置倒计时;模板用 quota.json.windows 描述各窗口的字段路径{balance}、{today}、{quota}、{quota_used}、{quota_left}、{quota_total}、{quota_reset}说明:并非所有厂商都提供「用 API key 查余额」的接口。硅基流动的余额接口已被官方下线(2026-08-11 更新公告:
/user/info自 2026-08-14 起停止服务,「后续将适时提供替代 API」,截至发版仍未见替代接口),火山方舟的余额 / 用量与阿里云百炼 / 百度千帆 / 腾讯混元一样属于各家云平台 AK/SK 签名的 OpenAPI,OpenAI / Anthropic / Gemini / xAI / Groq / Mistral / Together / Fireworks / DeepInfra / Cerebras 则根本没有公开的余额查询接口 —— 这些模板统一是「无余额接口 + 探活验证 key」,今日已用按会话事件估算。厂商的订阅额度接口(智谱 / Kimi Coding / MiniMax Coding / OpenCode Go)只对订阅套餐账号有效:Token 资源包账号调用智谱接口会返回「当前用户不存在coding plan」,这种情况请用上面的「额度(订阅 / 资源包)」自动统计。模板只提供默认值:选完模板后可以随意改写接口地址与字段路径;留空的字段会继续沿用模板默认值(不会因为留空而失效)。
⚠️ 限制:Codex 支持目前只是部分接口适配,本挂件不能安装到 Codex 里(它是 DSH Web 插件,Codex 仅作为数据来源被读取);订阅窗口没有真实订阅样本可验证,遇异常欢迎反馈。
挂件可以直接读本机 Codex 的会话日志统计 token 用量 —— 因此不限于 DSH 内部,你在 Codex CLI / 桌面版里跑的消耗也能看到。
$CODEX_HOME/sessions/YYYY/MM/DD/rollout-*.jsonl(含 archived_sessions/),明文 JSONL;只读本机文件、不联网、不需要密钥,也不会写入 ~/.codextotal_token_usage)的差值累加,天然避免同一轮多条记录被重复计数;模型归属由 turn_context.payload.model 判定;按天 + 模型聚合,带增量缓存($DSH_HOME/.dshw-codex.json,只存聚合与文件偏移)Codex 今日 x · 近7天 y tokens;模型子菜单显示今日 / 本月 / 累计 / 近7天与会话文件数;「测试」按钮直接返回本地统计rate_limits 带窗口快照,有 ChatGPT 订阅时子菜单自动追加 5h 已用 x% · 2小时30分后重置 | 周 已用 y% · 3天后重置(字段名已做容错;API-key 计费或无订阅时该行不显示)…
运行时数据(都放在 $DSH_HOME,默认 ~/.dsh;本机开发环境为 D:\TestBox\deepseek\):
.dshw-size.json
挂件外观与开关(缩放、音量、音效组、峰值样式、吸附相关等)
.dshw-usage.json
记账账本 + 按日余额观测/校正摘要 + 用量设置(任务结束音、余额预警、今日预算、每轮消耗提示内容)
.dshw-usage.json.before-recharge-fix.bak
旧格式账本备份(0.3.1 首次写入旧账本前自动创建;已存在则不覆盖)
.dshw-turn.json
每轮消耗的 seq(避免热重载后前端把新轮次当旧轮次)
.dshw-bubble.json
自定义泡泡配置(点击序列 + 模块库 + 点按角色推进队列开关)
.dshw-api.json
自定义 API 模型注册表(厂商 / 凭据名 / 接口字段 / 自定义单价 / 额度与用量累计;不含密钥)
.dshw-usage-archive.json
账本归档(超过保留期的逐轮明细与逐日汇总;明细 90 天/2 万条、逐日 365 天)
.dshw-codex.json
Codex 本地会话统计缓存(按天/模型聚合 + 文件偏移;不含任何凭据)
whale-roles/
自定义角色图 + roles.json 索引
whale-audio/
音频片段 <id>.wav + audio.json 索引(音效组/片段)
whale-bubble-imgs/
泡泡图库图片 + bubble-imgs.json 索引
适用于别人直接发给你一个 zip,或你手上已有一份解压好的插件目录(目录里应有 package.json、cordis.patch.yml、lib/、assets/、README.md)。
# 1) 若是 zip:先解压到一个固定、以后不会移动或删除的目录(不要放临时目录/下载目录)
# 例:D:\Plugins\dsh-whale-widget
# 要安装的是「包含 package.json 的那一层」,不要多套一层同名目录
# 2) 确认关键文件都在(缺 assets/ 会导致没图、没声)
Test-Path "D:\Plugins\dsh-whale-widget\package.json",
"D:\Plugins\dsh-whale-widget\lib\index.js",
"D:\Plugins\dsh-whale-widget\assets\whale-widget.js"
# 3) 如果之前从 GitHub / npm 装过同名插件,先卸载避免版本冲突
dsh plugin --profile web remove dsh-whale-widget
# 4) 用绝对路径安装(路径含空格要加引号)
dsh plugin --profile web add link:D:\Plugins\dsh-whale-widget
说明:
link: 是软链安装:源目录里的文件改了立即生效;但安装后不能移动/重命名该目录,移动了要重新 add 一次dsh plugin --profile web add file:D:\Plugins\dsh-whale-widget(此后源目录再改不会同步,需重新 add)assets/minecraft-exp-orb.wav、assets/task-end-a.wav 等内置资源;删掉 assets 里的文件会让对应功能静默降级(无图/无声)dsh web,再 F5 刷新浏览器无需本地克隆,一条命令安装:
dsh plugin --profile web add github:MeteorNOX/DeepSeek-Balance-Whale-Widget
说明:
$env:http_proxy="http://<ip>:<port>"; $env:https_proxy="http://<ip>:<port>"; $env:all_proxy="socks5://<ip>:<port>"; dsh plugin --profile web add github:MeteorNOX/DeepSeek-Balance-Whale-Widget
dsh web,再 F5 刷新浏览器在仓库根目录(package.json 所在目录)执行:
dsh plugin --profile web add link:.
说明:
dsh plugin 会把参数转发给 pnpm,并在成功后自动把 dsh-whale-widget 加入 dsh.profile.bundleslink:. 表示链接当前目录(仓库根目录本身就是插件包)。如果仓库在别处,用绝对路径:dsh plugin --profile web add link:D:\你的路径\DeepSeek-Balance-Whale-Widget
link:.\dsh-whale-widget——仓库里没有 dsh-whale-widget/ 子目录,这样会安装成普通依赖而非插件dsh web,再 F5 刷新浏览器add link:<新路径>;若提示冲突,先 dsh plugin --profile web remove dsh-whale-widget 再 adddsh plugin --profile web add dsh-whale-widget
…
只需一个凭据:
DEEPSEEK_API_KEY(必需):DeepSeek API 密钥,用于拉取余额(GET https://api.deepseek.com/user/balance)。在 DSH 凭据服务里配置(凭据管理界面 / .dsh/.credentials.yaml)。不需要
DEEPSEEK_PLATFORM_TOKEN。早期版本的"实时·令牌"模式已下线,今日已用统一由小鲸鱼记账(余额差 + 会话事件)计算,零令牌开箱即用。
添加自定义模型时,还会按需用到各自厂商的凭据名(都可不配,用到哪个配哪个):
凭据名 用途OPENROUTER_API_KEY
OpenRouter 余额(/api/v1/credits)
MOONSHOT_API_KEY
Kimi / Moonshot 大陆站余额(人民币)
MOONSHOT_INTL_API_KEY
Kimi / Moonshot 国际站余额(美元,独立账号体系)
SILICONFLOW_API_KEY
硅基流动 /v1/models 探活
ARK_API_KEY
火山方舟 /api/v3/models 探活
ZHIPU_API_KEY
智谱(订阅额度接口 / Coding 端点)
OPENCODE_GO_API_KEY
OpenCode Go 订阅额度(opencode.ai/zen/go/v1/usage,鉴权为 Authorization: Bearer <key>)
CUSTOM_API_KEY
自定义 HTTP / OpenAI 兼容中转站
⚠️ 自定义模型面板里的「凭据名」决定密钥写进哪个 ref。换厂商时请确认这一栏跟着模板变了,否则新密钥会写进上一家厂商的凭据名里(覆盖掉原来的 key)。v679 起新增模型会自动跟随模板。
dsh plugin --profile web remove dsh-whale-widget
如果你之前按旧方式手动安装过(复制 whale-balance.mjs + 改 cordis.patch.yml),先清理:
$web = "$env:USERPROFILE\.dsh\profiles\web"
Remove-Item "$web\whale-balance.mjs" -ErrorAction SilentlyContinue
Remove-Item "$web\whale-balance.cjs" -ErrorAction SilentlyContinue
Remove-Item "$web\DSniang1.png" -ErrorAction SilentlyContinue
Remove-Item "$web\DSniang02.png" -ErrorAction SilentlyContinue
然后编辑 $web\cordis.patch.yml,删除这段旧补丁:
- insert:
- id: whale-balance-widget
name: ./whale-balance.mjs?v=1
如果里面只有这段,直接改成:
[]
清理后再执行上面的安装命令。
dsh --profile web --dump-config | Select-String -Pattern "whale"
curl http://127.0.0.1:3080/dsh-whale/balance.json
curl http://127.0.0.1:3080/dsh-whale/size.json
curl http://127.0.0.1:3080/dsh-whale/widget.js
curl http://127.0.0.1:3080/dsh-whale/image.png
curl http://127.0.0.1:3080/dsh-whale/audio.json
/dsh-whale/balance.json → 200 JSON,含 {ok:true, totalBalance, currency, todayUsage}/dsh-whale/size.json → GET 返回配置;PUT 写入/dsh-whale/widget.js → 200 JS(前端挂件本体)/dsh-whale/image.png → 200 image/png/dsh-whale/audio.json → 200,含 groups / fragments(其中内置片段 exp_orb = Minecraft·经验球、end_a = A)/dsh-whale/audio-fragment.wav?id=exp_orb → 200 audio/wav(内置任务结束音;无需用户导入)/dsh-whale/audio-fragment.wav?id=end_a → 200 audio/wav(内置任务结束音 A)⚠️ 关于上面这些
curl:全部 21 个/dsh-whale/*路由现已接入 DSH 浏览器信任栅栏(connection.requestRejection)。 因此不带会话凭据的裸curl会返回 401(伪造Host头则是 403)—— 这是预期行为,不是接口坏了。 想验证接口是否存活,看返回 401/403 即说明路由已注册且栅栏在工作;在浏览器里访问同一条路径(带会话)才是 200。
dsh --profile web --dump-config 里能看到 dsh-whale-widget;重启 dsh web 后 F5。assets/ 完整(DSniang1.png、*.mp3、minecraft-exp-orb.wav 等);缺失时相关功能静默降级。--:先等一次成功的余额观测;统计从该观测时刻开始,起点之前的消费不在此区间内。暂无开放 Issues,或尚未同步最近议题。