bowenliang123/dsh-context
bowenliang123/dsh-contextDSH 上下文洞察面板:Context 仪表盘 + /context命令 + Context 浏览器,查看 Context的分类组成、内容详情、演进趋势、压缩/注入事件、统计等一站式 Context 全生命周期管理。
DeepSeek 账户余额与模型消耗:官方价格表分高峰/空闲时段计价,三档计费口径(缓存未命中/命中/输出),按模型与会话统计,主页摘要条悬停明细,支持导出 CSV 与重置记录。
DeepSeek Harness(DSH)标准 bundle 插件:显示 DeepSeek 账户余额 与 模型消耗量。
stats 行同一套 pill 排版,单行居中、不换行):DeepSeek 余额 ¥xx.xx CNY · 本会话(模型) xx.xM tok ≈¥x.xxx · 总计 xx.xM tok ≈¥x.xxx · 高峰/空闲(模型名跟随会话最近调用,token 按官方三档口径 M/K 缩略,悬停查看明细)纯 JavaScript、零依赖、零构建——GitHub 直装无需构建授权。
摘要条静息状态(显示会话最近使用的模型,费用记录从安装插件/重置记录起计算,无法加载历史记录):
实际使用中的摘要条(调用次数、token 与估算费用实时更新):
悬停 token 数字:当前模型在本会话的三档消耗明细(输入·缓存未命中 / 缓存命中 / 输出,与官方计费口径一致,三档之和 = 合计):
悬停模型名:本会话中 deepseek-v4-flash / deepseek-v4-pro 两个模型的实际消耗对比:
静息状态(安装/重置后尚未使用,无明细):
使用示例(展示余额明细、按模型明细、各会话消耗明细,支持导出为CSV文件):
| 功能 | 说明 |
|---|---|
| 余额查询 | api.deepseek.com/user/balance,显示总余额 / 充值 / 赠送 / 可用状态(60 秒缓存) |
| 消耗量统计 | 监听 llm/stream 实时累计 DeepSeek 调用,按官方三档口径统计(输入·缓存未命中 / 缓存命中 / 输出),区分总计与当前会话,数字 M/K 缩略 |
| 按模型计价 | 按实际调用模型匹配官方价格表(含官方改名别名:旧名 deepseek-v4-flash* → deepseek-flash;支持版本后缀);未收录模型按 deepseek-flash 估算并标注 |
| 分时段计价 | 高峰(工作日北京 9-12 / 14-18)与空闲价格不同,按每次调用时刻即时计价 |
| 计价缓存 | 每次消耗记录具体时间(北京整点)+ 当时单价,费用一经记录即冻结;时段切换、跨天、重启都不会改变历史花费 |
| 按小时明细 | 设置页列出最近各整点的时段、调用次数、token 与冻结费用(悬停可见当时单价快照) |
| 会话明细 | 每个会话显示真实标题、总计行与分模型行(flash/pro 固定列出,未调用显示 0 占位) |
| 三档悬停 | 摘要条 token 数字悬停显示三档明细(含各档费用,三档之和 = 合计);模型名悬停显示两模型对比 |
| 导出明细 | 一键导出 CSV(按时段 + 按模型 + 按会话,三档口径,带 BOM 可直接用 Excel 打开) |
| 重置记录 | 一键清空全部统计、计价缓存与余额基线(带确认,落盘持久化) |
| 持久化 | 统计与计价缓存落盘 $DSH_HOME/dsh-balance-and-cost.json,进程重启后恢复 |
| 实时更新 | 模型选择 / 用量产生经 SSE 实时推送(浏览器立即刷新);15 秒轮询作为断连兜底;余额 Host 端 60 秒缓存 |
DeepSeek 价格分高峰/空闲两档。如果展示时用「当前时间」的单价去重算历史 token, 那么每次时段切换(北京 09:00 / 12:00 / 14:00 / 18:00)已经产生的花费都会突然翻倍或腰斩—— 数字变了,账单没变。
本插件因此维护一份计价缓存(cost ledger):每次 llm/stream 上报用量时,
按消耗发生的那一刻结算并把结果记下来:
2026-09-14T09(北京时间整点)· 高峰
deepseek-v4-flash 单价:未命中 ¥3/M · 命中 ¥0.1/M · 输出 ¥9/M
3 次调用 · 1.2M tok · ≈¥3.6042 ← 该数值从此固定,不再随任何时段变化
来源:DeepSeek 官方定价(价格可能变动,请以官方页面为准;编辑 src/index.js 的 PRICES / MODEL_ALIASES 即可更新)
当前生效:v2(2026-09-10 12:00 起) —— DeepSeek V4.1 Flash 发布后的新价格。
| 模型 | 输入·缓存未命中 | 输入·缓存命中 | 输出 |
|---|---|---|---|
| deepseek-flash(DeepSeek-V4.1-Flash) | 高峰 ¥2.0 / 空闲 ¥1.0 | 高峰 ¥0.04 / 空闲 ¥0.02 | 高峰 ¥8.0 / 空闲 ¥4.0 |
| deepseek-v4-pro(DeepSeek-V4-Pro-0813) | 高峰 ¥9.0 / 空闲 ¥4.5 | 高峰 ¥0.30 / 空闲 ¥0.15 | 高峰 ¥27.0 / 空闲 ¥13.5 |
deepseek-flash;旧名 deepseek-v4-flash、deepseek-v4-flash-0731、deepseek-v4-flash-vision-exp 仍可调用,但请求由 V4.1-Flash 提供服务,因此按 Flash(deepseek-flash)单价计费,统计里也归并到 deepseek-flash 一行。deepseek-flash 估算并在界面标注。PRICING_VERSION 递增(价格表变动)时,启动会按计价缓存里各分桶记录的时间用新表重算一次——时间取自记录、只换表,所以不会出现「按当前时段重算历史」的突变;没有时间记录的历史 token(0.2.0 之前的聚合值)保持原记录费用,界面标注为估算拆分。# GitHub 直装(纯 JS 零依赖,无需 allowBuilds 构建授权)
dsh plugin --profile web add github:boooooooer/dsh-balance-and-cost
# 或本地目录 / tarball
dsh plugin --profile web add ./dsh-balance-and-cost
pnpm pack # 生成 tarball 后:dsh plugin --profile web add ./dsh-balance-and-cost-0.1.0.tgz
安装后重启 dsh(bundle 层在启动时组合)。卸载:dsh plugin --profile web remove dsh-balance-and-cost。
credentials 服务解析 DEEPSEEK_API_KEY(~/.dsh/.credentials.yaml 或同名环境变量),代码中不含任何密钥$DSH_HOME/dsh-balance-and-cost.json(可在设置页「重置记录」一键清空,或直接删除文件)dsh-balance-and-cost/
├── package.json # dsh.bundle.patch + dsh.client 声明
├── cordis.patch.yml # bundle 补丁层:insert 插件行
├── src/
│ ├── index.js # node half:llm/stream 统计、计价缓存、余额查询、HTTP/SSE 路由
│ └── client.js # browser half:摘要条 + 设置页(__ModuleLoader__ 加载)
├── test/
│ ├── smoke.mjs # 单元冒烟:manifest / 计价 / 计价缓存回归
│ └── host-integration.mjs # 端到端:假 ctx 挂载 → 统计 → 快照 → 落盘 → 恢复
├── assets/ # 界面截图
├── README.md
└── LICENSE
| 文件 | 职责 |
|---|---|
src/index.js | export const name + export function apply(ctx);ctx.webServer.register 暴露四个端点:/balance(余额,60s 缓存)、/usage(用量快照,含计价缓存视图,支持 ?sessionId=)、/events(SSE 实时推送)、/reset(POST 清空统计) |
src/client.js | window.__ModuleLoader__.load({ id, factory }) 注册浏览器插件;inject: ['slots'] + ctx.slots 注入「摘要条 + 设置页」两个位置(DSH 0.1.5 起客户端插件必须声明依赖的 cordis 服务,ctx.get(...) 对未声明服务可能取不到),fetch 调用上述端点,EventSource 订阅 /events |
费用在 Host 端按消耗到达时刻的时段单价结算并写入计价缓存(ledger)后冻结:
摘要条与本会话/总计的三档拆分都是对缓存的求和,因此跨时段、跨天、重启后的历史花费都精确不变;
统计按会话隔离读取(会话日志),进程重启后从持久化恢复。
npm test # 下面三个用例一起跑
node test/smoke.mjs # manifest / 两端模块加载 / 分时段计价 / 计价缓存(时段切换不跳变)
node test/host-integration.mjs # 假 ctx 端到端:llm/stream 统计 → /usage 快照 → 落盘 → 重启恢复 → 重置
node test/client-render.mjs # 假 React/slots 渲染:槽位注册 + 摘要条 + 设置页(含计价缓存区块)
改动记录见 CHANGELOG.md,安全设计见 SECURITY.md。
deepseek 的模型调用(deepseek-official 等路由)requestHeader)或全局默认MIT