qiushui0901
dsh-token-stats
Cross-session token usage statistics panel for DeepSeek Harness: monthly stacked cost chart by provider and model
- Stars
- 1
- Language
- JavaScript
- Created
- Aug 15, 2026
- Updated
- Aug 15, 2026
Introduction
dsh-token-stats
Cross-session token usage statistics for DeepSeek Harness: a Settings panel with a monthly stacked cost chart broken down by provider and model (USD), month navigation, provider/model filters, and a per-model legend.
Built as a standalone bundle (the harness's installable plugin format) — no changes to the core repository needed.
Features
- Overview — usage-bearing session count, the four provider-reported token buckets (uncached input, cache read, cache write, output), the grand total, and the estimated cost split per matched price table.
- Monthly cost chart — stacked bars of each day's per-model cost for the displayed month, with
</>month navigation, provider and model filters, gridlines with fixed two-decimal USD ticks, and a color-coded legend. - Per-model pricing — usage is priced via exact provider/model table matches (seeded with a
deepseek / deepseek-v4-flashrow), everything else falls back to the default table. Prices are fixed constants in this version; adjustDEFAULT_PRICES/DEFAULT_PRICE_TABLESinsrc/client/usage-aggregate.tsand rebuild if you need different rates. - Data honesty — sessions whose cached projections predate the per-model units (or deployments without them) are counted as "no model data" and priced at the default table, with an explicit hint.
How it works
The bundle has two halves:
- Host half (
src/host/) — registers two session projection units,modelUsage(per provider/model session totals) andmodelDailyUsage(per provider/model/UTC-day cells), following the@deepseek-ai/dsh-token-meterpattern. Registration is idempotent against deployments that already ship the same units (the registry shares same-stateVersionkeys), so it is safe on both release builds and source checkouts that already carry them. - Client half (
src/client/) — asettings.sectioncontribution (Token 用量) that reads thesession.listprojection column (zero log loads) and renders the panel. Day cells are shifted from UTC to your local days for display.
Install
Prerequisite: a DeepSeek Harness installation (the dsh CLI or a source checkout).
From npm (once published)
dsh plugin --profile <name> add dsh-token-stats
dsh --profile <name> web
From this repository
git clone https://github.com/qiushui0901/dsh-token-stats.git
cd dsh-token-stats
npm install && npm run build
dsh plugin --profile <name> add ./dsh-token-stats
dsh --profile <name> web
From a source checkout of DeepSeek Harness
pnpm dsh web --patch /path/to/dsh-token-stats/cordis.patch.yml
(with dsh-token-stats linked into the checkout's node_modules, or installed into the profile the checkout boots.)
Open http://127.0.0.1:3080 → Settings → Token 用量.
Build
npm install
npm run build
Produces lib/host.js (self-contained Node entry) and lib/client.js (browser closure-factory bundle registered via window.__ModuleLoader__.load).
Known limitations
- Model data fills forward — sessions that ran before the
modelUsage/modelDailyUsageprojections existed stay unattributed until their projection cache rows rewrite; their usage is priced at the default table. - Day bucketing is UTC-shifted — the host folds cells under UTC days and the client shifts by its timezone offset rounded to whole days, so a day's cells can sit on the neighbouring local day near the boundary.
- Prices are constants — the price tables are baked into the bundle; there is no in-UI editor (the editor was removed by request).
License
MIT — see LICENSE. Built on the DeepSeek Harness plugin system (MIT), which this project gratefully builds upon.