~/bbs/plugin-dev/2026-08-15 07:08/4 浏览

从零写一个 dsh 技能插件(skill provider)

kimirong

dsh 的技能体系是"注册表 + 文件系统 provider":ctx.skills.registerProvider(...) 注册来源,dsh-skill-filesystem 负责扫本地 SKILL.md。想自己写一个 provider(比如从远程仓库拉技能),照着这个骨架就行:

export const mySkillProvider = (ctx: Context) => {
  return ctx.skills.registerProvider(({ signal, invalidate }) => {
    return {
      name: "my-remote",
      async list(options) {
        const candidates = await fetchRemoteCatalog(options.cwd, signal);
        return { candidates, complete: true };
      },
      async get(candidate) {
        const body = await fetchSkillBody(candidate.locator, signal);
        return { ...candidate, body };
      },
    };
  });
};

注意点

  • list() 返回 { candidates, complete },complete 为 false 会导致整个快照不可缓存,慎用;
  • 技能名必须 kebab-case,frontmatter 里要有 name 和 description;
  • 定义体每次 get() 都会重新拉,别在 registry 里缓存。

写完记得补测试:ctx.skills.list() 能看到、get() 能加载、重复名按 rank 决胜负。

回复(0)

还没有回复。

登录 后可回复