🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

侧栏用量仪表 bjpd6/dsh-client-ui-usage-hud

DeepSeek Harness
bjpd630 天前有提交已提供中文文档扫描:含敏感能力

在侧栏常驻显示余额、消费与 Token 用量

30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/4 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add bjpd6/dsh-client-ui-usage-hud
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · browser
装得上吗
本站已在 dsh 0.2.1-rc.5 下真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 30 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件发起外部网络请求
查看扫描证据(共 4 处,展示前 4 条)
  • 读取本地文件
    lib/index.js:146
    names = await readdir(root);
  • 读取本地文件
    lib/index.js:156
    parsed = JSON.parse(await readFile(join(root, entry), "utf8"));
  • 发起网络请求
    lib/index.js:306
    response = await fetch(`${origin}${SUMMARY_PATH}`, {
  • 发起网络请求
    lib/client.js:200
    const response = await fetch(ROUTE, {
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 显示账户余额
  • 显示赠送余额
  • 显示累计消费与用量

DeepSeek Harness 侧边栏 HUD:账户余额、赠送余额、累计消费和 token 用量。

README

由 DeepSeek 最新模型翻译生成
dsh-client-ui-usage-hud 给 DeepSeek Harness (DSH) 用的侧栏账户 HUD:账户余额、赠送余额、累计消费、Token 用量,常驻在左侧边栏底部。 外观沿用深海女仆工坊皮肤(@smalltailqwq/dsh-client-ui-skin-maid-atelier):深海蓝 + 柔金 + 瓷白、Georgia 衬线、蕾丝描边玻璃浮层。它读取该皮肤自己发布的 CSS 变量,皮肤没启用时用同一套值兜底,所以两种情况都好看。 ┌──────────────────────────────────────┐ 侧栏底部触发按钮 → 🐋 ¥16.8287 │ 深海账户 · Token 用量 刷新 │ 14,096万 tok │ 账户余额 ¥16.8287 │ │ 赠送余额 ¥0.0000 │ │ Token 总用量 14,096万 17 会话 │ │ 最近一次用量 39.3万 tok T4 │ │ 未命中 173 · 命中 354,688 · 输出 285 │ │ 累计消费 ¥9.3329 │ │ 金额来自 DeepSeek 平台账户接口 │ │ 查看官方用量 → │ └──────────────────────────────────────┘ 侧栏收起时触发按钮缩成 34px 的圆形鲸鱼图标。
展开完整文档(README 剩余 1 节)
dsh-client-ui-usage-hud

给 DeepSeek Harness (DSH) 用的侧栏账户 HUD:账户余额、赠送余额、累计消费、Token 用量,常驻在左侧边栏底部。

外观沿用深海女仆工坊皮肤(@smalltailqwq/dsh-client-ui-skin-maid-atelier):深海蓝 + 柔金 + 瓷白、Georgia 衬线、蕾丝描边玻璃浮层。它读取该皮肤自己发布的 CSS 变量,皮肤没启用时用同一套值兜底,所以两种情况都好看。

┌──────────────────────────────────────┐
侧栏底部触发按钮 → 🐋 ¥16.8287 │ 深海账户 · Token 用量 刷新 │ 14,096万 tok │ 账户余额 ¥16.8287 │ │ 赠送余额 ¥0.0000 │ │ Token 总用量 14,096万 17 会话 │ │ 最近一次用量 39.3万 tok T4 │ │ 未命中 173 · 命中 354,688 · 输出 285 │ │ 累计消费 ¥9.3329 │ │ 金额来自 DeepSeek 平台账户接口 │ │ 查看官方用量 → │ └──────────────────────────────────────┘

侧栏收起时触发按钮缩成 34px 的圆形鲸鱼图标。

显示内容与数据来源

| 行 | 内容 | 来源 |
| 账户余额 | normal_wallets 按币种 | 平台 GET /api/v0/users/get_user_summary |
| 赠送余额 | bonus_wallets 按币种 | 同上 |
| 累计消费 | total_costs 按币种 | 同上 |
| Token 总用量 | 四个 token 桶之和 + 会话数 | 会话投影缓存 tokenUsage.totals |
| 最近一次用量 | 未命中 / 命中 / 输出 | 同上 tokenUsage.last |

所有金额都直接来自平台接口,没有任何估算,也不套用价目表。

为什么这个插件要自己去打平台接口

DSH 的账户服务确实会请求 GET /api/v0/users/get_user_summary,但它的解析器只投影两个字段:

balance: {
path: '/api/v0/users/get_user_summary',
parse: (value) => {
const parsed = summary.safeParse(value);
return {
status: 'ready',
value: parsed.data.normal_wallets,
bonusWallets: parsed.data.bonus_wallets, // total_costs 就丢在这里 }; }, },

平台文档也这么说:"Host projects only ... normal_wallets / bonus_wallets currency/balance strings; response tokens and other fields are discarded." 所以官方界面从来不显示累计消费 —— 数据是有的,被 DSH 丢掉了。

本插件的 host 半自己拿到平台凭据、请求同一个端点,并解析 total_costs。真实响应:

{"code":0,"data":{"biz_code":0,"biz_data":{
"normal_wallets":[{"currency":"CNY","balance":"16.8287497600000000"}],
"bonus_wallets":[{"currency":"CNY","balance":"0"}],
"total_costs":[{"currency":"CNY","amount":"9.3328969200000000"}]}}}

金额是十进制字符串,一直原样保留到格式化,不会因为二进制浮点丢精度。

一个值得知道的坑:凭据该用哪个接口

如果你要写类似的东西,这一点最容易踩。

deepseekAccount.resolveToken(url) 看起来是取请求凭据的正路,DSH 文档也把它描述为
"Host 消费者获得请求凭据的唯一途径"。但它的实现是:

async resolveToken(url) {
const destination = new URL(url);
if (destination.origin !== this.inferenceOrigin || /* ... /) return void 0;
// ...
}

inferenceOrigin 是 https://api.deepseek.com,也就是推理域名;而账户接口在 https://platform.deepseek.com。域名不匹配就返回 undefined,连错误都不抛 —— 表现出来就是"未登录"。

平台域名对应的正确接口是 getPlatformSession(),返回 { origin, token, userId, requestHeaders },并且"仅在已存授权的 issuer 与 platformOrigin 一致时导出该授权",还会带上 provider 自己持有的平台客户端头。本插件用的是它。

数据流

client.js ──GET /api/dsh/usage-hud──► lib/index.js
├─ deepseekAccount.getPlatformSession()
│ └─ GET platform.deepseek.com
│ /api/v0/users/get_user_summary
│ → 余额 / 赠送 / 累计消费 └─ <dshHome>/storages/session_projcache/sessions/.json record.rows.tokenUsage.val → 总用量 / 最近用量

Token 数取自持久化的投影缓存而不是活跃会话,所以冷会话与归档会话也计入。路由对响应信封(code / data.biz_code / data.biz_data)的处理与账户服务一致,同样处理 401 与 40003 失效路径,凭据失效时会调用 rejectToken。

浏览器侧拿不到任何秘密:token 只存在于 host 半,且路由会拒绝跨站请求。

环境要求

- DSH 已启用 deepseek-account 平台插件,并且登录了官方账户。API Key 模式下没有平台授权,金额行会如实显示不可用,而不是伪造 0。
- 无第三方运行时依赖,无构建步骤 —— lib/*.js 是手写、可直接执行的 JavaScript。
- 亮色与暗色主题都适配。

安装

DSH bundle 就是 package.json 里声明了 dsh.bundle.patch 的包;DSH 会把它的 patch 层组合进 profile。

方式 A — 插件管理器(走 pnpm 与 git)

dsh plugin --profile desktop add <本仓库地址>

DSH 默认会启用新装的 bundle,重启一次 DSH 即可。

方式 B — 手动(不需要 pnpm / git)

1. 把本目录复制进 profile 的 node_modules:

<dshHome>/profiles/<profile>/node_modules/dsh-client-ui-usage-hud/

2. 把包名追加到 profile 的 package.json:

{
"dsh": {
"profile": {
"bundles": [
"@deepseek-ai/dsh-base",
"@deepseek-ai/dsh-web-app",
"dsh-client-ui-usage-hud"
]
}
}
}

3. 重启 DSH。加载器会应用本 bundle 的 cordis.patch.yml(插入行 ui-usage-hud),并把 lib/client.js 提供给浏览器。

4. 刷新页面。

让 host 半热重载

DSH 默认监听目录为空,改 lib/index.js 需要重启。想免重启迭代,把这个插件目录加进 profile cordis.patch.yml 的 hmr 行:

- id: hmr
name: "@deepseek-ai/dsh-hmr"
config:
root:
- "<dshHome>/profiles/<profile>/node_modules/dsh-client-ui-usage-hud"

lib/client.js 本来就被 dsh-client-hmr 轮询,改完刷新页面即可。

目录结构

package.json # dsh.bundle.patch + dsh.client (platform: web)
cordis.patch.yml # insert: ui-usage-hud
lib/index.js # host 半:GET /api/dsh/usage-hud 路由 lib/client.js # 浏览器半:侧栏挂件 tests/client-test.mjs # 用最小 React hooks shim 真实渲染挂件 tests/host-e2e.mjs # 驱动真实路由 handler 并调平台接口

浏览器半是 DSH 的 lazy-CJS 形态:以
window.__ModuleLoader__.load({ id, factory }) 注册自己,导出 apply 与 inject。
它只使用平台共享运行时(require("react")),不改动 [data-usage-hud] 之外的任何
东西,销毁时会移除自己的样式表。

验证

没有构建步骤,测试直接跑发布的文件:

渲染触发按钮与浮层,断言五行内容与格式化
node tests/client-test.mjs lib/client.js

用桩账户服务驱动真实路由 handler,并真的调用平台接口
node tests/host-e2e.mjs ./lib/index.js

tests/client-test.mjs 按 DSH 的真实方式加载 bundle,提供最小 React hooks shim,展开浮层并打印渲染出的文本。tests/host-e2e.mjs 桩化 resolveToken(对平台域名返回空,与真实行为一致)与 getPlatformSession(返回已存授权),然后报告解析出的金额。

说明与已知限制

- 金额行只反映官方 DeepSeek 账户。第三方 provider 路由下不可用,此时浮层会给出平台用量页链接。
- 挂件每 20 秒刷新一次,页面重新可见时也会刷新,因此会周期性请求账户接口。
- total_costs 是平台给出的值,本插件不按周期切分;要看每天明细请去平台用量页。
- 金额最多显示 4 位小数(超过 1000 时 2 位),不足 0.01 显示为 <0.01。

许可证

MIT,见 LICENSE。

与 DeepSeek 官方无关联。"DeepSeek Harness" 与深海女仆工坊皮肤归各自作者所有。
预览分享卡片长什么样 ↓bjpd6/dsh-client-ui-usage-hud
分享 · DeepSeek Harness Hub
bjpd6/dsh-client-ui-usage-hud

在侧栏常驻显示余额、消费与 Token 用量

这是你的仓库?认领条目

回到顶部