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 决胜负。