DSH Web GUI 的內置 / 技能菜單目前僅支持名稱前綴匹配。當技能名稱較長或包含多個關鍵詞時,這種匹配方式效率較低。dsh-skill-fuzzy 插件爲 DSH Web 客戶端引入了 Codex 風格的模糊搜索能力,支持通過技能名稱或描述進行更靈活的檢索。
插件定位與機制¶
這是一個 Web 客戶端插件,由 ch1bug 維護,採用 MIT 許可證。它通過修補內置 / 技能源的 candidates() 方法,在本地對技能列表進行過濾和排序。插件在瀏覽器端運行,不依賴後端接口。
核心功能¶
插件實現了以下匹配與排序邏輯:
- 技能名稱匹配:移植自 Codex 的
fuzzy-match算法。規則爲貪婪、不區分大小寫的有序子序列匹配,並給予字符串開頭一定分數加成(分數越小越靠前,前綴命中優先)。 - 描述匹配:僅支持連續、不區分大小寫的子串匹配。經過測試,分散的子序列匹配會在長描述中產生過多噪聲,因此改爲連續匹配。
- 排序優先級:優先匹配技能名稱,其次是分數升序排列,最後保持穩定順序。
- 空查詢處理:輸入空查詢時,返回完整的技能列表,不會退化爲前綴匹配行爲。
安裝與啓用¶
- 執行安裝命令:
dsh plugin --profile web add github:ch1bug/dsh-skill-fuzzy
- 重啓
dsh web服務。 - 在瀏覽器中硬刷新 Web GUI 頁面(引導清單在頁面加載時注入,刷新可確保插件生效)。
- 輸入
/打開技能菜單。
典型用法示例¶
假設存在一個名爲 diagnosing-bugs 的技能,通過以下查詢均可找到該技能:
/diag:匹配diagnosing-bugs(名稱前綴)。/bug:匹配diagnosing-bugs(名稱子串)。/bu:匹配diagnosing-bugs(名稱連續子串)。/regression:匹配diagnosing-bugs(描述中的關鍵詞)。
技術實現與開發¶
該插件純邏輯位於 lib/ 目錄,算法源碼移植自 OpenAI Codex 的 codex-rs/utils/fuzzy-match。測試套件位於 tests/ 目錄,通過 node --test 運行。客戶端代碼通過 lib/client.js 單獨打包注入。
適用場景與注意事項¶
適合需要在技能庫較大時快速定位技能的開發者。由於插件以當前 DSH 進程權限運行,安裝前建議檢查源碼與許可證。
插件源碼與文檔詳見:GitHub