Repository navigation
v0.4.0 — 包内技能注册为 SkillProvider
0.4.0 (2026-09-21)
本版把包内的 dsh-plugin-upgrade 技能正式注册进 DSH 的技能注册表——此前它只以文件形式
随包发布,等于没有。
修复
- 技能在干净机器上找不到:
skill工具报dsh-plugin-upgrade is unknown or no longer available。根因是技能文件虽随包发布(files含skills),却从未注册成 skill provider
——DSH 的技能加载器只扫文件系统上的固定根(项目.dsh/skills、~/.dsh/skills、bundled
等),不会翻node_modules。于是开发机上靠一份手工拷贝到~/.dsh/skills能用,
任何没拷过的机器上,LLM 更新流程一开始就加载不到 skill。这属于「提示词不自足」:
不报错,只是永远找不到。 - 修掉
package.jsondescription 里的一处编码残骸(em dash 的 UTF-8 字节被按 GBK 解成
U+95B3+?,npm 页面上显示为乱码)。
变更
- 新增
src/skill-provider.ts:注册 packagedSkillProvider(rank 550,与
@max-null/dsh-skills同档——低于用户自己的技能目录,用户永远可覆盖;高于 bundled),
从包内skills/读取。技能随包走、不写用户目录、无需任何安装步骤。 skills服务走ctx.inject(['skills'], cb):可选依赖,缺失时插件其余部分照常工作。
测试
- 新增
tests/skill-provider.test.ts(5 条):依赖声明、服务缺失时降级、候选字段
(rank / source / provider / invocation / resourceBase)、正文剥离 frontmatter、列举顺序稳定。 - 全量 64 条通过;
npm run typecheck无错。
验证
- 隔离实例实测:
Skill工具一次命中dsh-plugin-upgrade(2 秒、无绕路),而该实例的
~/.dsh/skills中并无手工拷贝 → 该技能只可能来自新注册的 provider。
关于 git tag
0.3.0 没有对应的 git tag:它的代码状态(09-17 那批 RPC 双路径改动)当时位于工作树中
未提交,版本号本身从未进过任何提交;后来它与 0.4.0 的改动一并提交为 ec3556e,无法还原
0.3.0 的独立状态。给它补一个指向 ec3556e 的 tag 是假精确,故不补;npm 上的 0.3.0 仍然有效,
缺口由来记在此处。