Claude Code 用 DeepSeek 的人,都有一个 HUD 空白要填
项目在这 → github.com/limeiwang/claude-hud
feat/deepseek-balance分支
Claude HUD 这个插件挺好用的——上下文用量、工具调用、Agent 状态都在底下那条状态栏上。但我用不了,因为我模型接的是 DeepSeek:
ANTHROPIC_BASE_URL=https://api.deepseek.com/anthropic
ANTHROPIC_AUTH_TOKEN=sk-xxxx
协议兼容没问题,跑 Claude Code 一切正常。问题是 HUD 的用量数据从 stdin 的 JSON 里读,DeepSeek 不回传 rate_limits 和 usage,那块就一直空着。
官方 claude-hud 不可能去对接 DeepSeek 的余额接口,跟 Anthropic 又没关系。理解归理解,但每天看着空一块还是有点烦。
怎么搞的
翻了下源码,加个 fallback 就行。DeepSeek 有个 /user/balance 接口,传 API Key 返回余额。在 HUD 拿不到 stdin 数据时,去拉余额显示出来。
先判断是不是 DeepSeek——看 ANTHROPIC_BASE_URL 里有没有 "deepseek",没有就跳过:
1function isDeepSeekEndpoint(): boolean {
2 const baseUrl = process.env.ANTHROPIC_BASE_URL?.trim()
3 if (!baseUrl) return false
4 return /deepseek/i.test(baseUrl)
5}然后调接口。一开始还担心 DeepSeek 的 API 要不要额外鉴权,试了一下发现就是标准 Bearer token,直接调就行:
1async function fetchBalanceLabel(apiKey: string): Promise<string | null> {
2 const response = await fetch('https://api.deepseek.com/user/balance', {
3 headers: { Authorization: `Bearer ${apiKey}` },
4 signal: AbortSignal.timeout(5000),
5 })
6 if (!response.ok) return null
7 const data = await response.json()
8 // balance_infos[0].total_balance
9 // 返回 "Balance ¥xxx.xx" 或 "$xxx.xx"
10}5 秒超时,挂了就算了,不影响 HUD 其他东西。
缓存倒是想了一下。HUD 每 300ms 刷新一次,每次都调接口肯定不行。写了个文件缓存扔到 ~/.claude/plugins/claude-hud/.deepseek-cache.json,5 分钟内不重复请求。
最后在原有用量的获取链里加了一步,就一行代码:
1usageData = deps.getUsageFromStdin(stdin)
2if (!usageData) {
3 usageData = (await deps.getDeepSeekUsage()) ?? null
4}
5if (!usageData) {
6 usageData = deps.getUsageFromExternalSnapshot(config, deps.now())
7}拿到余额填进 UsageData.balanceLabel,HUD 自己会展示。最终效果就是状态栏上多了个 Balance ¥99.99。
整个文件 130 行,大部分是类型定义和缓存读写。
安装步骤
DeepSeek 用户想试试的话:
1# 1. 先装官方版完成注册
2/plugin marketplace add jarrodwatts/claude-hud
3/plugin install claude-hud
4/claude-hud:setup
5
6# 2. 替换成我的 fork
7cd ~/.claude/plugins
8git clone -b feat/deepseek-balance https://github.com/limeiwang/claude-hud.git
9cd claude-hud && npm install
10
11# 3. 改 statusLine 路径
12# ~/.claude/settings.json 里找到 statusLine.command
13# 从 cache/ 目录改成 plugins/ 目录有个坑要注意:装完检查一下 statusLine.command 指向的是 plugins/claude-hud/dist/index.js,不是 cache/ 下那个官方版。我第一次发给朋友就栽在这——他说装完没效果,查了半天发现 HUD 加载的还是原版。路径这个事不看源码根本想不到。
一点感想
130 行代码解决了一个不算刚需、但每天在眼前晃的问题。现在瞟一眼 HUD 就能看到余额,还挺安心。
如果还有下个版本,想加个余额告警——用 DeepSeek 最怕的就是扣完了没发现,会话断到一半。