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