dsh-purge
YuJunZhiXue/dsh-purge在设置页编辑 prompt-inject.md、管理 AGENTS.md 或 CLAUDE.md 规则集、检查插件更新,并对本机包做可回滚的应用或还原。
DSH 插件:统计所有经过 DeepSeek Harness 的模型调用——Token 用量、成本核算(含峰谷计价)、供应商余额与配额,并按模型/供应商/项目/来源/账号/日期拆分。A token usage, cost and provider-balance plugin for DeepSeek Harness.
中文 | English
一个 DSH 插件:把经过 DeepSeek Harness 的每一次模型调用都记下来,在侧边栏给你一个 Token 用量统计页,顺带管好成本与供应商余额。
统计
成本
模型接入
提醒
数据来自 DSH 自己的会话日志,不额外发请求、不上传任何东西。
在 DSH 的「添加插件」搜索框输入 dsh-token-metrics,或在插件管理里执行:
plugin_manager install_bundle dsh-token-metrics走已发布到 npm 的版本,国际(npm 官方源)与国内(npmmirror 镜像源)都能装。
DSH 会并行探测两个源、自动选响应更快的一个,无需手动挑:海外用户走官方源,
国内用户走镜像源,都覆盖到。
发布只需推到 npm 官方源,npmmirror 会自动镜像同步(通常几分钟内)。刚发新版
若镜像还没跟上,在「添加插件」里把安装源临时切到官方源,或到 npmmirror 搜
本包点「同步」。
不依赖任何 npm 源、或想用尚未发布的最新版时,直接从仓库装:
plugin_manager install_bundle github:hugoyee75-cmyk/dsh-token-metrics锁定某个版本加 #v0.3.2:
plugin_manager install_bundle github:hugoyee75-cmyk/dsh-token-metrics#v0.3.2改代码即时生效时用本地目录,把 dsh-token-metrics 指到你的仓库:
{
"dsh": { "profile": { "bundles": ["dsh-token-metrics"] } },
"dependencies": { "dsh-token-metrics": "link:/path/to/dsh-token-metrics" }
}装完重启 DSH(或热重载),侧边栏就会出现「Token 用量统计」图标。第一次打开页面,插件会自动回扫历史会话日志,把以前的用量补上。
顶部是时间范围与模型筛选,中间是九项总计指标,下方是趋势图与模型占比环形图, 再往下是按模型 / 来源 / 项目 / 供应商 / 账号 / 日期切换的明细表。 切换「今日 / 近 7 天 / 全部」时,指标卡、图表、明细表与金额一起联动。
「模型接入」页签管理第三方中转站与官方平台:余额、可用模型、订阅额度窗口 与重置倒计时。余额可点击在美元 / 人民币之间切换。
订阅制平台(如智谱 GLM Coding Plan、Kimi Coding Plan)没有「余额」概念, 这里显示的是各时间窗口的剩余比例与重置倒计时。
余额不足、配额将尽、配额即将重置、查询失败、插件新版本等状态变化会推送到 右下角。告警有服务端冷却、状态落盘、客户端记忆三层去重,不会反复弹。
(总量 / 命中率 / 输入构成 / 按模型 / 成本),平滑曲线 + 悬停显示具体数值
结果用弹窗告知(有新版可一键更新,无新版显示当前版本) 状态灯:绿=最新 / 蓝=有新版本 / 灰=未检查
(会话明细默认隐藏,可配置打开)
所有配置项都有默认值。要改的话,在你自己 profile 的 cordis.patch.yml 里加一条同 id 的 override:
- id: token-metrics
config:
showSessions: true
snapshotCacheMs: 5000注意:同 id 的 override 会整体替换 config,不是逐字段合并。改几项就把其余项一并写全,或者只写你要改的、其余依赖默认值。
配置项 · 默认值 · 范围 · 说明 flushDelayMs · 2000 · 250–60000 · 落盘防抖(毫秒)。调用本身很轻,磁盘写入才是开销 snapshotCacheMs · 3000 · 0–60000 · 聚合快照缓存时长(毫秒)。0 表示每次重算 retentionDays · 400 · 0–3650 · 按天分桶保留天数。0 表示不裁剪 maxSessions · 500 · 0–5000 · 统计页返回的会话明细上限 maxTrendSeries · 6 · 1–20 · 趋势图最多画几条模型曲线,多出的聚合成「其他」 maxSeenEntries · 200000 · 1000–2000000 · 去重表上限 showSessions · false · — · 是否展示「按会话」明细 trackFailedAttempts · false · — · 是否统计失败请求。详见「失败请求」 trackAccount · true · — · 是否读取登录账号身份与余额(只读,不碰凭据) autoUpdate · true · — · 是否启用自更新 watchFiles · false · — · 监视包目录,改文件即热重载。开发用 modelAliases · {} · — · 模型别名映射,把 provider 上报的内部代号转成真实模型名 alertThresholds.balanceLowUsd · 5 · 0–1e6 · 余额低于此值(美元)时通知;0 关闭 alertThresholds.quotaLowPercent · 10 · 0–100 · 配额窗口剩余低于此百分比时通知;0 关闭 alertThresholds.quotaResetSoonMinutes · 10 · — · 配额即将重置的提前量(分钟)
服务在宿主进程里,端口随 DSH。统计页顶部有对应按钮,也可以直接调:
方法 · 路径 · 作用 GET · /api/dsh-token-metrics/summary · 聚合快照,统计页的数据源 GET · /api/dsh-token-metrics/flush · 立即落盘并返回最新快照 GET · /api/dsh-token-metrics/version · 当前版本与更新状态 GET · /api/dsh-token-metrics/update/check · 检查新版本 POST · /api/dsh-token-metrics/update/apply · 安装新版本并热重载 POST · /api/dsh-token-metrics/reload · 只热重载当前磁盘代码 POST · /api/dsh-token-metrics/rebuild · 从会话日志重算全部统计
手动重算:
curl -X POST http://127.0.0.1:53414/api/dsh-token-metrics/rebuild数据来源是 DSH 的会话日志,这是唯一权威来源。每一次完成的模型调用都会在日志里 追加一条 assistant/message 事件,携带:
data.message.source.{provider, model} —— 谁被调用了data.usage —— inputTokens / outputTokens / totalTokens /cacheReadTokens / cacheWriteTokens / reasoningTokens
data.turn / data.step —— 天然的去重键event.time —— 按天分桶因此统计覆盖:
场景 · 是否计入 · 原因 主会话对话 · ✅ · 日志有 assistant/message 子代理 / teammate · ✅ · 各有独立会话日志 workflow 子会话 · ✅ · 同上 压缩(compaction) · ✅ · 由 llm/stream 补充捕获 会话标题生成 · ✅ · 由 llm/stream 补充捕获 失败的请求尝试 · ❌ · assistant/attempt 是重试中间态,计入会重复
界面文案通过宿主的 locale 服务注册,因此跟随 DSH 的语言设置(中文 / English), 运行时切换即时生效,不需要重开页面。
实现上有两个容易踩的坑,都已处理:
LocaleSnapshot 的当前语言字段是 `active`(不是 locale 或 id)。早先读错字段名,导致语言永远退回默认值、完全不跟随设置。
ctx.locale.subscribe,否则语言切换后已经打开的页面不会重渲染。
同一个模型可能挂在多个供应商下(例如 deepseek-v4.1-flash 同时出现在 trae / workbuddy / dshlinux / workbuddy-ai)。插件维护两套口径:
视图 · 口径 · 用途 byModelName / 占比图 / 趋势图 · 按模型名合并 · 同一模型的多条曲线合并成一条,否则图上会出现 4 条同名线、占比也被拆散 byModel / 明细表 · 按供应商拆分 · 需要区分「哪个渠道花的钱」时看这里
两套口径的合计严格相等——它们只是对同一批事件的不同分组。
插件不调用任何 shell / 系统命令,路径全部通过 node:path 拼接, 因此 macOS、Windows、Linux 以及 Web 端 DSH 都可用:
平台 · 支持 · 说明 macOS · ✅ · 开发与验证环境 Windows · ✅ · 更新时 rename 带重试,见下 Linux · ✅ · fs.watch(recursive) 需 Node ≥ 20,engines 已要求 ≥ 22.19 Web 端 DSH · ✅ · 只依赖 Host 的 webServer 路由;没有它时其余功能仍工作
Windows 专有处理:运行中的 Node 会锁住模块文件,直接 rename 会抛 EPERM/EACCES(macOS/Linux 不会)。更新器用退避重试处理这类锁, 非可重试的错误照常抛出,不掩盖真实问题。
会话日志用 Node 内置 zstdDecompressSync 读取(跨平台一致的纯 JS/C++ 实现), 不依赖系统 zstd 命令。