dsh-skill-radar:用本地账本回答「哪些技能真的在被用」

前言

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 工具不记):

  1. tools/result:模型调用 skill 工具且 result.isError !== true。
  2. 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)。

典型用法

  1. 安装并重启后,打开任意会话,切到「技能雷达」标签页。
  2. 正常使用技能:模型通过 skill 工具调用,或你在输入框用 /技能名 触发;命中会写入本地 hits.jsonl 并在列表中累计。
  3. 按 7 天命中排序查看常用技能;对灰显且标「建议归档」的条目,结合 .trash 归档或恢复,或在该面板启停 disable-model-invocation。
  4. 需要额外只读扫描目录时,在 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 上管理技能用量,可按上文命令安装后在会话里打开「技能雷达」。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜