dsh-usage-stats:給 DSH 裝上會話用量統計

前言

在 DSH(DeepSeek Harness)裏談不上用量統計:插件跑了多少 token、最近哪天用得最勤、幾種模型各自的佔比,都得自己翻會話日誌去翻。DSH 的理念是「一切皆插件」,這類缺口通常由社區插件來補。下面介紹 ailawu0409 維護的 dsh-usage-stats,它往 Settings 里加一個 Usage Statistics 分區,把本地會話的 token 彙總、活躍熱力圖、按模型的日趨勢和模型佔比一次給出。

需要先說明:這是社區插件,不是 DeepSeek 官方出品,未獲 DeepSeek 背書;插件的目錄頁分類爲 admin-security,GitHub 上星標數爲 0,倉庫創建於 2026-11-05。安裝前建議先讀源碼與許可證(MIT)。

這是什麼

dsh-usage-stats 是一個 DSH 插件,包版本 0.2.1,執行環境要求 Node.js 22 及以上,無第三方運行時依賴。它把統計結果渲染在 Settings → Usage Statistics(位於 Archived sessions 下方),數據全部來自本地會話日誌,只讀、不聯網、不上傳任何內容。

目標宿主版本爲 DeepSeek Harness 0.2.2-rc.1。導航圖標依賴 0.2.2 才引入的 settings.section.icon 插槽;更舊的宿主會直接回退到默認齒輪圖標,不會報錯。

核心功能

下面介紹的功能均可在 README 中核對。

  1. 概覽指標(3 項):總 token、單日峯值 token、最長一次會話時長。

  2. Token 活躍熱力圖:GitHub 風格的按周網格,支持 Daily / Weekly / Cumulative 三種配色模式;懸停單元格顯示日期、token 數與輪數,例如 Oct 27, 2026 / 506K tokens · 2 turns。單元格固定 11px,週數隨面板寬度自適應(最多 53 周、最少 13 周),彙總區間的表述會寫明實際範圍,例如 “Active 2 days over the last 8 months”。

  3. 每日 token 趨勢:平滑曲線按模型着色,可選 Last 7 days / Last 30 days;懸停出現豎向光標、高亮點以及當日的分模型明細。

  4. 模型用量:環形圖配一份佔比列表(前 5 個模型加 Other),懸停扇形顯示該模型的 token 與佔比。

  5. 其他:跟隨宿主淺色/深色主題與官方字體,界面爲中英雙語,右下角有 Refresh 按鈕;頁面頭部只保留標題(沿用宿主設置標題字號,16px)。刷新失敗時保留原有數據,只在頂部顯示一條可重試的橫幅。

數據口徑

這部分決定了數字爲什麼長這樣,值得先看清楚。

  • 總 token:每個 assistant/message 的 usage 之和,優先取 totalTokens,沒有則用 inputTokens + outputTokens。
  • 峯值 token:單日用量的最大值,按本地時區的日曆天計算。
  • 最長會話:單個會話內 turn/start → turn/end 時長之和的最大值,跨夜的空閒時間不計入。
  • 輪數:按 turn/start 的開始日歸集,跨零點的輪次算在開頭那一天。
  • 熱力圖彙總:只統計網格實際繪製的區間,不包含窗口外的歷史。
  • 去重:fork 出的會話跳過繼承的前綴(seq < inheritedEventCount),不與父會話重複計數。
  • 刪除不減少歷史:會話歸檔、移出存儲或永久刪除後,已經計入的用量仍保留在總量、峯值、熱力圖與模型佔比裏,頁腳會標註 “N of the counted sessions are no longer listed”。這是有意設計,避免「刪掉一條數字就變小」的反直覺行爲。
  • 失敗保留:讀取失敗或處於 migration-required 的會話不會讓累計值回縮,沿用上一次結果;只有從未計數的會話被記爲 skipped。失敗會話冷卻 5 分鐘後才重試,不會每次掃描都重讀。
  • 會話數上限:最多統計 20,000 個會話,超出時頁面會給出提示。

有一點要提醒:本插件的口徑與 ZCode 不同。ZCode 的 computedTotalTokens 是 input + cache + output,本插件優先取 usage.totalTokens,其次 input + output,因此兩者的數值可能不一致。另外 ZCode 默認保留 30 天原始用量明細,本插件保留終身總量,僅把「最近 400 天」的日粒度明細用於熱力圖和趨勢圖。

緩存與性能

  1. 每個會話的摺疊結果緩存在 <profile>/plugin-state/usage-stats-cache.json;已刪除會話的條目以 retiredAt 保留,所以刪會話後緩存不會立即膨脹,只會緩慢增長。

  2. 後續掃描按持久化的 revision 增量進行,只有發生變化的會話會重讀;revision 是 DSH 爲派生緩存提供的官方變更標記。

  3. 插件啓動 5 秒後預熱一次緩存,因此正常打開頁面時多爲緩存命中。

  4. 緩存遷移自動完成:v2 緩存原地升級到 v3,不需要全量重讀;只有更舊或未知版本的緩存會被丟棄重建。

  5. 想全部清零,刪除上面那個緩存文件再刷新即可,插件會從仍然存在的會話日誌裏重建。

安裝與啓用

官方給出的安裝命令如下:

dsh plugin --profile desktop add https://github.com/ailawu0409/dsh-usage-stats

也支持本地包路徑或自己的分支地址,把 URL 替換掉即可:

dsh plugin --profile desktop add <package-path-or-repo-url>

本地開發時可以把包目錄直接鏈接進 profile:

dsh plugin --profile desktop add /path/to/dsh-usage-stats

裝完重啓 DeepSeek Harness,進入 Settings → Usage Statistics。要使用插件自定義的導航圖標,建議 DSH 0.2.2-rc.1 或更新版本;舊宿主回退默認齒輪圖標。

典型用法

裝好後一般不用再動配置,日常使用就兩件事。

  1. 打開 Settings → Usage Statistics,看總 token、單日峯值和最長會話。
  2. 用右下角的 Refresh 按鈕手動刷新;失敗時頂部會出現可重試的橫幅,已有數據不受影響。

如果數字看起來有問題,先按下面的順序排查:確認緩存文件所在 profile 的路徑正確 → 看頁腳提示的 counted / no longer listed / skipped 會話數 → 刪除緩存文件後刷新重建。注意「會話數 counted 大於當前存儲的會話數」是正常現象,因爲它包含了仍留在賬上的已刪除會話。

想從零開始(比如換機器後不想帶上舊賬),刪除 <profile>/plugin-state/usage-stats-cache.json 再刷新,插件只從仍然存在的會話日誌重建。

適用場景與注意

適合想回頭看自己 token 開銷分佈、區分不同模型用量的本地 DSH 使用者,尤其是用多模型跑長鏈路、需要判斷哪個模型佔大頭的場景。

幾點需要留意:

  • 插件以當前 DSH 進程的權限運行,安裝前應自行檢查源碼與許可證(MIT),不要把它當作官方組件。
  • 這是非官方插件,DSH 擴展 API 在不同版本間可能變化,升級宿主後需要重新驗證。
  • 刪除會話不會讓歷史總量下降,如果需要真正的「當前狀態」視圖,這個插件給的不是。
  • 統計上限 20,000 個會話;窄的面板上熱力圖減少週數而非縮放單元格,窄面板看不全一年。
  • 「Last 7 days」趨勢實際繪製 8 個點(今天加此前 7 天),與參考設計一致。
  • DSH 0.2.2 新增了德語、西班牙語、法語、日語、葡萄牙語、俄語界面;本插件文案仍爲中英雙語,其他語言回退到英文。

目錄頁與源碼

目錄頁:https://www.skillhub.cn/plugins/ailawu0409/dsh-usage-stats
源碼:https://github.com/ailawu0409/dsh-usage-stats

需要說明的是,目錄頁是獨立社區站點,與 DeepSeek / 幻方沒有官方從屬關係,不是官方應用商店。

羽毛球分组比赛记分
小程序二维码

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

小夜