DeepSeek Harness plugin

dsh-token-usage-dashboard

Codex 风格 Token 用量统计仪表盘:5 统计卡 + 每日/每周热力图 + 洞察 + 模型用量排名(DeepSeek Harness 插件)

Jump to install

Source facts

Repository
solstice621/dsh-token-usage-dashboard
Latest update
Aug 15, 2026
Category
Models & Providers
GitHub stars
0
Format
plugin
Catalog evidence
Upstream dsh.bundle evidence
Evidence path
package.json#dsh.bundle
Checked against
0.1.0-rc.8
Upstream check date
2026-08-20

This evidence comes from the upstream catalog. This site has not installed, run, or security-reviewed the plugin.

Install

Start with a prompt that asks an agent to review the GitHub repository and source. Switch to the command if you want to install it yourself.

Copy this prompt into DSH, Codex, or another agent and ask it to review the GitHub repository and source first.

Do not install or run any commands yet. Read this plugin's GitHub repository, README, and relevant source code. Then answer the questions below clearly and directly so I can decide whether it fits my needs:

1. What is this plugin, and what problem does it solve?
2. Who is it for, and what are its typical use cases?
3. How is it used after installation? Include one minimal example.
4. What known limitations or privacy, security, compatibility, or maintenance risks does it have?
5. Give a clear recommendation: recommend, conditionally recommend, or do not recommend, with reasons.

Distinguish statements documented by the repository, inferences from source code, and unknowns. If evidence is insufficient, say so explicitly. Do not guess or simply repeat the README.

GitHub: https://github.com/solstice621/dsh-token-usage-dashboard
Plugin: dsh-token-usage-dashboard
Author: solstice621

Check the source files

Read the README and other files from this plugin directory before installing.

File explorer5 files
README.mdSource · read only
README language

dsh-token-usage-dashboard — Codex-style token usage dashboard

![License: MIT](LICENSE) ![dsh-plugin](https://github.com/topics/dsh-plugin) ![deepseek-harness](https://github.com/topics/deepseek-harness)

English | 简体中文

A Codex-style token usage dashboard for DeepSeek Harness (dsh) Web UI: 5 stat cards + a GitHub-style activity heatmap (daily / weekly) + insights + per-model usage ranking. The UI follows the DSH language setting: Chinese interface → Chinese dashboard, anything else → English.

![dsh-token-usage-dashboard screenshot](assets/dsh-token-usage-dashboard.png)

✨ Features

  • 5 stat cards: total tokens / peak tokens (single day) / longest chat / current streak / longest streak; auto-shrinking one-line values
  • Heatmap: 53×7 rolling grid (today pinned to the bottom-right corner), hover for Aug 15, 2026: 273k tokens · 34 requests;

Daily / Weekly view toggle (weekly = bottom-up 7-cell bars, hover for the week total)

  • Insights: total turns, LLM requests, sessions, active days, cache hit rate, avg tokens & duration per turn
  • Favorite models: provider/model token ranking (Top 5) with ratio bars
  • Data source: session logs (assistant/message usage + request/header model attribution + turn/start/turn/end durations), live incremental updates, persisted snapshot + incremental sync for fast restarts

🏗️ Architecture

The plugin has two runnable forms that share the same aggregation logic:

  • Bundle form (recommended for end users): installed via dsh plugin add; the npm package contains lib/index.js (host half) and lib/client.js (client half). The host half registers GET /api/token-stats and POST /api/token-stats/rescan through the web server; the client half registers a "Settings → Stats" section and fetches the API.
  • Dynamic-plugin form (for maintainers/iteration): host.js and client.js are pasted into cordis_define for in-session deployment without restarting the profile.

Data flow:

1. Host subscribes to session/event / session/created and also performs an initial backfill over historical session logs. 2. It folds assistant/message.usage, request/header model attribution, and turn/start/turn/end durations into in-memory aggregates. 3. Aggregates are periodically flushed to ~/.dsh/storages/token-stats/snapshot.json; on restart the snapshot is loaded first, then only new events are incrementally folded. 4. The client polls GET /api/token-stats (2s while scanning, 30s after ready) and renders the dashboard.

🚀 Install (bundle)

dsh plugin --profile web add github:solstice621/dsh-token-usage-dashboard
dsh --profile web   # restart to apply

Then open Settings → Stats for the full dashboard. Local install: dsh plugin --profile web add file:/path/to/dsh-token-usage-dashboard.

> On first open the plugin scans all historical sessions (seconds to a minute), then updates > in real time via session/event; the dashboard auto-refreshes every 30s — no manual action needed.

🧑‍💻 Dynamic-plugin deployment (maintainers)

This repo also maintains a dynamic Cordis plugin (toksta-5, deployed in-session via cordis_define, handy for iterating without restarting the profile):

1. Verify contracts with cordis_inspect_list / cordis_inspect_query (sessionQuery, session/event, session/created, harness, React/host/styles builtins, settings.section, timer, locale); 2. cordis_define: plugin.kind: "new", idPrefix: "toksta", code.host = host.js, code.client = client.js; 3. cordis_run (mode=run/update) to activate.

> ⚠️ The bundle and the dynamic plugin register the same settings section id (token-stats); > don't run both at once — stop one before enabling the other.

📁 Files

FileDescription
lib/index.jsBundle host half: folder + backfill + live listeners + GET /api/token-stats (POST /api/token-stats/rescan as fallback)
lib/client.jsBundle client half: window.__ModuleLoader__.load factory, registers "Settings → Stats"
cordis.patch.ymlbundle patch: inserts the id: token-stats plugin row
package.jsonnpm package manifest (dsh.bundle / dsh.client)
host.js / client.jsDynamic-plugin host/client function bodies (paste into cordis_define)
plugin.jsonPlugin metadata & package history (pkg-9 … pkg-27)
plan.md / progress.mdDesign docs & progress log (incl. every bug/fix)
assets/dsh-token-usage-dashboard.pngDashboard screenshot

✅ Acceptance checklist

  • [ ] Settings → Stats: 5 equal-width cards, one-line values, aligned labels
  • [ ] 53-column heatmap, today at bottom-right, year-month-day hover tips; Daily/Weekly toggle works
  • [ ] Month axis aligned to columns; no horizontal scrollbar
  • [ ] Insights (7 rows) and Top-5 model ranking with bars correct
  • [ ] New conversations show up within 30s
  • [ ] Language switch (zh ↔ en) relabels the whole dashboard on the fly

🩺 Troubleshooting

SymptomCause / fix
pnpm not found on PATHdsh plugin needs pnpm: corepack enable pnpm (bundled with Node ≥16.10)
Two "Stats" sections in Settingsbundle + dynamic plugin (toksta-5) both active; stop one
Plain text, no styles at allCSS not injected: dynamic styles is a Client Builtin (styles.insert(css)), not ctx.get('styles'); bundle injects via <style>
Client render crash ctx is not definedctx only exists in apply(ctx); components use the module-level timer bridge (intervalRef = (cb, ms) => ctx.interval(...))
service "timer" is not declaredclient has no timer Service; drop inject: ['timer']
Horizontal scrollbar flashes under the heatmapold month-label nowrap text inflated scrollable overflow; container & month row are overflow:hidden now
console.warn throwsHost builtins only expose console.log/error; use console.error

📐 Known boundaries

  • Only calls whose adapter reports usage are counted (skipped when assistant/message.usage is absent);
  • Model attribution: assistant/message has no model field — usage is attributed to the session's latest

request/header provider/model;

  • Current streak counts to yesterday when today has no usage; interrupted (unclosed) turns add no duration;
  • Title-generation calls (session/title-llm-request) are not counted.

🌐 Ecosystem

(verified, one-click install pinned to github:solstice621/dsh-token-usage-dashboard#<commit>, auto-refreshed every 2h);

📄 License

MIT