前言¶
DeepSeek Harness(DSH)的技能服务能列出技能、能启停模型调用,但不告诉你某个技能有没有被调用过。插件和技能一多,「有哪些」反而好查,「留哪个、删哪个」往往只能靠感觉。0.2 的 skills 服务又按 preset 隔离,host 侧也没有现成的全量使用视图。
dsh-skill-radar(维护者 dingchenhui0618-arch)是社区目录里归类为「工作流」的 DSH 插件:在会话界面增加「技能雷达」标签页,本地记录每一次真实技能命中,按最近 7 天排序,并对长期零命中的技能给出「建议归档」提示。数据只写本机,不对外发网络请求。
这是什么¶
一句话定位:给 DSH 技能面板加一列命中记录——谁、在哪个会话、用什么词触发;按窗口内命中数排序;零命中行灰显并标「建议归档」。
设计与产品思路参考 dsh-skill-explorer(Apache-2.0),但本仓库为独立实现,路由、数据格式与前端各自维护。explorer 侧重「我有哪些技能」;radar 侧重「哪些技能真的被用过」。雷达视图挂在 conversation.view 的「技能雷达」标签页,而非 explorer 的独立路由。
当前 package 版本为 0.1.0,许可证 MIT,要求 DSH >=0.2.0-rc.2 <0.3.0(README 写明在 0.2.0-rc.2 Web 运行时实测通过)。
核心功能¶
命中账本¶
插件从两条路径记每一次成功的技能命中(失败调用、非 skill 工具不记):
tools/result:模型调用skill工具且result.isError !== true。session/event:用户输入/skill-name(user/message且data.source.kind === "skill-invocation")。
账本为一行一条 JSON,默认路径 $DSH_HOME/skill-radar/hits.jsonl。同一 session + name 在 30 秒内重复只保留一条,gesture 优先于 tool。只记插件加载之后的调用,更早历史不会补记。
面板能力¶
- 命中记录列:7 次日历柱状图与计数;展开一行可看最近 6 次命中的时间、会话标题、触发词与提示词。
- 7 天排序:按窗口内命中数降序,再按最近命中时间、名称升序(窗口天数可配置,默认 7)。
- 建议归档:窗口内 0 次命中的行灰显并带「建议归档」徽标;支持「只看建议归档」过滤。
- 启停模型调用:只改
SKILL.md里的disable-model-invocation一行,其余内容不动。 - 新建技能:支持用户级
~/.dsh/skills或项目级.dsh/skills;kebab-case 校验、不覆盖同名、正文上限 64KB。 - 归档与恢复:归档到
<skill root>/.trash/YYYYMMDD-HHmmss-<entry>,与 explorer 同类思路,可恢复。 - 来源视野:扫描项目
.dsh/skills、.agents/skills、运行时注册表、自定义目录、用户目录、系统内置等;同名按来源优先级去重。插件/注册表提供的技能列出来但标「只读」,不能从本地文件启停或归档。
运行时零 npm 依赖(Node 内建模块 + harness 提供的 React);面板轮询本机 /dsh-skill-radar/state,无遥测。
安装与启用¶
安装前请先完全退出 DSH 桌面端,避免 profile 文件被占用。安装命令依赖 PATH 上的 pnpm(DSH 插件安装/更新走 pnpm)。
从 GitHub 安装到 desktop profile:
dsh plugin --profile desktop add github:dingchenhui0618-arch/dsh-skill-radar
插件管理器会把 dsh-skill-radar 写入 profile 的 dsh.profile.bundles。重启 DSH 后,在任意会话顶部切换到「技能雷达」即可。
卸载:
dsh plugin --profile desktop remove dsh-skill-radar
配置(可选)¶
在 profile 的 cordis.patch.yml 里按插件 id 覆盖,例如:
- id: dsh-skill-radar
config:
windowDays: 7
customSkillDirs:
- D:/work/team-skills
allowRemote: false
常用项:windowDays(默认 7,排序与「建议归档」窗口)、retentionDays(默认 30,账本保留)、maxHits(默认 5000)、hitsPath、customSkillDirs(额外只读扫描根)、allowRemote(默认 false,仅 loopback 访问面板 API)。
典型用法¶
- 安装并重启后,打开任意会话,切到「技能雷达」标签页。
- 正常使用技能:模型通过
skill工具调用,或你在输入框用/技能名触发;命中会写入本地hits.jsonl并在列表中累计。 - 按 7 天命中排序查看常用技能;对灰显且标「建议归档」的条目,结合
.trash归档或恢复,或在该面板启停disable-model-invocation。 - 需要额外只读扫描目录时,在
cordis.patch.yml里配置customSkillDirs。
面板通过同源 HTTP 读写状态(如 GET /dsh-skill-radar/state?cwd=<dir>)。所有 POST 需带请求头 x-dsh-skill-radar: 1;默认只接受 loopback,远程访问须显式 allowRemote: true。
账本行示例(字段含义见 README):
{"at":1793090357000,"name":"release-checklist","session":"session-7c30...","title":"发布 v0.4.0","trigger":"/release-checklist","prompt":"准备发 v0.4.0","via":"gesture","cwd":"D:/work/app"}
适用场景与注意¶
适合谁:长期维护大量 DSH 技能与插件、需要凭数据决定保留或归档的开发者;希望在本机看清「最近一周谁在用哪个技能」的团队。
务必注意:
- 插件以当前 DSH 进程权限读写技能目录与账本;安装前请自行查看 源码与 LICENSE。
- 不统计失败调用;「建议归档」仅表示窗口内零命中,不代表技能文件无效。
- 面板依赖
conversation.view与webServer.register(0.2 接口);路由注册失败时面板不可用,但命中记录器仍会工作。 - 社区目录 SkillHub 插件页 为独立站点,与 DeepSeek / 幻方无官方从属关系;DSH 生态理念是「一切皆插件」,本介绍事实以仓库 README 为准。
结尾¶
dsh-skill-radar 用本地账本补齐 DSH 技能侧「有没有被用过」这一环:记录、排序、提示归档,并在同一块面板里完成启停、新建与 .trash 归档。若你要在 0.2.x 上管理技能用量,可按上文命令安装后在会话里打开「技能雷达」。