bowenliang123/dsh-context
bowenliang123/dsh-contextDSH 上下文洞察面板:Context 仪表盘 + /context命令 + Context 浏览器,查看 Context的分类组成、内容详情、演进趋势、压缩/注入事件、统计等一站式 Context 全生命周期管理。
统计 DeepSeek Harness 的 LLM Token 用量与花费(人民币、峰谷计价),提供设置面板、Agent 工具、HTTP 接口与持久化存储。
DEEPSEEK HARNESS LLM 花费与用量统计插件
简体中文 | English
一个为 DeepSeek Harness 打造的 LLM 花费统计插件:自动记录每一次 API 调用的 Token 用量与费用(人民币),原生支持 DeepSeek 官方峰值价格计费(高峰 / 闲时半价自动区分)与 Kimi Coding Plan 订阅套餐的用量及等效费用统计。设置页可视化仪表盘、图表悬停明细、对话内 Agent 查询、账户余额与订阅配额监控,数据全部本地持久化——重启不丢、卸载无痕。
An LLM cost-tracking plugin for DeepSeek Harness: records token usage and cost (CNY) for every API call, with native support for DeepSeek's official peak/off-peak pricing and Kimi Coding Plan subscription usage & equivalent-cost statistics. Visual settings dashboard with hover tooltips, in-chat agent queries, balance & quota monitoring — all persisted locally.
· 功能 · 说明 💰 · 花费统计 · 每一次 API 调用自动记账:输入 / 输出 / 缓存命中 / 缓存写入 Tokens 与费用(缓存写入按缓存命中价计),按天、按模型聚合 ⏰ · 峰谷定价 · 内置单价表,高峰时段(北京时间周一至周五 9:00–12:00、14:00–18:00,不含中国法定节假日)与闲时半价自动区分,周末与法定节假日全天计为闲时(节假日表 2026 全年 33 天,可在配置页覆盖/停用;调休补班的周六周日不计高峰),本地模型(ollama 等)计 0;单价表按「计费时代」分版(legacy / v41),北京时间 2026-09-10 12:00 起自动切换为 V4.1 Flash 新价(2.0 / 0.04 / 8.0 高峰),并按官方脚注把旧 V4-Flash 系请求路由到 V4.1 Flash 计费;`deepseek-v4-pro` 维持自有牌价 9.0 / 27.0 / 0.30 不做路由(官方 2026-09-14 撤销了下线计划) 🔔 · 峰谷计价提示 · 设置 → 花费统计 → 右上角齿轮 → 峰谷计价与提示(v1.9.0 起设置集中在此,改完即可预览;DSH 0.1.7-alpha.2 起入口在「花费统计」页头的齿轮,v1.9.3):当前档位/距下次切换倒计时时段条、样式切换(简洁单行·按24h比例 / 环形表盘·相位色点)、简洁样式可选双行紧凑(上下布局,条上文下/文上条下)、「显示时间」开关、峰/谷切换前弹窗提醒与浏览器系统通知、提前提醒分钟、弹窗位置(右下角/屏幕中心)、提醒类型;侧边栏底部常驻显示时段条(窄栏/展开自适应)。看板上的同名面板改为只读回显 📌 · 六组概览卡 · 设置页顶部六张卡:今日费用 / 本月费用 / 总花费 / API 请求次数 / Tokens / 总余额。前三个金额卡不含订阅会员等效费用,订阅以附注展示 👁️ · 视觉模型 · 支持 deepseek-v4-flash-vision-exp:legacy 时代单价与 flash 一致,2026-09-10 12:00 起随 V4.1 Flash 新价计费(该旧名已下线,请求由 V4.1 Flash 提供);图片按官方规则换算 token(每张上限 384 个,以接口用量计费) 🏷️ · 官方模型名对齐 · 计费支持官方现役名 `deepseek-flash`(价格卡脚注 (1):「模型名请使用 deepseek-flash」),旧写法 deepseek-v4.1-flash 等归一化后命中同一档价,避免因官方改名而落入兜底估算 📊 · 可视化仪表盘 · 设置页新增「花费统计」:概览卡片、消费柱状图(按峰谷/按模型)、分模型的请求次数与 Tokens 图表,全部支持鼠标悬停查看明细 🧭 · 多机汇总(云端同步) · 可对接自建云端服务(独立仓库 dsh-cost-cloud,零运行时依赖):多台电脑的用量汇总到一处,看板顶部出现 本机 / 本机+云端 / 仅云端 三态开关,并支持设备 × Agent 矩阵(行合计 = 列合计 = 总计);上报内容仅 token 数、费用、时间戳与标识符,可选会话脱敏 🔥 · 用量热力图 · 设置页新增「Token 用量统计」:类 Codex 的 26 周日用量方格热图,按天着色(输入 / 缓存 / 输出 / 费用),悬停看当日明细、今天高亮描边,顶部显示全时段累计;跟随三态视图——「本机+云端 / 仅云端」下自动并入云端按天用量(卡片标题右侧标注当前口径) 📈 · 订阅配额监控 · Kimi Coding Plan、火山方舟 Coding Plan 等订阅套餐:配额进度条、重置倒计时、等效按量费用参考。火山方舟走管控面 OpenAPI(HMAC 签名),需 AccessKeyID + SecretAccessKey 💳 · 余额查询 · 一键查询 DeepSeek 官方账户余额(总余额 / 充值 / 赠送 / 状态);已登录 DSH 账号时直接读 Platform 钱包(充值 / 赠金),不再需要 API Key(v1.9.6) 🤖 · Agent 工具 · 直接在对话里问:"我现在花了多少钱?"——Agent 会调用 cost_stats / cost_prices 等工具回答 🔻 · 状态栏 · 聊天输入框下方实时显示:本会话花费(胶囊分段:本会话 / 订阅套餐 / 分模型),按会话实际用到的模型与订阅拆分,多模型默认折叠只显示 top2,点击展开全部明细;订阅显示具体套餐名,不再展示配额与调用次数 👁️ · 界面显示开关 · 输入框上方的花费胶囊、侧边栏峰谷时段条、设置页「花费统计」看板三个落点各自可关(设置 → 花费统计 → 右上角齿轮 → 数据与界面 → 界面显示),勾选即刻生效;只影响显示,记账、云端同步与 Agent 工具照常,配置入口(齿轮页)本身不受开关控制 💾 · 本地持久化 · 数据存本机 ~/.dsh/storages/cost-tracker-records.json,重启不丢、不上传;明细保留最近 180 天,更早自动压缩为永久日汇总,全时段统计永远精确且内存/磁盘有界 🕰️ · 历史导入(v1.9.0) · 回放宿主会话日志,把装插件之前的对话调用补录进账本(按各自时间戳的旧价计费);只补插件不可能记到的部分(安装前 / 停机缺口),幂等可重复执行,导入记录标记 source=import 以便区分 🔄 · 官方价格同步(v1.9.0) · 一键抓取官方定价页、解析各模型峰价并对比差异,应用后构建新的计费时代(只影响之后,历史口径不回改);每日可自动核对(只提示、不自动应用),页面改版时宁可不同步也绝不写错价 🌐 · 多厂商价格目录(v1.9.0) · 内置 15 家厂商 / 141 个模型条目(USD→CNY 按可配汇率折算),OpenAI / Anthropic / Gemini / Qwen 等内置表之外的模型也能按精确价入账;支持宽松/严格匹配与手动覆盖价 ⚖️ · Plan 与按量双轨(v1.9.0) · 工具栏「含 Plan 总额」开关一键切换口径:关闭只算按量真金白银、订阅以附注展示;打开则金额 = 按量 + 订阅等值,图表按天并入「订阅等值」段 🔐 · 凭据零落盘(v1.9.0) · 云端令牌与火山 SecretAccessKey 只写 DSH 凭据库(配置文件零明文,旧版明文启动时自动迁移);任何响应只回显布尔;出站请求白名单 + 强制 https + 拒绝跟随重定向(防凭据外带) 📤 · CSV 导出 · 一键导出明细 + 日汇总(purpose=rollup),方便用 Excel / Numbers 做进一步分析
在对话中直接查询——Agent 自带花费/余额/单价工具,边聊边查:
订阅套餐与账户余额——配额进度条、重置倒计时、余额一目了然:
分模型明细——每个模型的请求趋势、Token 构成,悬停显示每日明细:
📸 截图取自 v1.8.x 的看板;v1.9.0 起工具栏多了「含 Plan 总额」开关、配置面板改为七个折叠分组(见「设置入口」一节),v1.9.3 起配置页由「花费统计」页头右上角齿轮进入(带返回键),概览卡与图表本身不变。
前提:你已经在用dsh web(DSH 的 Web 模式)。~/.dsh即 DSH 的数据目录(如设置了DSH_HOME环境变量则指向该目录)。
走方式一时请注意:插件市场本身要求 dsh web ≥ 0.1.0-rc.6,更旧的宿主里根本不会出现「插件市场」这一项——那种情况请用方式二或方式三。本插件已收录于 awesome-dsh-plugin 精选列表(分类 usage)。在 DSH 里打开 设置 → 插件市场,搜索 dsh-cost-tracker 点安装即可;市场展示的等价命令行是:
dsh plugin --profile web add @angelyeye/dsh-cost-tracker也可以直接按仓库安装:dsh plugin --profile web add github:Angelyeye/dsh-cost-tracker。装出来是同一个包——包名以包自己声明的package.json为准,所以图行 id、以及随之而来的客户端注册要求,两种装法完全一致。
市场会把插件装进当前 profile 并自动写好 loader 配置,装的是市场上架的最新版本,装完按提示重启 dsh web、刷新浏览器,无需手工 git clone,也不用自己改 patch 文件。
打开 DSH 的任意会话,把下面这段话原样粘贴发送给 Agent 即可:
请帮我安装 DSH 插件 @angelyeye/dsh-cost-tracker:
1. git clone https://github.com/Angelyeye/dsh-cost-tracker.git 到 ~/.dsh/profiles/node_modules/@angelyeye/dsh-cost-tracker(目录名必须与包名一致)
2. 在 ~/.dsh/profiles/web/cordis.patch.yml 顶层数组追加一行:
- insert:
- id: dsh-cost-tracker
name: "@angelyeye/dsh-cost-tracker"
3. 完成后告诉我,我自己重启 dsh web看到提示后,在终端按 Ctrl+C 停掉 dsh web,再重新运行 dsh web,刷新浏览器即可。
# 1. 下载插件(目录名必须与包名一致)
mkdir -p ~/.dsh/profiles/node_modules/@angelyeye
git clone https://github.com/Angelyeye/dsh-cost-tracker.git ~/.dsh/profiles/node_modules/@angelyeye/dsh-cost-tracker
# 2. 注册插件(往 patch 文件里追加配置)
cat >> ~/.dsh/profiles/web/cordis.patch.yml <<'EOF'
- insert:
- id: dsh-cost-tracker
name: "@angelyeye/dsh-cost-tracker"
EOF
# 3. 重启 DSH(先 Ctrl+C 停掉当前 dsh web,再执行)
dsh web⚠️ 如果~/.dsh/profiles/web/cordis.patch.yml里已有其他内容,请保留原有行,只追加上面那段;该文件顶层必须是 YAML 数组(每行以-开头)。
⚠️ 插件市场安装过本插件的机器,不要用「手动拷文件」升级(v1.9.1 的真实踩坑):
profile 用 pnpm 管理插件(~/.dsh/profiles/web/package.json 里记着"@angelyeye/dsh-cost-tracker": "^1.8.15"),下次启动时市场对账会按依赖重装回旧版,你拷进去的新文件会被覆盖 —— 现象是"升级了、重启后又变回旧版本"。
这类机器请用官方 dev 流程把目录链接进 profile(重启不会丢,改代码重启即生效):
```bash
dsh plugin --profile web add link:/path/to/dsh-cost-tracker
`发布版本则走正常升级:dsh plugin --profile web update(或市场里点更新)。v1.7.0 起包名由 dsh-cost-tracker 改为 @angelyeye/dsh-cost-tracker —— 因为 npm 上原名已被他人占用,而市场的 npm 映射要求「已发布的包名 = 仓库 package.json 的 name」。
⚠️ v1.7.0 的迁移指引已更正:v1.7.0 存在客户端注册名缺陷(详见 CHANGELOG.md 的 v1.7.1 条目),任何安装方式装出来的 v1.7.0 都无法加载客户端。请直接装 v1.7.1 或更高版本,不要用重装 v1.7.0 的方式排障 —— 按仓库装同样不行(包名一样,图行 id 一样,问题出在 bundle 内部)。⚠️ 不要只是"再装一次新版":新旧两份的 cordis.patch.yml 用的是同一个 loader id(dsh-cost-tracker),叠加安装会让两份同时被加载 —— 表现为重复的 HTTP 路由、Agent 工具与 UI 插槽。必须先清掉旧的:
市场安装的(用 dsh plugin add 装的):
dsh plugin --profile web remove dsh-cost-tracker
dsh plugin --profile web add @angelyeye/dsh-cost-tracker手工 clone 装的:
# 1. 编辑 ~/.dsh/profiles/web/cordis.patch.yml,删除 id 为 dsh-cost-tracker 的那段 - insert:(共 4 行)
# 2. 删除旧目录
rm -rf ~/.dsh/profiles/node_modules/dsh-cost-tracker
# 3. 再按上面的「方式一」重新安装一次提示:清理旧目录后,如果cordis.patch.yml里那段- insert:没删掉,DSH 启动时会因为找不到模块名dsh-cost-tracker而解析失败。两者要一起处理。
数据不会丢:用量记录在 ~/.dsh/storages/cost-tracker-records.json,与插件目录、包名、安装方式全都无关。
dsh-cost-cloud ≥ v1.3.2,旧云端下自动退回本机口径;purpose=rollup)。工具 · 作用 · 你可以这样问 cost_stats · 查询花费与用量统计(scope=local(默认,仅本机)/ cloud(云端多机汇总)/ both) · "我今天花了多少钱?" · "我所有电脑加起来花了多少?" cost_prices · 查看内置单价表与峰谷规则 · "现在 deepseek-v4-flash 什么价?" cost_peak · 查询当前峰谷档位与下次切换倒计时 · "现在是不是高峰时段?" cost_recompute · 按计费时代重算已入库记录的费用(一次性补账),默认只试算 · "把价格调整前的记录按新价重算一下" cost_import · 历史导入:查看导入状态 / 执行一轮(补录装插件之前的对话) · "把装插件之前的花费也统计进来" cost_sync · 云端同步:查看状态 / 立即同步 / 测试连接 / 改配置 · "把花费同步到云端" · "云端同步正常吗?" cost_reset · 清空全部统计数据(不可恢复) · "把花费统计清零"
在多台电脑上使用时,把用量汇总到自建云端服务,即可在任一机器上查看全网合计,并按「设备 × Agent」拆分。
部署云端服务(独立仓库,零运行时依赖):
git clone <你的仓库地址> dsh-cost-cloud && cd dsh-cost-cloud
cp .env.example .env # 填 SESSION_SECRET 与 ADMIN_PASSWORD_HASH(node scripts/hash-password.js "口令")
docker compose up -d # 打开 http://<服务器>:8787 ,在「设置」页生成共享引导令牌在每台设备上配置:打开 设置 → 花费统计 → 右上角齿轮 → 「多机汇总(云端同步)」,填写:
字段 · 说明 设备名 · 该机器在看板上显示的名字(如「办公台式机」) 服务地址 · 云端地址,如 https://cost.example.com 共享令牌 · 云端「设置」页生成的 dshc_... 同步间隔 · 默认 60 秒
然后点 测试连接 → 立即同步。回到 设置 → 花费统计,顶部会出现三态开关:
视图 · 含义 本机 · 只统计这台电脑(与未启用云端时完全一致) 本机+云端 · 本机 + 其他整机的全部 + 本机上其它 agent(服务端并集口径,不重复计数) 仅云端 · 以云端记录为准(含本机已同步部分)
「本机+云端」的服务端口径是并集:其他整机∪本机上的非 dsh 来源。
因此多机 + 多 agent 混用时,本机的 DSH 数字来自本地,本机上的 ZCode/Codex 等来自云端,其他电脑全部来自云端 —— 三者相加恰好等于全网,不重不漏。
配合「维度」下拉还能看 按机器 / 按 Agent / 按模型 的拆分,以及设备 × Agent 矩阵(行合计 = 列合计 = 总计)。
其它 agent 也能接入:云端的上报协议是开放的,任何 agent 的统计插件按 dsh-cost-cloud 仓库的 docs/INGEST-API.md 实现即可接入,云端无需改动,看板会自动出现新的 Agent 列。 关键约定:同一台机器上的所有 agent 必须共用同一个 machineId(共享文件 ~/.dsh-cost/device.json),否则会被统计成多台设备。
隐私:只上报 token 数量、费用、时间戳与标识符(不涉及 prompt / 回复 / 文件内容);可在配置页开启「会话脱敏」(sessionId 上报前替换为不可逆哈希)与「不含 purpose」。
不想在界面上看到插件?设置 → 花费统计 → 右上角齿轮 → 数据与界面 → 界面显示里三个开关各自独立、勾选即刻生效(无需点「保存」,也无需重启 dsh):
开关 · 关掉之后 输入框上方的花费胶囊 · 会话输入区不再显示本会话花费与模型明细 侧边栏峰谷时段条 · 侧边栏底部的档位 / 倒计时消失(峰谷切换弹窗与系统通知一并停用;只想留提醒不想要时段条,请改用「峰谷计价与提示」里的提示开关) 设置页「花费统计」看板 · 设置页左侧的该入口只留一句重新打开的指引(记账与云端同步照常)
cost_stats 等)全部照常工作;false 才隐藏」,缺省即显示。老配置文件里没有这几个键,升级后界面与升级前一致;~/.dsh/storages/cost-tracker-config.json(键名 uiDockEnabled / uiPeakEnabled / uiDashboardEnabled),与峰谷、云端字段互不覆盖。设置 → 花费统计 → 页头右上角齿轮(图标按钮,悬浮提示「花费统计设置」)→ 配置页,左上角返回键回到看板。
入口 · 适用宿主 · 形态 页头齿轮 → 配置页(v1.9.3 起,推荐) · 全部版本 · 设置 → 花费统计 → 齿轮;配置页整页常驻展开,左上角返回键 插件配置卡片(v1.9.0,兼容保留) · 仅仍声明 settings.plugin.item 的旧宿主(dsh < 0.1.7-alpha.2) · 设置 → 插件 → 插件配置 → 花费统计;卡片默认收起,点标题展开
DSH0.1.7-alpha.2删除了settings.plugin.item插槽(「内置插件」分区改为只读清单),卡片在新宿主上不显示;
插件侧的注册保留(插槽不存在时回调不触发,零成本),旧宿主照旧可用。两个入口共用同一个配置组件,
字段、校验、写接口完全一致,只是外壳不同;未保存草稿各自独立,就近改一处即可。
配置页承载全部设置,按折叠分组排列,顶部一条状态摘要(云端同步 / 已记账条数 / 待上报 / 上次同步 / 计价时代 / 历史导入 / 金额口径):
分组 · 内容 多机汇总(云端同步) · 设备名、启用开关、服务地址、共享令牌、同步间隔、单批条数、会话脱敏、上报 purpose、上报日汇总、补传窗口、默认视图 + 保存 / 测试连接 / 立即同步 / 全量补传 + 设备 ID / 水位 / 最近错误 峰谷计价与提示 · 峰谷开关、显著提示、时段条样式(简洁 / 环形表盘)、时间刻度 / 双行紧凑、切换提醒(提前量 / 类型 / 位置 / 系统通知)+ 改完即可预览(时段条与弹窗预览) 订阅套餐与配额 · 火山方舟 AccessKeyID / SecretAccessKey(后者只进凭据库)、配额查询与百分比条、订阅归类覆盖表(provider/* 或 provider/model → 订阅 / 按量) 计价与价格目录 · 「含 Plan 总额」、目录匹配模式(宽松 / 严格)、USD→CNY 汇率、手动覆盖价表、官方价格同步(核对 / 应用 / 上次差异 / 当前时代 / 已同步时代)、多厂商目录概览(厂商与条目数、数据日期、指纹) 历史导入 · 自动导入开关、立即导入、累计导入条数与已处理日志数、三条口径说明 数据与界面 · 界面显示三开关(勾选即刻生效)、导出 CSV、重算费用(试算 / 写回)、清空数据(两步确认) 安全与凭据 · 云端令牌 / 火山 SK 的「是否已配置 + 存储位置」徽章、旧版明文迁移状态、清除按钮与出站防护说明
约定:只有「界面显示」三开关是勾选即刻生效(要立刻看到显隐结果),其余分组都是「改草稿 → 点该组保存」,避免误触即写盘;分组折叠只切显隐、不卸载内容,展开任一分组都不会重新取数或丢草稿。从配置页点「返回」会丢弃未点保存的草稿(点该组「保存」即落盘),各组之间互不影响。