bowenliang123/dsh-context
bowenliang123/dsh-contextDSH 上下文洞察面板:Context 仪表盘 + /context命令 + Context 浏览器,查看 Context的分类组成、内容详情、演进趋势、压缩/注入事件、统计等一站式 Context 全生命周期管理。
右侧会话统计面板,展示平均缓存命中率、会话成本、运行时长、请求数、累计 token 与账户余额。
A DeepSeek Harness (cordis) client plugin that shows a stats panel for the current session on the right side of the page:
| Metric | Description |
|---|---|
| Average hit | Share of cache-hit input tokens (cacheReadTokens / billed input, accumulated across whole-round logs, 3-decimal precision) |
| Session cost | Accumulated cost estimated with DeepSeek official pricing (DeepSeek models only, see pricing below) |
| Remaining balance | DeepSeek account balance (read by the host route; the key stays server-side; refreshes every 2 minutes) |
| Runtime | Accumulated LLM + tool execution time |
| Requests | Number of closed model steps (steps, i.e. model request count) |
| Cumulative tokens | Input (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.
tokenUsage (token-meter projection) → cumulative tokens, average hit, cost;sessionStats (session-stats projection) → request count, runtime;session.models, same source as the model picker — chat nodes carry no model field themselves);/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).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):
| Model | Period | Cache-hit input | Cache-miss input | Output |
|---|---|---|---|---|
| deepseek-flash | off-peak | 0.02 | 1 | 4 |
| deepseek-flash | peak (weekday peak hours) | 0.04 | 2 | 8 |
| deepseek-v4-pro | off-peak | 0.15 | 4.5 | 13.5 |
| deepseek-v4-pro | peak (weekday peak hours) | 0.30 | 9.0 | 27.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.
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).
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"
Append a loader row to $env:USERPROFILE\.dsh\profiles\web\cordis.patch.yml:
- insert:
- id: session-stats-panel
name: 'dsh-session-stats-panel'
Restart the web service (dsh web). Afterwards, edits to lib/client.js are picked up by client-hot-reload (no browser refresh needed).
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.npm test # run the pricing/derivation unit tests
node --check lib/*.js # syntax-check every JS file
See CONTRIBUTING.md for house rules.