DeepSeek Harness plugin

dsh-board

dsh client panel bundle: a live AI-styled monitor strip above the composer — token usage, context occupancy, background jobs, subagent state, and turn timing.

Jump to install

Source facts

Repository
dfkai/dsh-board
Latest update
Aug 19, 2026
Category
Workflow & Automation
GitHub stars
7
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/dfkai/dsh-board
Plugin: dsh-board
Author: dfkai

Check the source files

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

File explorer4 files
README.en.mdSource · read only
README language

dsh-board

简体中文 · English

A sidebar usage & cost dashboard for DeepSeek Harness (DSH) — DeepSeek-backend-style usage stats in the bottom-left of your web GUI.

<img src="assets/demo.gif" alt="dsh-board demo" width="100%">

![npm](https://www.npmjs.com/package/dsh-board) ![version](https://github.com/dfkai/dsh-board/releases) ![license](./LICENSE) ![plugin](https://github.com/deepseek-ai/deepseek-harness/discussions/2340) ![CI](https://github.com/dfkai/dsh-board/actions/workflows/ci.yml)

Features

  • 💰 Cost estimates — official list prices plus automatic Beijing peak/off-peak switching from 2026-08-17 (peak 09:00–12:00 and 14:00–18:00, off-peak is half of peak); reasoning tokens billed at the output rate; see the billing notes below
  • 🧠 1M context — occupancy %, remaining budget, a system/tools/messages composition stack, and subagent time
  • 📈 Charts — per-turn input/output bars, cumulative output area, 12-week daily heatmap, per-model stats, all-sessions leaderboard
  • 🏆 Word Guild ladder — ten rungs of word-pun ranks (🌱 the Unawakened Sprout → 🧲 Wordlord → ⚡ Ten-Trillion Word God) as a membership card: progress bar, unlock ETA, per-tier perks
  • 🔥 Achievements — daily streak plus 9 data-driven badges
  • 🎨 Design — Geist-style restraint, light/dark themes, zh/en localization, zero decorative animation
  • 🖼 Landscape badge — collapsed it is a menu-width tile (rank tag + ¥ cost + total tokens + today/this week); clicking rides the badge to the top of the expanded panel, clicking again collapses it

Install

# npm (recommended)
dsh plugin --profile <profile> add dsh-board@0.2.0
# or straight from GitHub
dsh plugin --profile <profile> add github:dfkai/dsh-board@v0.1.0

Restart the profile (or start dsh --profile <profile> fresh) and the badge appears at the bottom of the left sidebar. Verify:

dsh --profile <profile> --dump-config   # should contain the # == dsh-board layer

> Harness requirement: counting reasoning tokens at the output rate needs the harness token-meter fix. The patch is posted in the official community (discussions/2338; merge-ready branch dfkai/deepseek-harness@fix/token-meter-reasoning-output). On older harnesses the per-turn/per-model charts still include reasoning, but lifetime totals and cost undercount it.

Disabling & configuration

The plugin row is addressable by id: board. Append to your profile's cordis.patch.yml to disable it:

- id: board
  disabled: true   # turn the panel off

disabled accepts !!js expressions, so it can be toggled conditionally. Price tables are source-level constants (see below); change them and rebuild.

Billing notes

The panel shows estimates, not a billing statement — the DeepSeek platform bill is authoritative.

Standard prices (¥ per 1M tokens, fetched 2026-08-15 from the official price list):

ModelCache hitCache missOutput
deepseek-v4-pro0.02536
deepseek-v4-flash0.0212
deepseek-chat (legacy)0.528
deepseek-reasoner (legacy)1416

Peak/off-peak (effective 2026-08-17 00:00 Beijing time; peak 09:00–12:00 and 14:00–18:00, off-peak is half of peak):

ModelWindowCache hitCache missOutput
deepseek-v4-propeak0.309.027
off-peak0.154.513.5
deepseek-v4-flashpeak0.103.09
off-peak0.051.54.5

Notes:

  • Reasoning tokens are counted at the output rate (DeepSeek's billing semantics); reasoningTokens is folded into output
  • This-session cost uses the dominant model; lifetime cost prices each session at its last-activity moment with that session's dominant model (unknown models fall back to v4-pro)
  • Unknown models fall back to the default model's rate in the table of the current moment

Data & privacy

All data comes from the local DSH public seams (session.list projections + the session.history RPC). The plugin makes no third-party network requests; the only persistence is the panel collapsed state in browser localStorage.

FAQ

Why are total tokens in the billions?

The accounting matches the DeepSeek backend: every turn re-prices the context prefix at the cache-hit rate. A 1M-window session reaches hundreds of millions of hit tokens after a few dozen turns — they are extremely cheap (¥0.025/M); the panel's "cache hit N%" figure separates the cheap reads from real spend.

Is the cost accurate?

It follows the official price list (peak/off-peak aware, reasoning included) but is not a billing statement. Lifetime cost uses each session's dominant model and last-activity moment; the DeepSeek platform bill is authoritative.

Does any data leave my machine?

No. All statistics are computed locally with no outbound requests.

Development

pnpm install
pnpm build                  # build lib/
pnpm sync -- <profile dir>  # sync into an installed copy, HMR hot-reloads
  • src/ changes: build → sync → browser hot-reloads. Only manifest changes (package.json / cordis.patch.yml) need a reinstall + restart.
  • Headless verification (optional):
python3 -m playwright install chromium
python3 test/e2e.py                 # badge/panel mount + console error check
python3 test/drive-turn.py '...'    # drive a real turn and read panel values

Architecture

Public seams only:

SideContents
Host half src/index.tsregisters one read-only dominantModel session projection so lifetime cost uses each session's real model; zero writes
Browser half src/client/*ctx.slots.inject('sidebar.footer.action', …) registers the badge; data = session-list store projectionValues + session.history RPC folding
Build tsdown.config.tsCJS closure factory (window.__ModuleLoader__.load) + platform whitelist externals

License

[MIT](./LICENSE)