helloxkk/dsh-scope
为DeepSeek Harness(dsh)提供上下文可见性及GitHub风格使用热力图——Codex风格的/context透镜加53周贡献图。
项目介绍Project Overview
dsh-scope 是 DeepSeek Harness 的上下文可视化插件,在会话头部显示上下文窗口占用、系统/工具/消息构成及 KV 缓存命中率,并在侧栏提供 53 周 token 用量热力图,可按日查看分桶、缓存、会话数与模型排名。适合需要监控上下文压力或回顾历史用量时使用。数据经官方投影与本地回环聚合,不外发;需 dsh ≥0.1.0-rc.6,预览版可能有兼容变更。
dsh-scope is a DeepSeek Harness plugin that adds context visibility: a session-header lens shows live context-window occupancy, system/tools/messages composition, and KV-cache hit rate, while a sidebar heatmap displays 53 weeks of token usage with daily bucket, cache, session, and model breakdowns. Use it to monitor context pressure or review historical usage. It reads official projections and serves loopback-only aggregation; requires dsh ≥0.1.0-rc.6, and preview releases may break compatibility.
请帮我了解并安装插件:【dsh-scope】【https://github.com/helloxkk/dsh-scope】
把上面这条消息直接发给当前会话里的 DSH,让它帮你了解并安装。安装命令不一定准确,发给 DSH 更稳。Send this message to DSH in your current session. CLI install commands may not be accurate across systems — DSH will figure it out for you.
或使用命令行安装(适合开发者)Or use CLI install (for developers)
命令行安装CLI Install
dsh plugin --profile web add dsh-scope
把 helloxkk/dsh-scope 加入你的 DSH 配置(web profile)即可启用。
READMEREADME
dsh-scope
English · 简体中文
Context visibility for DeepSeek Harness (dsh) — a Codex-style /context lens for every session, plus a GitHub-style usage heatmap for your whole history.
Two UI contributions, one plugin:
- Context Lens (session header) — live context-window occupancy with a segmented system / tools / messages composition bar, per-bucket session totals, and KV-cache hit rate. All data flows through the official
token-metersession projections viauseProjection— no RPC, no custom wire protocol. - Usage Heatmap (sidebar footer) — a GitHub-contribution-graph-style rolling 53-week token-usage grid. Click any day for the four token buckets, cache hit rate, session count, and per-model ranking. Fed by this plugin's own loopback-only aggregation endpoint.
Screenshots

Why
DeepSeek Harness treats wording and context as first-class engineering concerns, yet the stock Web UI shows no context occupancy and no usage history. dsh-scope fills both gaps the harness-native way: reading the projections the platform already computes, styling with the platform's design tokens (--dsw-alias-*), and mounting through the platform's slot registry — light/dark themes both correct with zero media queries.
Install
Requires dsh ≥ 0.1.0-rc.6 on your PATH.
dsh plugin --profile web add dsh-scope
dsh web # restart dsh to load the plugin
Install from source
git clone https://github.com/helloxkk/dsh-scope.git
cd dsh-scope
npm install && npm run build
node scripts/install.mjs web # or: node scripts/install.mjs <profile>
dsh web # restart dsh to load the plugin
The installer copies lib/, cordis.patch.yml, and package.json into the profile's node_modules and appends the bundle insert to the profile's cordis.patch.yml (idempotent — safe to re-run after every rebuild).
Uninstall
rm -rf ~/.dsh/profiles/web/node_modules/dsh-scope
# then remove the "# dsh-scope" block from ~/.dsh/profiles/web/cordis.patch.yml
rm -f ~/.dsh/storages/dsh-scope-cache.json # optional: drop the fold cache
How it works
Client half (lib/client.js, loaded via the package's dsh.client declaration):
conversation.session.header.actions(order 30, after the job list) renders the lens trigger: an occupancy ring with the live percentage. The popover reads three official projections —tokenUsage(four buckets accumulated over the whole durable log),contextPressure(input-side window pressure + the route's context window), andcontextBreakdown(heuristic system/tools/message composition of the next request).sidebar.footer.actionrenders the heatmap trigger (label when the sidebar is wide, icon on the rail). The popover fetchesGET /api/dsh-scope/dayssame-origin.
Host half (lib/index.js): one read-only, loopback-fenced endpoint (/api/dsh-scope/days). Aggregation is incremental: per-session fold state is cached in memory and persisted to ~/.dsh/storages/dsh-scope-cache.json; each request folds only events added since the last fold. Live sessions fold their in-memory tail; persisted sessions use the storage backend's opaque revision and readFrom(id, fromSeq), with contiguity checks and a full refold on log rewrites. Steady-state cost stays O(new events) no matter how large the logs grow.
Fold semantics mirror dsh-token-meter's tokenUsage projection: a usage sample rides an assistant/chunk (data.chunk.type === "usage") or assistant/message (data.usage); a repeated sample for the same (turn, step) replaces the earlier value instead of double counting, re-attributed to the later event's day and model. Model attribution follows assistant/message's data.message.source, falling back to the last request/header config.
Nothing is sent anywhere: the endpoint refuses non-loopback callers and non-GET methods before any work, and no provider credentials are read.
Development
npm run build # tsdown: host ESM + browser ModuleLoader bundle
node scripts/fixture-session.mjs # optional: write a demo session log with usage events
node scripts/install.mjs web && dsh web
Compatibility
Built and verified against dsh 0.1.0-rc.6 (@deepseek-ai/dsh-base / dsh-web-app bundles). The harness is in developer preview and iterates quickly — expect compatibility-breaking changes.
License
MIT
nexu-io/open-design
ruvnet/ruflo
amruthpillai/reactive-resume
esengine/DeepSeek-Reasonix
volcengine/OpenViking
Molunerfinn/PicGo
titanwings/distilly
titanwings/colleague-skill