bowenliang123/dsh-context
bowenliang123/dsh-contextDSH 上下文洞察面板:Context 仪表盘 + /context命令 + Context 浏览器,查看 Context的分类组成、内容详情、演进趋势、压缩/注入事件、统计等一站式 Context 全生命周期管理。
DeepSeek Harness (DSH) 的本地会话用量看板插件。
装上之后,每次打开新对话空白页,问候语下方会多出一张统计卡片:看看你一共开了多少次会话、发了多少条消息、烧了多少 Token、最常在几点干活、最爱用哪个模型,外加一张活跃度热力图和一句按经典小说字数折算的对比。
所有数据都从你本机 ~/.dsh/sessions 下的会话日志里聚合,纯本地计算,不发任何外部请求。
在命令行运行,或在 DSH 的 设置 → 插件 → 添加插件 里直接输入 @hwfee/dsh-usage-stats:
dsh plugin --profile desktop add @hwfee/dsh-usage-stats装完或卸完后必须彻底退出并重开 DSH。
卸载:
dsh plugin --profile desktop remove @hwfee/dsh-usage-statsuser/message 的会话,空会话不算;已删除的会话仍然算,见下文第 3 条)、消息总数、总 Token、活跃天数、高峰时段(12 小时制)、最常用模型。如果同时装了 dsh-cds-theme,下面这两行设置会自动出现在 设置 → 主题定制 最底部;没装主题插件时,它们会自动落回 设置 → 通用设置:
240–520 px(步进 4px,默认 344px)。调小高度时,总览页会按「先缩热力图格子 → 再收间距 → 最后微调卡文字号」的顺序等比缩放,绝不会出现竖向滚动条;总览和模型两个标签页共用同一个高度,切换标签时底下的输入框不会上下乱跳。1.2万、1.23亿)或 K/M/B(1.2K、123M),默认跟随界面语言(中文用万/亿,英文用 K/M/B)。DSH 的会话日志(*.zstd)是多个 zstd 压缩帧首尾直接拼接写进去的。如果直接拿 Node 自带的 zlib.zstdDecompressSync 去解整个文件,它只会解出第一帧,后面追加的所有对话都会被静默丢掉,算出来的 Token 少一大截。
lib/usage-store.js 的做法是按 zstd 帧魔数(28 B5 2F FD)把文件切开,逐帧解压后再按行解析 JSON。
百来个会话文件大约有 50 MB 压缩数据、两万多个 zstd 帧。第一次冷启动全量解压需要约 2 秒;解析完后,每个文件的摘要会按 (路径, mtimeMs, size) 持久化写进 ~/.dsh/cache/usage-stats/(故意不放系统临时目录,防止被 Windows 存储感知定期清掉)。之后每次重启 DSH 并在后台分批预热,打开新会话几乎是瞬开。
看板的数字不是「磁盘上现在有什么」,而是一本累计账本:每个会话一行,存在 ~/.dsh/cache/usage-stats/ledger-.json。会话继续写的时候整行替换,日志被删掉时行不删。
workspace.json 里加一个 id,日志原地不动——有没有账本都会被统计。~/.dsh/sessions/...//session.v4.jsonl.zstd,只有账本还记得它。ledger-.json(下一次打开会从现存日志重建);?refresh=1 只重读日志,不动账本。面板样式全部使用 --dsw-alias-* 和 --dsw-radius-* 宿主变量,不写死任何色值。不管你用 DSH 原生明暗主题,还是装了 dsh-cds-theme 切陶土橙、调圆角,看板都会自动跟着变。
面板的每一层都是半透明的,空白页的海面动画能从面板、卡片和热力图后面透出来:外壳 52%、热力图底 20%,热力格按活跃度 12/22/32/42% 递进(最热的一格也仍然透光)。六张指标卡只铺 6% 的淡色底纹,靠内描边(.5px border-l2,用 inset 阴影画,不占布局)区分彼此——六格清清楚楚分得开,同时不挡后面的画面。文字不跟着变淡:只是底色透,字还是宿主原色。
npm ci # 仅安装开发期打包工具 esbuild,零运行时依赖
npm run build # 编译客户端产物:client/src/* -> client/client.js
npm test # 产物新鲜度检查 + 清单契约 + 8 个测试文件(条数以输出为准)详细的接口与缓存设计契约见仓库根目录的 docs/usage-stats-contract.md。