跳到主内容

TokenLedger

123Star10Fork1Issue2Watching

自动归类 DSH Web 端每次请求的中转站与项目归属,统计 token 用量、余额与订阅配额,无配置无需凭据。

机审证据5/5方法论数据来源安装命令持续维护DSH 版本风险扫描
机审证据安装命令仓库已核验dsh-plugin Topic许可证READMEAI 百科
语言
JavaScript
License
MIT
分支
main
billingdeepseek-harnessdsh-pluginnewapisub2apitoken-usage

安装

命令web profile
$ dsh plugin --profile web add dsh-tokenledger

在终端中运行以上命令,通过 dsh CLI 安装此插件。可在右上角切换 Profile。 第一次用 dsh?看这篇新手教程

对话式安装

帮我安装 DeepSeek Harness 插件 zh667/TokenLedger:先查看仓库 https://github.com/zh667/TokenLedger 确认安全性,然后执行安装命令并验证插件加载成功。

把这段指令粘贴给 DSH Web GUI 里的助手,由它代你完成安装与验证。

一句话定位

把 DeepSeek Harness 的 Token 用量按实际服务请求的中转站归类,附带余额、订阅配额与项目维度统计;安装即用,既不要求配置中转站地址,也不要求新增任何凭据。

核心能力

  • 中转站归属:按 provider 的 baseURL 归一化 origin 分组,同一站的多把 key 自动合成一行,站名就是真实域名而非你起的路由别名
  • 按项目归属:用会话启动时所在的目录分组,宿主工作区有标题就用标题,没注册过就用目录名,子目录里起的会话照样算进去
  • 自动发现中转站:从宿主的 provider 配置里读 baseURL 即可,无需在插件侧重复填写;只读这一项,绝不读取旁边的凭据
  • 多家余额读取:覆盖 DeepSeek、New API 系、Sub2API、Moonshot/Kimi、智谱 GLM / Z.ai、OpenRouter 等账户类型,每家一把普通 API key 即可
  • 订阅配额窗口:OpenCode Go、Kimi For Coding、MiniMax Coding Plan、Z.ai Coding Plan 等"卖套餐"型供应商以 5 小时 / 日 / 周 / 月独立窗口呈现,各有进度条与重置时刻
  • 导出与诊断:CSV / JSON 导出用量、索引健康度、未归属行数单独列出,费用估算按生效日期分桶计价

技术实现

  • 语言: JavaScript (ESM Node.js)
  • 关键依赖: 仅一个可选 peer 依赖 @deepseek-ai/schemastery(用于注册 settings 命名空间);运行期只用 Node 内置的 node:sqlite、内置 fetch 与 node:module,零外部运行时依赖
  • 架构模式: 双端 Cordis 插件;node 端通过 cordis.patch.yml 注册插件并以 sessionPersistence 为必需依赖挂载,webServer(兼容旧名 httpServer)通过嵌套 ctx.inject 等待;浏览器端以手写 __ModuleLoader__ bundle 注入侧边栏底部插槽 sidebar.footer.action,由宿主提供 React
  • 入口文件: src/index.js(Cordis 入口 apply/inject/name)+ src/plugin.js(核心实现)+ cordis.patch.yml(bundle patch)

适用场景

DSH Web 用户希望直观回答"这个月 Token 花在哪些中转站 / 哪些项目上、某家中转站还剩多少余额 / 套餐何时重置",又不愿意为用量统计多填一次配置或多管一把 key 时使用本插件。特别适合配置了多家中转站、为同一中转站多把 key 分组,或在使用 Sub2API / OpenCode Go 这类卖套餐账户的用户。

前置依赖与兼容性

依赖最低版本说明
DeepSeek Harness (DSH)>= 0.1.0-rc.6插件已在该版本宿主的 web profile 下验证,旧版 latest 标签会指向更早的 0.0.1-rc.x 线,服务名不一致
Node.js>= 22运行时使用 Node 内置的 node:sqlite,v22 会发出 ExperimentalWarning,属于上游提示而非本插件抑制
平台跨平台macOS / Windows / Linux 均已实测通过;Windows 下验证了从已发布 tarball 加载、扫描真实 $DSH_HOME 下的会话日志、面板在会话流中渲染
原生模块node:sqliteNode 内置模块,无 C++ 编译依赖;通过 dynamic import 加载,缺失时仅损失注册设置命名空间这一项能力

安装方式

dsh plugin --profile web add github:zh667/TokenLedger

配置项

配置类型说明默认值
relays路由名 → URL 或对象仅在自动发现看不到时填写;键为 DSH provider 的路由名,值可以是裸 URL 或 {baseUrl,id,displayName,type} 对象不填;从宿主自动发现
officialOrigins字符串数组标记为厂商官方域名而非中转站的 origin 列表,用于区分"直连"和"中转"[]
endpoints数组内置表覆盖不到的余额接口声明,详见下文"自定义端点"[]
fingerprint布尔是否主动探测每个中转站跑的是哪套程序;默认关闭,首次查余额时会按需探一次false
database字符串SQLite 索引文件路径;在 patch 里默认写成宿主主目录下 tokenledger.sqlitetokenledger.sqlite
sweepIntervalMs数字(毫秒)后台扫描会话日志的间隔,0 关闭定时器60000
sweepOnStart布尔启动时是否立即扫一次true
rates任意费用估算的费率表,格式见 pricing.js;未配的模型显示为破折号而非 0未设

自定义端点(endpoints 数组)字段:

字段说明
origin必须是你已配置某条 provider 的同源地址;它仅作为查找该账户的键
displayName面板显示名
path必须以单斜杠开头的绝对路径,//host/x 这种协议相对 URL 会被拒绝
raw设为 true 时以裸密钥发送,不加 Bearer 前缀
fields响应 JSON 里各项数据的取值路径(点号),例如 total: data.balance
windows订阅配额窗口列表,每项含 kind 与若干取值路径

边界写在代码里:只发 GET、无请求体、无可声明凭据、跨源重定向直接失败、响应体有大小上限与超时、自定义端点不能覆盖内置读法。

常见问题

Q: 安装后需要重启 dsh web 吗?

A: 需要。安装、升级或卸载后必须重启已经在跑的 dsh web,再在浏览器里硬刷新一次,侧边栏底部才会出现"用量账本"入口。

Q: 升级或卸载的命令是什么?

A: 升级用 dsh plugin --profile web update dsh-tokenledger,卸载用 dsh plugin --profile web remove dsh-tokenledger,都跟安装一样作用于 web profile。

Q: 需要我自己填中转站地址吗?

A: 大多数情况不需要。插件会从宿主的 provider 配置里读 baseURL,按 origin 自动归类。仅有两种边缘情况需要手动写 relays:组合里没挂 settings 服务,或 provider 是 agent preset 在 agent.cordis.yml 里挂载。

Q: 余额和订阅配额读的是哪一把 key?

A: 默认复用你在该路由上已经配的那把 API key;唯一例外是 OpenRouter,它的额度接口只认 Management Key,用推理 key 会返回 401,面板会直接说明要哪一把。

Q: 数据存在哪里?安全吗?

A: 汇总索引保存在 DSH 主目录下的 SQLite 文件里(默认 tokenledger.sqlite),可丢可重建;本插件从不读取或存储提示词、工具参数、响应内容,API key 始终走 Authorization 头、不进 URL 查询串,浏览器永远拿不到。

Q: "未知路由"那一行是什么?

A: 表示那些请求走的路由在当前的 provider 配置里找不到了——可能改过名、删过,或当时跑在另一台机器上。数据没丢,把同名路由重新配回去会触发索引重建,历史流量自动归位。

Q: 怎么排查"我的中转站为什么不显示"?

A: 在 DSH 里跑 /tokenledger diagnostics,会打印当前的路由归属和索引里的路由;排查 404 时按这份输出的提示继续走。

上手难度

入门 — 不需要任何配置即可看到用量和中转站分布;只有想覆盖自动发现结果、为非内置供应商声明接口、或维护费率表时才需要编辑 settings.yaml。

已知问题与限制

  • 安装或升级后必须重启 dsh web,且浏览器要硬刷新;不重启会导致路由不注册且不报错(dshworks 在 doc/HOST-CONTRACT 中记录这是宿主半边加载的常见陷阱)
  • pnpm 会缓存 github:user/repo#main 字符串,要强制更新到 main 须用完整的 40 位 commit SHA;短 SHA 会直接报 Could not resolve
  • DSH 设置页里暂时无法为本插件新增原生配置卡:上游 dsh-host-apiproxy 把可暴露的命名空间写死成七个白名单,其它命名空间会返回 settings-not-exposed;tokenledger 当前以 settings.yaml 形式由宿主侧 ctx.settings 读写,浏览器内的配置面板为阻塞项
  • 重装同一个 spec 不会刷新 main;改 package.json 之前要确认不会被解析失败(add 会先 resolve 整份清单)
  • node:sqlite 在 Node v22 上会触发 ExperimentalWarning,属上游告警,本插件不抑制
  • 自定义端点 (endpoints) 的 path 必须是单斜杠开头的绝对路径,//host/x 这类协议相对 URL 会被构造时拒绝

查看使用指南 →

该插件的安装步骤、关键要点、FAQ 与兼容性说明(基于已收录字段派生)。

收录徽章

Listed on deepseek-plugin.org
[![Listed on deepseek-plugin.org](https://img.shields.io/badge/listed_on-deepseek--plugin.org-007EC6)](https://deepseek-plugin.org/plugins/zh667/TokenLedger)

把这段 markdown 粘贴到你的 GitHub README,链接回本插件详情页。徽章只声明已被本站收录,不代表安全认证。

返回插件目录