在侧栏常驻显示余额、消费与 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
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 30 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
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" 与深海女仆工坊皮肤归各自作者所有。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
bjpd6/dsh-client-ui-usage-hud
在侧栏常驻显示余额、消费与 Token 用量
相关插件 · 浏览器
智能体插件框架deepseek-ai/deepseek-harness
DeepSeek Harnessdsh是由 DeepSeek AI 开发的开源 agent harness智能体框架。
★ 270,422已汉化DSH
71.9
多设备 Agent 看板YaoApp/yao
✨ 所有 Agent 和工作区集中管理,覆盖你的每一台设备。任务看板追踪进度,桌面端、移动端、浏览器、API…
★ 8,147已汉化DSH
71.2
可扩展侧边栏工作台omdsh-dev/DSH-better-sidebar
DSH 的双工作台:原生右侧栏 + 自绘底部面板,并把 ctx.betterSidebar 服务开放给所有插件
★ 4,761已汉化DSH
71.1
浏览器自动化桥Tencent/BrowserSkill
你的 Agent。你的浏览器。连接,就能协作。
★ 9,967已汉化DSH
71
AI 小说创作工作台EthanYoQ/AI-Novel-Writer
AI 小说作家 / AI Novel Writer
★ 1,591已汉化DSH
70.7
智能体浏览器引擎platonai/Browser4
DeepSeek Harness 集成
★ 1,175已汉化DSH
70.4
这是你的仓库?认领条目