dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
给 DeepSeek Harness(DSH)装上一只电表:底部读数行多一格「已用人民币 X」,按官方峰谷定价算,每个会话各记各的账。
A real cost meter for DeepSeek Harness: one more cell in the composer readout — "已用人民币 X" — priced with DeepSeek's peak/off-peak tariff, accounted per session.

底部读数行末尾多一格 已用人民币 10.27(悬停时出现浅灰圆角底,与原生那几粒一致)。
点它,上方弹出明细面板:

面板里能一眼看出这个数字的口径:三类 token 分开、计费调用次数(含回溯多少条)、 高峰/空闲各花了多少、当前时段与切换倒计时、价目版本、用的哪个模型。
DSH 的底部那行会告诉你用了多少 token,但不会告诉你花了多少钱。而 DeepSeek 的价格是分时段的、也分缓存命中与否 —— 你自己拿计算器算,算出来的数字通常和账单差得很远。
这个插件把那笔账实时算给你看,只算官方通道:
已用人民币 6.95,字体、颜色、内边距与旁边原生那两粒逐字对齐(不是"看着差不多");DeepSeek's own readout tells you how many tokens went by; it does not tell you what they cost. Prices vary by time of day and by whether the prompt hit the cache, so hand-arithmetic tends to land far from the invoice. This plugin prices it live, for the official channel only, and leaves the row untouched for third-party providers.
| 能力 | 一句话 |
|---|---|
| 只在官方通道计费 | 认的是 provider 路由名,不是模型名 —— 中转站里叫 Deepseek-v4-flash 的模型不算 |
| 峰谷定价 | 北京时间工作日 9–12 / 14–18 高峰,其余空闲;空闲价 = 高峰价一半 |
| 三类 token 分别计价 | 缓存命中输入 / 未命中输入 / 输出,各自两档,不混算 |
| 每会话独立账本 | 每个 session 各记各的,子代理也不会串到你的数字里 |
| 增量累加,绝不重算 | 每次调用只往上加一笔,不每次从头回放 |
| 回溯补齐 | 中途装上也能从会话第一天算起,读会话日志逐条补 |
| 定价政策变化可迁移 | 账本存价目指纹,变了才按新价重放一次,且只认贵不认便宜 |
| 价目表有版本 | 旧的按 effectiveFrom 分段按旧价,不会被新价追溯 |
| 悬停不弹东西 | 只有灰底;明细在点击后出现 |
| 离线可测 | 108 项断言,不开浏览器就能证明口径没算错 |
插件是一个真正的 profile bundle,所以它会出现在「设置 → 插件」的列表里,可以启用 / 停用 / 卸载。
dsh plugin --profile <你的 profile> add dsh-cost-meter
dsh plugin --profile <你的 profile> add <git-url-or-path> # 或从仓库/本地目录
装完重启一次 DSH(它是宿主组合里的一行,不是纯运行时热加载)。
Restart the profile afterwards: the plugin is a row in the host composition.
卸载 / Uninstall:dsh plugin --profile <profile> remove dsh-cost-meter
dsh plugin --profile desktop add link:/path/to/dsh-cost-meter
用 link: 装的话,改完文件不需要重新安装:只改浏览器半
(client.js)存盘即生效(HMR 自动换版本);改宿主半
(dsh-cost-meter.mjs)要重启 DSH。
本插件要求 DSH ≥ 0.2.0-rc.2,并已在 DSH 0.2.0-rc.2(Windows 桌面端)上验证。
| 你的 DSH | 装哪个版本 |
|---|---|
| 0.2.0-rc.2 及以上 | 当前版本 |
| 更早 | 未验证 —— 本插件用的是 dsh.bundle.patch + dsh.client 这套声明,较早版本可能没有 |
engines.dsh 只是声明:npm 只校验它认识的引擎名(node / npm),自定义引擎名不参与检查,所以装错版本不会有安装期告警,表现是运行时报错。
装上、重启,然后随便聊几句。底部那一行末尾就会出现:
1 轮 · 3 步 · 12 tok/s 48.2K tok · 缓存命中 93% 已用人民币 0.42 26%
点它,上方弹出明细卡:
本会话花费 ¥0.42
─────────────────────────────────────────────────
缓存命中 93%
未缓存输入 3,412
缓存读取 48,900
输出 1,204
单价(元 / 1M tok) 0.02 / 1 / 4
计费调用 计价 7 次,含回溯 2 次
当前时段 空闲档,2 小时 15 分钟后切换
价目版本 2026-09-10
模型 deepseek-flash
这是整个插件最重要的一条。判断"这通调用该不该计费"看的是 provider 路由名:
deepseek-official · deepseek-account · deepseek · deepseek-api-key
另有兜底:任何以 deepseek- 开头的自有路由
所以:
llm-pi-ai 里的 yuni 之类)→ 不算,一个字符都不显示为什么不用模型名判断:中转站里大量模型就叫 [phythm]Deepseek-v4-flash。按名字判断会把这些第三方渠道的花销算进"官方花费"里,数字立刻变成假的。想额外把某个路由认成官方,写进 cost-config.json 的 providers 就行。
按官方口径,北京时间(Asia/Shanghai):
| 时段 | 什么时候 |
|---|---|
| 高峰(单价 ×2) | 周一至周五 9:00–12:00、14:00–18:00 |
| 空闲(半价) | 其余所有时间,含周末与中国法定节假日 |
明细卡里会写「当前时段」以及还有多久切换(空闲档,2 小时 15 分钟后切换),所以你能决定"要不要等一会儿再跑这活"。
官方对 prompt 侧和输出侧定价不同,且命中/未命中缓存也不同价。DSH 的 TokenUsage 里 inputTokens 就是未命中数(官方定义 prompt_tokens = prompt_cache_hit_tokens + prompt_cache_miss_tokens),所以三类分开算:
花费 = (命中 × 命中价 + 未命中 × 未命中价 + 输出 × 输出价) / 1e6
缓存命中率也按同一口径算:命中 / (命中 + 未命中)。刻意和计费同源 —— 否则会出现"命中率 99% 但金额对不上"这种没法和账单对照的数字。
来源 https://api-docs.deepseek.com/zh-cn/quick_start/pricing(元 / 1M tokens):
| 模型 | 时段 | 命中 | 未命中 | 输出 |
|---|---|---|---|---|
deepseek-flash | 空闲 | 0.02 | 1 | 4 |
deepseek-flash | 高峰 | 0.04 | 2 | 8 |
deepseek-v4-pro | 空闲 | 0.15 | 4.5 | 13.5 |
deepseek-v4-pro | 高峰 | 0.3 | 9 | 27 |
价目表带版本:每条有 from(生效时刻)和 id。历史区间按 effectiveFrom 分段 —— 旧调用永远按当时的价算,不会被新价追溯。官方明文说仍可调用、按 Flash 计价的旧名(deepseek-v4-flash、deepseek-v4-flash-vision-exp)已做映射。
不认识的模型:官方通道上遇到价目表里没有的模型,会记一笔「未计价」并在明细里说明,绝不编一个数字。
${DSH_HOME}/dsh-cost/ledger.json
v2 schema,每个 session 一条:金额、峰谷各自的小计、按模型的桶、调用次数、价目指纹。子代理有独立的会话 id,花销记在各自的账本里 —— 所以底部那一格显示的永远是当前会话的钱,不会把子代理的开销糊进来。
插件的 llm/stream 钩子观测到 usage chunk 就记一笔。适配器一次调用可能吐多个 usage,只记最后一个,且只记一次。
平时永远只做加法。 每次调用往上加一笔,从不回放整个会话。
唯一的例外是价目指纹变了(见下)—— 那时候才精确重放一次,而且按记录的三类 token 与历史峰谷调用次数分摊,不是粗暴地乘一个系数。
中途才装插件的话,只算"从装载那刻起"显然不对。所以每个会话第一次被记账时,插件会去读它的会话日志:
${DSH_HOME}/sessions/<slugified-cwd>/<sessionId>/*.jsonl.zstd
每个 append 是独立的 zstd 帧,所以按魔数 28 B5 2F FD 切片逐帧解压;每条 assistant/message 带着 time 和 data.usage,按各自发生时刻的峰谷档补进账本。防重复的判据是账本里的 firstAt,实时记账与回溯区间严格不重叠。
明细卡里会写「含回溯 N 次」,所以你能看出这个数字的覆盖面。补不到的(比如日志已被清理)会退回显示「从装载那刻起计」。
账本里存着一个定价指纹(价目表 + 峰谷规则 + 节假日表 + 时区 + schema 版本的摘要)。发现某会话的指纹与当前不一致时:
重算带下限保护:只会认得更贵,不会让已显示的金额缩水(避免"数字变小了"这种事发生在已经给你看过的金额上)。
要改价或加新档位:编辑 TARIFFS 新增一条 from 更晚的记录 —— 不要改旧档位的数字,那会让历史被新价追溯。
底部那一格不是自己开一行,而是注册进原生读数行所在的槽位
(conversation.composer.dock,原生 session-stats 就在那儿),order: 10 排在它后面。
排版是逐条抄原生实现的,不是估的:
| 元素 | 抄的是谁 | 关键参数 |
|---|---|---|
| 底部那一格 | @deepseek-ai/dsh-client-ui-chat 的 StatsPills.module.css | font-size: calc(var(--dsh-content-font-size-secondary,13px) - 1px)、color: var(--dsw-alias-label-tertiary)、padding: 1px 8px、border-radius: 999px、图标 14×14 |
| 点击面板 | 官方 stat-dialog.module.css | border-radius: var(--dsw-radius-lg)、background: var(--dsw-specific-menu)、padding: 16px、标题行 + .5px 分隔线 + dl 两列网格 |
悬停只变灰底(与原生那两粒完全一致),不弹任何浮层;明细只在点击时以面板形式给出(点外部或 Esc 关闭)。无障碍名称带一行摘要,键盘 / 屏幕阅读器用户不缺信息。
试过两版悬停提示都被否决了,原因都记在
UI-NOTES.md里:官方Tooltip原语的气泡底色令牌在浅色主题下也是深灰近乎黑(dsw-static-neutral-bluish-850),放在这行浅色读数旁边就是一块黑方块;自绘浅色版则是"根本不需要悬停出东西"。底部那行是"安静读数"的地方。
可选,不建也能跑:
${DSH_HOME}/dsh-cost/cost-config.json
{
"holidays": ["2027-01-01", "2027-02-06"],
"providers": ["my-official-gateway"],
"currency": "CNY",
"showPeakBadge": true
}
| 字段 | 作用 |
|---|---|
holidays | 追加"全天算空闲"的日期。国务院公布当年安排后填这里,改完下个轮询周期生效 |
providers | 额外把这些 provider 路由名认成官方通道 |
currency | 只影响符号显示(默认 CNY) |
showPeakBadge | 是否显示峰谷徽标 |
2026 年节假日表是按近年规律预排的,不是官方原文。影响面很小:某天被误判成高峰,只会让当天那几次调用按高峰价计(正好贵一倍),平时判定不受影响。
GET /dsh-cost/api(借用 harness 自己的信任闸 connection.requestRejection,要用浏览器会话凭据读;裸 curl 会拿到 401,那是对的 —— 404 才说明没挂载)。
| scope | 作用 |
|---|---|
?scope=session&sessionId=… | 指定会话的快照(浏览器半就用这个取数) |
?scope=all | 所有会话的目录 |
?scope=current | 兜底:只有账本里只有一个会话时才敢认,否则说"不知道" |
?scope=dump | 自诊断:账本 + 价目 + 当前峰谷 + 指纹,用来核对数字从哪来 |
108 项断言,0 失败,不需要开浏览器:
node verify/check-client-bundle.mjs # 66 项:浏览器半契约 + 界面口径
node --experimental-vm-modules verify/dsh-cost-selftest.mjs # 42 项:宿主半记账
覆盖的是那些**容易"看着对、其实错"**的地方:
4.505978 → 4.51、0.5 → 0.50、0.0042 不许显示成 0.00(花了钱就得看见)3M/(3M+1M) = 75%StatsPills 的声明side: top)、悬停无浮层、apply 在缺少官方原语时不抛错、无 sessionId 时返回 nullcost-config.json 覆盖。TARIFFS 记录(改完重启)。dsh-cost-meter/
├── dsh-cost-meter.mjs # 宿主半:价目表、账本、llm/stream 计量、回溯、只读路由
├── client.js # 浏览器半:底部那一格 + 点击面板(官方 dsh.client 惰性工厂)
├── cordis.patch.yml # bundle 补丁:本包被装成依赖时插哪一行
├── locale/zh.json # 插件列表里显示的中文名与说明
├── package.json # dsh.bundle.patch(让它进插件列表)+ dsh.client(提供浏览器半)
├── examples/cost-config.json # 可选配置示例(节假日表、额外官方 provider)
├── assets/ # README 图与离线复刻页
├── INSTALL.md # 安装与故障排查
├── UI-NOTES.md # 界面口径:抄了官方哪些声明、为什么,以及踩过的坑
├── CHANGELOG.md
└── LICENSE
MIT —— 见 LICENSE。