dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
Token 用量看板插件,用于 DSH(DeepSeek Harness)。
按本机时区记录每次模型调用的 token 消耗,并把「攒了多少」做成看得见的方块墙。
包名是dsh-token-wall(dsh-token-usage已被另一个同类插件占用)。
插件内部的标识(路由前缀 /dsh-token-usage、存储目录、localStorage key)都保持不变,所以升级不会丢历史数据。
本插件以 Cordis bundle 形式发布,宿主是 DSH 的 Web profile。
⚠️ 本包尚未发布到 npm —— registry.npmjs.org/dsh-token-wall 目前返回 404。所以当前唯一可用的路径是源码安装(方式一)。下面仍然保留了 npm 的写法,
等包正式发布后直接生效,不必再改文档。
# <profile> 通常是 ~/.dsh/profiles/<名字>
# Windows: %USERPROFILE%\.dsh\profiles\<名字>
cd ~/.dsh/profiles/<profile>/node_modules
git clone https://github.com/ChinRinhan/dsh-token-wall.git dsh-token-wall想钉住某个版本就检出对应标签(列表见 Releases):
cd dsh-token-wall && git checkout v0.2.0如果你要继续开发这个插件,用 link: 指向本地 clone 更方便(改完 client.js 走客户端 HMR 自动生效,不必重新安装):
"dsh-token-wall": "link:F:/path/to/dsh-token-wall"cd ~/.dsh/profiles/<profile>
npm install dsh-token-wall在 DSH 会话里执行:
plugin_manager install_bundle target=dsh-token-wall
plugin_manager set_bundle target=dsh-token-usage enabled=true无论用哪种方式,都要在 profile 的 cordis.patch.yml 里插入条目:
- insert:
- id: dsh-token-usage # ⚠️ 用这个 id,不是包名
name: 'dsh-token-wall'
config:
keepDays: 400⚠️ id 与 name 不同是有意的:id 是插件内部标识(决定路由前缀与存储目录), 必须保持 dsh-token-usage 才能沿用已有数据;name 才是包名。
启用后宿主会注册四条路由。把 `` 换成你的 Web GUI 端口:
curl http://127.0.0.1:<port>/dsh-token-usage/today返回 {"ok":true,"totals":{...},"allTime":{...},...} 就说明装好了。
界面上应该能看到三样东西:侧栏多出一个方块图标、右下角出现桌宠、设置页多出「Token 用量」一节。
backfillOnStart(默认开启)会扫描 $DSH_HOME/sessions 下的会话日志,把装上之前的用量补进来。
参考量级:本机 116 个会话、22 天、8,410 条记录,回填耗时数秒。
如果你之前是 clone 到 node_modules/dsh-token-usage 的,现在要换成 dsh-token-wall(包改名了,目录名跟着变):
cd ~/.dsh/profiles/<profile>
rm -rf node_modules/dsh-token-usage # 旧目录(如果不是软链)
# 然后按「方式一」重新 clone,或等 npm 发布后走「方式二」历史数据不需要迁移:存储路径由插件内部标识决定,与包名无关, 仍是 $DSH_HOME/token-usage/daily.json。
「从源码安装换成 npm 安装」这条路等包正式发布后才有意义,届时只需删掉旧目录再
npm install,数据同样不受影响。点侧栏的方块图标进入。外观见上方截图——主面板就是那一大片方块墙。
为什么是 10M:按真实数据量过,单轮对话中位 1.41M、p90 10.4M,典型活跃日 2–3 块、重度日 7–9 块。快慢都合适。
常驻在窗口任意位置,也可以拖走。外观见上方截图的右下角。
—(不显示 0)。blockWall().progress)——和池是同一个量纲。快攒满(≥ 90%)时轻微呼吸。
后**才出现,这一点是它做不到的。
显示「0 块」,失去意义。
projectedTokens / contextWindow。这是唯一有后果的读数——快满会被压缩。它是读数而不是进度条:60% 起转黄、85% 起转红。
118.6M 是缓存读取),而它一直只藏在详情弹窗里。
压缩(≥ 80%)时显示上下文百分比,平时显示本会话量
localStorage,窗口缩放时自动钳制在可视范围内动效很克制:进度条快攒满一块(≥ 90%)时轻微呼吸,攒到新的一块时池弹一下。系统开了「减少动态效果」时会全部关掉。
同一块区域,三个视角切换:
维度 · 回答的问题 工作区 · 我在哪个项目花得多 模型 · 我在用哪个模型花 厂商 · 我在给哪家公司送钱
「模型」视角会自动归并同一模型的不同写法。比如这四行其实是同一个模型:
deepseek-v4.1-flash 1.54B ← 主名
workbuddy/deepseek-v4.1-flash 25.6M ← 带渠道前缀
deepseek-ai/deepseek-v4.1-flash 52K ← 另一种前缀
deepseek-v4.1-flash-free 23.1M ← 带 free 后缀归并后合成一行:1.62B · 4 个变体。
⚠️ 但不同代际不合并。deepseek-flash、deepseek-v4-flash、deepseek-v4.1-flash 是三个版本,合并会掩盖「还在用旧模型」这件事。
⚠️ 认不出厂商的模型归入「其他」,不猜。可以用配置里的 modelAliases 显式声明,见下。
当前在用的工作区 / 模型会高亮。
「Token 用量」一节包含:
在 profile 的 cordis.patch.yml 里覆盖,插件升级不会丢:
- id: dsh-token-usage # 内部标识,不要改(决定路由前缀与存储目录)
name: 'dsh-token-wall' # 包名
config:
keepDays: 400 # 保留天数(落盘时淘汰更早的日键)
includeSubagents: true # 计入子代理 / 团队 / workflow 子会话
includeAuxiliary: true # 计入压缩等辅助调用
statusBarEnabled: true # 是否允许显示输入框上方的横幅
statusBarRefreshMs: 1000 # 轮询间隔,最小 1000
backfillOnStart: true # 启动时回填历史
# 可选:手动声明模型别名(认不出的模型可以在这里归类)
modelAliases:
dfmodel:
vendor: deepseek
model: deepseek-v4.1-flash· 位置 · 生效方式 · 用途 config.statusBarEnabled · cordis.patch.yml · 重启 DSH · 部署期的硬开关 设置页五个开关 · $DSH_HOME/token-usage/prefs.json · 立即生效 · 日常调整
设置页那五个开关存在独立文件里,是因为改 Cordis config 要重启,而「我想把桌宠关掉」显然不该重启。