dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
DSH 官方桌面版「使用统计」插件:设置页新增使用统计分区——五格摘要条 / 52 周 Token 热力图(每日·每周·累计三档)/ 今日·近 7 日·近 30 日趋势折线 / 模型用量环形图。全本地 JSONL 落盘,零上传、零运行时依赖,支持历史会话回填。
English | 中文
DSH 官方桌面版的「使用统计」插件:在设置页新增「使用统计」分区,照 ZCode 开源版界面呈现 Token 用量——五格终身摘要条、GitHub 式热力图、趋势折线、模型用量环形图。数据全部来自本机(实时事件采集 + 历史会话回填),零上传、零新依赖。
package.json 为准;变更记录见 CHANGELOG.md)~/.dsh/usage-stats/(默认,可经 storageRoot 配置),不上传任何远端node:zlib 的 zstd 解压);零运行时依赖(无需 npm install)面板挂在设置页「使用统计」分区(settings.section order 13,排在其它既有分区之后),标题「使用统计」,副题「查看会话活跃度与模型用量的粗略统计。」以下每条都是用户在设置页实际看到的内容。
一排五格:累计 Token 数 / 单日峰值 Token 数 / 最长聊天时长 / 当前连续天数 / 最长连续天数。大数字用短格式(≥1 万显示「x.x 万」,≥1 亿显示「x.x 亿」)。每格悬停给出精确值与口径说明(峰值是哪一天、累计自哪一天起、连续天数怎么算)。口径:
GitHub 式格子,最近 52 个自然周(周日起始,末列对齐当前周),下方一行月份标签。右上胶囊三档切换:
时间范围胶囊(标题「趋势与模型用量」):今日 / 近 7 日 / 近 30 日(默认近 30 日)。
中心显示所选时间范围的 Token 总量(短格式),右侧图例两行式:上行 = 模型名 + 占比(≥10% 取整数、<10% 一位小数),下行 = 该模型 token 数(悬停给精确值)。用量前 6 的模型各占一色,超过 6 个模型归并为灰色「其他模型」(该行悬停列出被并入的模型名)。悬停扇区或图例行弹出数据卡片。今日档同样可用(今日分模型用量从今日趋势数据求和得出,数值等价)。
装载即自动回填全部历史会话(~/.dsh/sessions 下的多帧 zstd 会话文件逐帧解压 + fork 继承前缀按内核标记剪切去重),增量幂等:已记账的会话秒级跳过;稳态装载绝大多数历史会话零解压(少数「有水位无 mtime」的会话例外,见「已知限制」)。
GET /api/dsh-usage-stats/backfill/status(running / startedAt / scanned / total / backfilled / records / lostFrames / finishedAt / error)。热力图与趋势折线各只占一个 Tab 停靠点:聚焦后用 ← → ↑ ↓ 移动游标(热力图为「一周 / 一天」,趋势为「一点」),首次按键的游标默认落在今天 / 最新一点(不从一年前起步),Home/End 跳到两端,游标处弹出与鼠标悬停同一张数据卡片(热力图上游标格带描边,缺勤日也看得见落点),焦点离开图表即收起。档位与范围胶囊带 aria-pressed,图表容器带 role="img" 与一句话概述,读屏可读。趋势图例可点击隐藏/恢复某条线(隐藏项置灰划线,配色不重排)。
两种渠道任选(零运行时依赖,全程无需 npm install):
① GitHub tag tarball(推荐) —— 从仓库 tag 直接安装,锁定版本:
dsh plugin --profile desktop add https://github.com/axuan-1314/dsh-usage-stats/archive/refs/tags/v0.2.0.tar.gz
# profile 可选 web / headless / desktop
② 本地克隆(开发 / 自用) —— 源码改动即时生效,适合改代码:
git clone https://github.com/axuan-1314/dsh-usage-stats.git
dsh plugin --profile desktop add <克隆到本地的仓库路径>
装完验证 entry 入树:dsh --profile desktop --dump-config。
插件自带 cordis.patch.yml,装载后自动生效。
改代码 / 换版本后要跑新代码:web profile 由 HMR 自动重载;desktop / headless 需重启对应实例(桌面端重启应用;headless 每次启动天然取最新)。本地克隆渠道是
link:软链,源码改动无需重新安装。
DSH 的插件管理器不支持自动更新。所以升级 = 换新版本号重跑一次安装命令:
# tag tarball 渠道:把 URL 里的 v0.2.0 换成新版本号(版本号见 Releases / CHANGELOG.md)
dsh plugin --profile desktop add https://github.com/axuan-1314/dsh-usage-stats/archive/refs/tags/v0.2.1.tar.gz
# 本地克隆渠道:git pull 后无需重装(软链生效)
~/.dsh/usage-stats/——在插件包目录之外,卸载 / 重装都不碰它(除非你手动删除该目录)。数据与代码分离是刻意设计。GET /api/dsh-usage-stats/summary。~/.dsh/usage-stats/:records-YYYY-MM.jsonl 笔级增量流水(按月轮转,唯一真源)、daily/YYYY-MM-DD.json 日聚合缓存(可随时从流水全量重建)、backfill-marker.json 回填游标、lock 单写者锁。/backfill 受理 POST),无遥测零上传。@deepseek-ai/dsh-token-meter),可与官方 trajectory「用量」tab 逐项对账。uncachedInputTokens = 原始 inputTokens(官方桶名如此)。enabled(默认 true)/ storageRoot / sessionsRoot,未知键报错拒绝。cordis.patch.yml(或 bundle patch)里 enabled 改为 false。生效方式分 profile:web profile 由 HMR 自动生效;desktop / headless 改 config 后需重启对应实例。不存在「改完即热生效」的统一行为。dsh plugin --profile desktop remove dsh-usage-stats。~/.dsh/usage-stats/(自有目录,不影响其他组件)。数据从哪来?
两路合一本账:实时一路来自宿主 session/event 事件流(照官方折叠语义逐事件产出净增量落盘);历史一路来自 ~/.dsh/sessions 会话文件回填(多帧 zstd 逐帧解压;fork 会话按内核 session/end-seed{inherited:true} 标记剪掉继承前缀,不重复计父会话)。两路共用同一折叠状态机与记账水位,不互相双计。
数字为什么能和官方 trajectory「用量」对上? 折叠语义逐位照抄官方 tokenUsage 投影(替换槽 LWW + retry 结转清槽),增量流求和恒等于官方 totals。在参考环境的全量对账中逐条一致,3000 轮随机事件流对官方投影零失配。
重启 / 升级插件后会不会重算、重复计数? 不会重算:流水是唯一真源,回填按会话水位只补增量,文件未变的会话零解压跳过。不会双计:v0.1.6 架构重构时做过新旧对照(数十个会话的记录逐位一致,旧版快照升级零追加)。
性能如何?会不会卡界面? 回填 async 分片(每 4 个会话让出一拍),解压不冻结宿主;稳态装载绝大多数历史会话零解压(mtime 哨兵;少数「有水位无 mtime」会话除外)。仅首次装载需解压全部历史,大历史需几分钟但期间可正常使用。面板开着时每 60 秒只发两三个轻请求(今日档两路:摘要+趋势;近 7/30 日三路:摘要+趋势+模型占比;热力图不随每拍底座请求轮询,仅在累计用量或日期变化时静默补拉)。
开两个 DSH 窗口会怎样? 单写者锁保证只有一个实例采集;另一个是只读镜像——统计面板照常能看,锁空闲后自动接管并补齐镜像期增量。镜像期点「回填历史」会提示「当前是只读镜像(另一窗口持写锁),接管后会自动补齐,无需手动回填」。
想清空统计数据怎么办?
退出 DSH 后整体删除 ~/.dsh/usage-stats/ 即可;下次装载按首次安装全量重新回填。
npm test # node --test,110 用例(fold 语义 / 存储与聚合 / 接口形状 / 集成回归 / 客户端纯函数)
npm run check
lib/index.js(host 接线 + 回填)、lib/fold.js(折叠状态机)、lib/store.js(落盘 + 单写者锁)、lib/aggregate.js(聚合纯函数)、lib/client.js(设置页 UI)。GET /api/dsh-usage-stats/summary、/heatmap?days=(默认 366,0=全量)、/trend?days=1|7|30、/models?days=7|30、/backfill/status,以及 POST /backfill(202 受理制)。DSH_USAGE_STATS_DEBUG=1 时输出到 stderr。实现细节见 SPEC.md。
已知限制如下:
request/header 前置,缺失时记 unknown(参考环境中 0 条 unknown);