前言¶
用 DeepSeek Harness(DSH)跑會話時,Token 會分散寫在 $DSH_HOME/sessions 下的 Session 日誌裏。想回答「總共用了多少、按模型和按天怎麼分佈、哪幾個 Session 最費 Token」時,若只靠翻 JSONL 或憑印象估算,既慢又容易漏。下面介紹的 dsh-usage-panel 是社區維護者 AlexLin0803 發佈的客戶端插件:在 Harness 內增加 Token usage / 用量 頁面,從本機持久化 Session 日誌摺疊統計,不發起模型或 Provider 請求。
這是什麼¶
dsh-usage-panel(GitHub:AlexLin0803/dsh-usage-panel,SkillHub 分類:客戶端)在 DSH Web 界面提供與設置頁同源的用量視圖。數據只讀當前機器上的 Session 文件,不彙總其他安裝實例,也不換算費用。
同一套頁面有兩個入口:
- 左側邊欄一行,在主欄打開(不經過 Settings 對話框);
- Settings → 用量 / Usage,與其他設置頁並列。
頁面語言(zh / en)與明暗主題隨 Harness 設置殼的設計 token 自動對齊。
核心功能¶
README 中列出的區塊如下(均來自本地 Session 日誌摺疊,非雲端報表):
| 區塊 | 含義 |
|---|---|
| KPI 卡片 | 總 Token、輸入/輸出、緩存讀取與命中率、Session 數、活躍天數與當前連續活躍天數 |
| 活動熱力圖 | 近 26 周按本地日的 Token 量,懸停可看明細 |
| Tokens by model | 近 7 / 30 / 90 日按模型堆疊的日總量 |
| Model share | 各模型佔全部 Token 的比例(環形圖) |
| Providers | 按實際處理請求的 Provider 拆分 Token |
| Busiest Sessions | 按累計 Token 排序的 Session,含消息數與所用模型 |
Export 可在頁面內導出:當前時間範圍的日序列或按模型表格爲 CSV,或整份 summary 爲 JSON;均在瀏覽器端生成,不上傳。
實現上分爲 Host 與 Browser 兩半(同一 npm 包):
- Host(
lib/index.js):Cordis 插件,註冊GET /usage-panel/api/summary?days=30[&refresh=1],掃描$DSH_HOME/sessions/**/session.v*.jsonl[.zstd],解碼 Zstandard 幀並摺疊assistant/message的 usage 記錄;按文件 size/mtime 緩存, warm 請求可走內存。 - Browser(
lib/client.js):通過window.__ModuleLoader__.load註冊settings.section頁面並拉取 summary;僅依賴平臺react模塊與內聯主題 token。
插件面向界面與本地統計,不提供 model-facing 的 tool、prompt 或 Provider 請求。
當前 package 版本爲 0.2.0,許可證 MIT。
安裝與啓用¶
DSH profile 通過 bundle 樹組合插件。本包在 package.json 中聲明 dsh.bundle.patch = ./cordis.patch.yml,作爲 profile bundle 安裝即可。
1、讓 profile 能解析到該包(本地開發可用 link):
dsh plugin --profile desktop add link:E:/path/to/dsh-usage-panel
2、在 profile 的 dsh.profile.bundles 中選中該 bundle(與 @deepseek-ai/dsh-base、@deepseek-ai/dsh-web-app 等並列):
"@deepseek-ai/dsh-base",
"@deepseek-ai/dsh-web-app",
"dsh-usage-panel"
若已開啓 HMR,運行中的組合會立即拾取 bundle;否則需重啓 Harness。然後打開 Settings → 用量 / Usage,或使用左側邊欄入口。
若不想手改 profile,可通過 Web 側欄 Plugins 頁或 plugin_manager 工具安裝,由工具維護 dsh.profile.bundles。
排查: 配置重載後邊欄或 Settings 頁消失,多半是 compose 時跳過了 bundle。確認 package.json 爲 UTF-8 無 BOM(帶 BOM 會導致 JSON.parse 失敗、整包被丟棄)。可用 throwaway profile 離線檢查:
Copy-Item ~/.dsh/profiles/desktop ~/.dsh/profiles/desktop-check -Recurse
dsh --profile desktop-check --dump-config | Select-String "skipping profile bundle"
Remove-Item ~/.dsh/profiles/desktop-check -Recurse
健康的 dump 應包含 - id: usage-panel。
典型用法¶
驗證 Host 路由(Harness Web 服務默認監聽本機,示例端口以你環境爲準):
curl.exe "http://127.0.0.1:60341/usage-panel/api/summary?days=30"
正常返回 {"ok":true,...} 形態的摺疊 summary。加 ?refresh=1 可繞過約 20 秒的緩存。
本地開發預覽(不依賴 GUI 反覆刷新時可跑 dev/preview.mjs):
node dev/preview.mjs zh --shot assets/preview-zh.png
node dev/preview.mjs en
node dev/preview.mjs zh --sample --shot assets/preview-zh.png
node dev/preview.mjs en --sample
node dev/preview.mjs zh --sample --panel
--sample 使用倉庫內合成數據集(README 截圖即此路徑);不帶 --sample 時會請求正在運行的 Host。Host 不在默認地址時,可設置 DSH_ORIGIN。
適用場景與注意¶
適合: 在本機 DSH 上長期跑 Session、需要 KPI、熱力圖、按模型/Provider/Session 排行,並偶爾導出 CSV/JSON 做離線分析的開發者。
限制(README Limits):
- 僅本機
$DSH_HOME/sessions;不調用 Provider,看不到其他機器上的用量。 - 只統計 Token,不推導金額(單價因 Provider 與時間變化)。
- 僅統計帶 usage 的事件;Provider 開始上報 usage 之前寫入的 Session 可能消息數有、Token 爲 0。
- 路由無獨立鑑權,與其他非
/api的 web-server 路由一樣依賴 loopback 綁定;能訪問該端口的進程可讀本地 Token 彙總。
插件以當前 dsh 進程權限 讀取 Session 目錄並提供 HTTP 彙總。安裝前建議在 GitHub 查看源碼與 MIT 許可證,確認符合你的安全與合規要求。SkillHub 等社區目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係;安裝來源以你信任的倉庫與 bundle 配置爲準。
結尾¶
dsh-usage-panel 把已在磁盤上的 Session usage 收成一頁可視化與可導出 summary,雙入口進同一頁面,Host 掃描緩存、Browser 複用設置殼主題。需要詳情時可查閱 SkillHub 目錄頁與 GitHub 倉庫:
- https://www.skillhub.cn/plugins/AlexLin0803/dsh-usage-panel
- https://github.com/AlexLin0803/dsh-usage-panel