显示 DeepSeek API 余额,并判断当前是否为高峰时段,实时倒计时到下次切换。
安装
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:gejiaju/dsh-balance
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
DeepSeek Harness(DSH)插件:显示 DeepSeek API 余额,并判断当前是否为高峰时段。
功能
在设置页新增「余额与高峰」卡片:
- 余额 — 从官方
GET /user/balance接口拉取账户余额(总额 / 赠金 / 充值,按币种展示)。 - 高峰时段 — 判断当前处于高峰还是**空闲(低谷)**计价时段,实时倒计时到下次切换,并展示后续切换时刻表。
默认策略与 DeepSeek 现行官方定价一致:
| 项目 | 值 |
|---|---|
| 高峰时段(北京时间) | 09:00–12:00、14:00–18:00(开始含、结束不含) |
| 空闲时段价格 | 高峰价格的 50% |
| 周末 | 周六、周日全天按低谷价计费(2026-08-23 起规则) |
时区、高峰窗口、周末规则全部可配置——将来政策再变,改配置即可,无需发版。
安装
dsh plugin --profile web add dsh-balance
重启 dsh web(或桌面应用)后,打开「设置 → 余额与高峰」。普通 profile 无需配置 API Key:插件自动复用 Harness 凭据服务里保存的 DeepSeek 密钥(即「模型」页面填写的那一个),或回退到环境变量 DEEPSEEK_API_KEY。
需要 dsh web ≥ 0.1.0-rc.6(设置分区基础能力)。更老的主机上卡片不会出现,其余功能不受影响。
配置
所有字段均可选,默认值如上。可在「设置 → 插件 → 插件配置」页面修改,或写入 cordis.patch.yml:
- id: dsh-balance
name: dsh-balance
config:
# apiKey: "" # 显式指定密钥;否则自动用凭据/环境变量
# baseUrl: https://api.deepseek.com
# timezone: Asia/Shanghai # 窗口所在的 IANA 时区
# refreshSeconds: 300 # 余额缓存 TTL(最小 10)
# weekendOffPeak: true # 周末全天按低谷价
# peakWindows: [[9,12],[14,18]] # [起始时,结束时] 或 [时,分,时,分]
# offpeakRatio: 0.5 # 仅展示用:低谷价/高峰价
「插件配置」页暴露 timezone、weekendOffPeak、refreshSeconds、peakWindows 四个字段。apiKey 刻意留在插件配置里:密钥更合适的归属是 Harness 自身的凭据管理,而且那里配置的密钥会被自动使用。
HTTP 接口
| 路由 | 说明 |
|---|---|
GET /dsh-balance/status |
完整状态:余额(缓存)、高峰状态、下次切换、密钥来源(脱敏)。 |
POST /dsh-balance/refresh |
强制重新拉取余额,绕过缓存。 |
仅同源访问。响应中永不出现 API Key,只有 sk-…abcd 形式的脱敏提示。
设计与优化
- 零运行时依赖、零构建步骤:只用 Node 内置能力(
fetch、Intl、node:test);客户端 bundle 是纯 JS 的__ModuleLoader__工厂,安装即用、无需编译。 - 时区感知的高峰计算(纯 JS):通过
Intl.DateTimeFormat在指定 IANA 时区读取本地时间与星期,与宿主机时区无关,不引入时区数据库依赖。 - 余额缓存 + 单飞请求:TTL 缓存(默认 5 分钟),并发请求合并为一次;刷新失败时保留上次成功值(标记为过期展示),不会让卡片变空白。
- 无后台轮询:客户端按服务端缓存 TTL 轮询(最少 30s)并在本地走秒倒计时;服务端只在被访问时才请求余额接口。客户端每 30s 拉一次状态(服务端已缓存),倒计时在本地每秒走;服务端只在被访问时才请求余额接口。
- 默认安全:密钥不出现在日志、响应与错误信息中;错误分类明确(
NO_KEY、INVALID_KEY、RATE_LIMITED、TIMEOUT、NETWORK、BAD_SHAPE)。 - 优雅降级:缺少
webServer/settings/credentials/ schemastery 时,对应部分静默跳过,其余功能照常工作。
安全
密钥处理方式见 SECURITY.md(不落日志、不出现在响应中、只以脱敏形式展示)。可直接复制的配置示例见 examples/cordis.patch.yml。
测试
npm test # 或 node --test
npm run check # 全量语法检查 + 跑测试
共 41 个用例:高峰窗口边界(窗口起止、周末、时区无关性、自定义窗口)、余额客户端(错误分类、缓存、单飞、失败保留旧值)、以及基于桩宿主的路由端到端测试。
仓库结构
lib/index.js cordis 插件入口(apply、配置装配)
lib/peak.js 纯函数:高峰/低谷判断 + 下次切换时刻(时区感知)
lib/balance.js DeepSeek 余额客户端(TTL 缓存、单飞)
lib/keys.js API Key 解析:配置 → 凭据 → 环境变量
lib/routes.js HTTP 路由 + 状态组装
lib/settings.js 可选 settings 命名空间(GUI 配置字段)
lib/config.js 默认值、校验、包版本
client/client.js 设置分区 UI(纯 JS、免构建)
test/ node:test 单元 + 集成测试
License
MIT
链接
同类插件
bowenliang123/dsh-context★ 1272
DSH 上下文洞察面板:Context 仪表盘 + /context命令 + Context 浏览器,查看 Context的分类组成、内容详情、演进趋势、压缩/注入事件、统计等一站式 Context 全生命周期管理。
Han-1413141/dsh-cost-meter★ 252
会话与当日 API 费用统计、预算图框(已用%)、官方余额、历史看板,支持峰谷计价与官方价格一键同步。
zh667/TokenLedger★ 193
侧边栏用量面板:把 Token 归属到实际服务该请求的中转站,站点从已有的 provider 配置中读出,无需额外配置;含今日/本月/累计三窗口、按站点与模型下钻、一年活跃度热力图,以及 New API / Sub2API / DeepSeek 余额。
wssfk12138/dsh-damage-pulse★ 147
在 DSH Web 界面追踪 DeepSeek Token 用量、单次与会话费用及账户余额,并显示缓存感知的扣费动画。
Ychris12138/dsh-usage-stats★ 139
多供应商用量看板:按供应商/模型统计 Token 与日期下钻,统一展示账户余额,并追踪 OpenCode Go / Z.ai 订阅额度。
feibi-mochi/deepseek-harness-control-center★ 67
DeepSeek Harness 监控、提醒、充值与会话控制中心:查看官方余额、本会话花费与 token、第三方 token 合计,提供完成提醒、官方充值、灵活布局及 Agent 辅助的会话控制。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。