a1113622001/dsh-session-stats-panel

a1113622001/dsh-session-stats-panel

右侧会话统计面板,展示平均缓存命中率、会话成本、运行时长、请求数、累计 token 与账户余额。

用量与计费

dsh-session-stats-panel

A DeepSeek Harness (cordis) client plugin that shows a stats panel for the current session on the right side of the page:

MetricDescription
Average hitShare of cache-hit input tokens (cacheReadTokens / billed input, accumulated across whole-round logs, 3-decimal precision)
Session costAccumulated cost estimated with DeepSeek official pricing (DeepSeek models only, see pricing below)
Remaining balanceDeepSeek account balance (read by the host route; the key stays server-side; refreshes every 2 minutes)
RuntimeAccumulated LLM + tool execution time
RequestsNumber of closed model steps (steps, i.e. model request count)
Cumulative tokensInput (miss) + cache-read + cache-write + output, shown with thousands separators (e.g. 3,251,237)

The panel registers in the framework's shell.overlay layer (a list slot — it stacks rather than replaces any existing UI), is pinned to the right edge of the page, and collapses to a small pill when you click the "–" in the title bar.

Data sources

  • tokenUsage (token-meter projection) → cumulative tokens, average hit, cost;
  • sessionStats (session-stats projection) → request count, runtime;
  • The current model comes from the session models RPC (session.models, same source as the model picker — chat nodes carry no model field themselves);
  • The remaining balance comes from the route /plugins/session-stats-panel/balance registered by this plugin's host half (the server resolves DEEPSEEK_API_KEY through the credentials service and calls the DeepSeek balance API; the key is never sent to the browser).

Pricing

Cost is estimated in the browser with a price table built into the plugin (CNY / million tokens, fetched from the DeepSeek official pricing page; cache writes are billed at the cache-hit price).

Official peak/off-peak pricing rules (peak windows are weekdays only, Beijing time 09:00–12:00 and 14:00–18:00; everything else — including all of Saturday and Sunday — is off-peak, priced at half the peak rate):

ModelPeriodCache-hit inputCache-miss inputOutput
deepseek-flashoff-peak0.0214
deepseek-flashpeak (weekday peak hours)0.0428
deepseek-v4-prooff-peak0.154.513.5
deepseek-v4-propeak (weekday peak hours)0.309.027.0

CNY per million tokens; cache writes are billed at the cache-hit price.

deepseek-flash (DeepSeek-V4.1-Flash) and deepseek-v4-pro (DeepSeek-V4-Pro-0813) are the current official ids. The retired deepseek-v4-flash / deepseek-v4-flash-vision-exp ids are still callable — requests are served by DeepSeek-V4.1-Flash and billed at Flash prices — so they share the Flash row. Versioned ids (deepseek-v4-pro-0813, deepseek-v4-flash-0731) resolve to their family rather than the fallback, and any other deepseek-* model falls back to the Flash price.

The plugin auto-selects the price tier at "view time" (peak / off-peak; hover the cost row to see the tier). Session cost is an estimate: cumulative tokens cannot be sliced by time, so the whole amount is priced with whichever tier is active at view time.

Installation (web profile)

dsh plugin add github:a1113622001/dsh-session-stats-panel

The plugin ships a cordis.patch.yml bundle patch, so the plugin add command installs it as an installable plugin that activates automatically (no manual loader row needed).

Manually from a local directory

  1. Install the dependency (equivalent to dsh plugin --profile web add <this directory>):

    corepack pnpm --dir "$env:USERPROFILE\.dsh\profiles\web" add "C:\Users\baiyec\Desktop\Harness\plugins\dsh-session-stats-panel"
    
  2. Append a loader row to $env:USERPROFILE\.dsh\profiles\web\cordis.patch.yml:

    - insert:
        - id: session-stats-panel
          name: 'dsh-session-stats-panel'
    
  3. Restart the web service (dsh web). Afterwards, edits to lib/client.js are picked up by client-hot-reload (no browser refresh needed).

Project structure

  • lib/index.js — host half (registers the /plugins/session-stats-panel/balance route that resolves DEEPSEEK_API_KEY server-side);
  • lib/client.js — browser half (window.__ModuleLoader__ bundle format, registers the shell.overlay slot);
  • lib/pricing.js — pure pricing/derivation/formatting logic, kept dependency-free so it can be unit-tested (mirrors the in-bundle constants in lib/client.js);
  • cordis.patch.yml — bundle patch so dsh plugin add github:... installs and activates the plugin;
  • package.json — declares dsh.client.platform: "web"; client-modules scans and serves /plugins/dsh-session-stats-panel/client.js.

Development

npm test        # run the pricing/derivation unit tests
node --check lib/*.js   # syntax-check every JS file

See CONTRIBUTING.md for house rules.

License

MIT