前言¶
用 DSH 做智能體開發,技能會越攢越多:早期調試用的、試過一次就放下的、被新寫法取代的。時間一長就說不清哪些還在被真正調用——刪了怕後面用到,留着又成了殭屍文件,全憑印象不好判斷。
dsh-skill-stats 解決的就是這個問題:回放歷史會話日誌加即時訂閱,把每個技能被 skill 工具調用的次數數清楚,幫你決定哪些技能值得保留。下面介紹它的功能、安裝和用法。
這是什麼¶
dsh-skill-stats 是一個只讀的 DSH 統計插件,當前版本 0.1.0,MIT 許可證。它統計每個技能的調用次數,數據來自兩個通道:
- 歷史回放:啓動時掃描宿主環境的會話日誌(
session.jsonl/session.jsonl.zstd),解析tool/call事件中的技能調用 - 即時訂閱:監聽進行中的工具調用事件,即時累加
插件不修改任何會話日誌或技能文件。
倉庫歸屬需要說明一下:主倉庫是 github.com/chen-zz20/dsh-skill-stats,github.com/omdsh-dev/dsh-skill-stats 只是同步主倉庫的只讀社區鏡像,實際歸屬以主倉庫爲準。
核心功能¶
- 調用統計:每個技能的累計調用次數、使用過的會話數、首次/最近調用時間、每次調用的具體時間
- 會話視圖:單個會話用過的技能列表,可排序,每行帶迷你趨勢圖,展開顯示大圖與每次調用時間
- 全局面板:當前所有技能(含 0 次使用)的統計表,支持排序、SVG 趨勢圖、1/3/7/30 天範圍篩選、每次調用明細
- 增量緩存:按文件記錄大小與修改時間(size + mtime watermark),重啓只重放發生變化的日誌,不用每次全量重掃
- 已刪除標記:技能目錄不再存在於任何工作區或全局技能根目錄時標記爲「已刪除」;刪除判定掃描所有工作區與全局技能根目錄,不限於當前工作目錄
- 加載態:重放未完成時顯示加載提示,不會把統計中的空快照誤報爲「未使用」
安裝與啓用¶
先克隆倉庫並構建,再把構建產物以 link 方式加進 profile:
git clone git@github.com:chen-zz20/dsh-skill-stats.git
cd dsh-skill-stats && pnpm install && pnpm run build
dsh plugin --profile web add link:/path/to/dsh-skill-stats
這是 bundle 型插件,會自動加入 profile 的 dsh.profile.bundles 層,無需手動配置行。
依賴方面:package.json 裏 private: true,不走 npm 發佈,所以安裝走 clone 加本地構建。聲明依賴 @deepseek-ai/dsh-home-paths 已發佈至公共 npm registry,pnpm install 直接拉取即可;cordis、schemastery、react 是 peerDependencies,其餘運行時 @deepseek-ai/* 包由宿主環境注入。如果 pnpm 10.19+ 的 minimumReleaseAge 攔截了安裝,倉庫裏已帶 pnpm-workspace.yaml 豁免配置。
統計 API¶
插件暴露一個統計接口 GET /skill-stats/api/stats,支持三種查詢方式:
GET /skill-stats/api/stats # 全局(含已刪除技能)
GET /skill-stats/api/stats?scope=current # 當前在磁盤上的技能(含 0 次使用,無已刪除)
GET /skill-stats/api/stats?sessionId=... # 單會話技能使用
響應結構如下:
{
"skills": [
{ "name": "file-dsh-issue", "invocations": 5, "sessions": 2,
"firstUsedAt": 1786000000000, "lastUsedAt": 1786009000000,
"deleted": false, "callTimes": [1786000000000, 1786009000000] }
],
"archivedSessionCount": 0,
"ready": true,
"updatedAt": 1786010000000
}
幾個字段的含義:
ready:啓動重放是否已全部完成;未完成時前端顯示加載態,避免把空快照誤報爲「未使用」callTimes:每次調用的時間戳,升序排列(跨會話彙總按時間而非按會話排序)sessionId參數:按會話查詢;未就緒的會話會在查詢時按需重放其日誌
本地開發¶
倉庫提供的開發命令:
pnpm install # 拉取聲明依賴
pnpm run typecheck # 類型檢查
pnpm test # 測試
pnpm run build # 構建 lib/
pnpm run check # 全部
注意:typecheck 和 test 需要本機有 DSH 檢出。模塊解析通過 tsconfig.json 的 paths 與 vitest.config.ts 映射到本機檢出路徑(../../.dsh/source/current/...),沒有本機檢出的環境只能安裝運行,跑 typecheck/test 前要先配置好 paths。
適用場景與注意¶
適合這幾類人:
- 技能攢了一批、想清理殭屍技能的 DSH 用戶
- 想看單個會話裏技能使用情況的開發者
- 需要程序化讀取技能統計數據做進一步分析的場景,直接調上面的 API 即可
幾點注意:
- 插件以當前 dsh 進程權限運行,安裝前應檢查源碼與許可證(MIT)
- star / issue / PR 請提交到主倉庫
github.com/chen-zz20/dsh-skill-stats,omdsh-dev 下的只是只讀鏡像 - 插件只做統計,不修改任何會話日誌或技能文件
小結¶
經過上面的步驟,技能的使用情況就有了連續的數字依據:哪些高頻使用、哪些一次沒被調用、什麼時候開始沒人用了,都能看數據說話,而不是靠印象決定去留。
- 社區目錄頁(第三方維護):https://www.skillhub.cn/plugins/omdsh-dev/dsh-skill-stats
- 主倉庫:https://github.com/chen-zz20/dsh-skill-stats
- 社區鏡像:https://github.com/omdsh-dev/dsh-skill-stats