dsh-token-usage:本機離線彙總 DeepSeek Harness 全量 Token 用量

前言

在 DeepSeek Harness(DSH)裏跑多模型、多會話時,單條會話裏的用量氣泡只能看當前會話。若要回答「一共燒了多少」「哪個模型佔大頭」「近七天趨勢如何」,只能自己翻 ~/.dsh/sessions 下的日誌,或寫腳本逐條解析 session.v4.jsonl.zstd。下面介紹的 dsh-token-usage 是社區插件,由 fuchen9 維護,在 Harness 側邊欄增加「Token 用量」面板,把本機全部已存會話的 token 消耗彙總起來,並按模型、提供商、會話類型、預設與時間窗口拆分;統計口徑與 Harness 自帶的 tokenUsage 投影一致,離線完成,運行時零第三方依賴。

這是什麼

dsh-token-usage(npm 包名 @local/dsh-token-usage,當前版本 0.1.1,MIT 許可)面向已安裝 DeepSeek Harness 桌面版或 dsh web 的用戶。它不改動會話數據、不發任何出站請求,只只讀本地會話日誌並渲染統計頁;在 SkillHub 目錄中歸類爲 admin-security。

核心功能

裝好後,側邊欄面板列表會出現「Token 用量」入口,點開是一整頁統計,主要包括:

  1. 彙總:合計、輸入、緩存命中、輸出、請求數、會話數。
  2. 按模型:每個「提供商 + 模型」的請求數、各分項 token、合計、佔比條、最近使用時間;模型分組以 message.source.provider 與 message.source.model 爲準,重複的 provider/ 前綴會在與 provider 相容時自動剝掉,避免同一模型裂成兩行。
  3. 維度對照:按會話類型(主會話 / 子會話)、按 agent preset、按提供商聚合。
  4. 時間窗口:全部、近 30 天、近 7 天、今天一鍵切換;另有按本地日曆日的最近幾天曲線、最近會話排行。

數據來源僅爲 ~/.dsh/sessions/**/session.v4.jsonl.zstd。Host 半通過 sessionPersistence 枚舉並增量讀取(按會話 revision 判斷變化);進程內活躍會話走 sessions 的 snapshot。掃描時即按 YYYY-MM-DD 分桶,切換 range 只在內存合併,不重讀磁盤。實測 README 中提到的規模(220+ 會話、8700+ 條用量事件)首次全量約 1–2 秒,之後請求可命中緩存。

界面使用 --dsw-alias-* 設計 token,跟隨明暗主題;支持中文與 English。禁用插件後,路由與槽位通過 ctx.effect 撤銷。

統計口徑(與面板數字對齊)

  • 總 token = inputTokens + cacheReadTokens + cacheWriteTokens + outputTokens,並與事件自帶的 totalTokens 取較大者。
  • 請求數:帶 usage 的 assistant/message 事件條數;會話數:至少有一條用量事件的會話數。
  • 多輪對話裏緩存讀取往往佔多數,因此「輸入」常遠小於「合計」,屬正常現象;事件裏的 usage 來自模型回報,與單會話用量氣泡同源。

若本機有用量歷史不足 30 天,「近 30 天」與「全部」數字相同是預期行爲,可用「今天」或「近 7 天」對照驗證窗口是否生效。

安裝與啓用

需要 DeepSeek Harness。本包是標準 bundle:package.json 的 dsh.bundle.patch 指向 cordis.patch.yml,其中插入 @local/dsh-token-usage。

方式一:插件管理器(推薦)

在 Harness 插件管理器中選擇「安裝 bundle / 本地目錄」,指向本倉庫克隆或解壓後的絕對路徑,然後重啓 Harness。

方式二:手工裝進某個 profile

# <profile> 換成你的 profile 名(桌面版是 desktop,CLI 通常是 default)
cd ~/.dsh/profiles/<profile>

# 備份 package.json / pnpm-lock.yaml
pnpm link /絕對路徑/dsh-token-usage          # 寫入依賴 + 建 node_modules 軟鏈接

然後把 "@local/dsh-token-usage" 追加到該 package.json 的 dsh.profile.bundles 數組裏,重啓 Harness。

桌面版注意:dsh plugin --profile desktop ... 會被拒絕(profile "desktop" is managed exclusively by the Electron application);桌面版請用插件管理器或上述手工步驟。

方式三:從 GitHub 以 git 依賴安裝

cd ~/.dsh/profiles/<profile>
pnpm add github:fuchen9/dsh-token-usage
# 同樣別忘把 "@local/dsh-token-usage" 加進 dsh.profile.bundles

裝完之後:修改 lib/index.js(Host 半)必須重啓 Harness;只改 lib/client.js 時刷新頁面(必要時 Ctrl+Shift+R)即可,客戶端 bundle 支持 HMR。

典型用法

在界面中查看

  1. 安裝並重啓 Harness。
  2. 打開側邊欄,進入「Token 用量」。
  3. 在頁頂切換 全部 / 近 30 天 / 近 7 天 / 今天,對照彙總卡片、按模型表格、按天曲線與最近會話列表。

HTTP API(同源 GET)

本機 Harness 提供只讀接口,供自動化或調試;路由校驗 loopback / 同源,非 GET/HEAD 返回 405。

GET /api/dsh-token-usage?range=all|30d|7d|today&refresh=1

refresh=1 強制重掃(有 1.5 秒節流),否則使用緩存。響應包含 totals、models、providers、agents、presets、daily、sessions 等字段,各數組有上限(例如 models ≤200、sessions ≤60),避免超大用量撐爆響應。具體 JSON 結構見倉庫 README 的示例。

適用場景與注意

適合誰:需要在 DSH 內一眼看清本機歷史 token 消耗、按模型與時間段做對照、且不希望數據離開本機的開發者或管理員。

權限與安全:插件以當前 DSH 進程權限讀取會話目錄;安裝前應自行審閱 GitHub 源碼 與 MIT 許可證。README 明確說明插件本身無出站請求;唯一與模型相關的網絡行爲來自 Harness 調用模型,而非本插件上報。

故障排查:若面板顯示「無法讀取用量索引」或數字全爲 0,常見原因是 Host 半 export const inject 漏聲明 webServer、sessionPersistence 或 sessions 之一,導致掃描被靜默吞掉;可查看 Harness 日誌中的 dsh-token-usage: scan failed: …。頁面下半截無法滾動時,與 flex 佈局守衛有關,倉庫 scripts/harness-layout.mjs 用於驗證此類問題。

DSH 生態理念是「一切皆插件」;SkillHub 目錄頁 是社區站點,與 DeepSeek / 幻方無官方從屬關係。

結尾

dsh-token-usage 把分散在各會話日誌裏的用量收成一塊離線面板,口徑與 Harness 單會話展示一致,適合在本機做用量審計與模型佔比分析。更多信息與更新日誌見 GitHub 倉庫;目錄條目見 SkillHub。

  • 目錄頁:https://www.skillhub.cn/plugins/fuchen9/dsh-token-usage
  • GitHub:https://github.com/fuchen9/dsh-token-usage
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜