第三方插件
在 profile 中安装并使用第三方 dsh-plugin 插件包
第三方插件以 npm 包的形式分发,通过 dsh plugin 安装进某个 profile。安装后,插件包里声明的 cordis.patch.yml 会成为该 profile 组合中的一层。
安装与移除
dsh plugin --profile <name> <args...> 会在 profile 不存在时先初始化它,然后把 <args...> 原样转发给 pnpm(以 profile 目录为工作目录),因此 add、remove、update、why 等 pnpm 命令都能直接用;pnpm 需要在 PATH 上。
dsh plugin --profile tui add github:deepseek-harness/turtle-ui
dsh plugin --profile tui remove turtle-ui
dsh --profile tui相对路径锚定到调用目录
相对路径规格(.、../plugin,以及它们的 file: / link: 形式)先锚定到调用目录,所以在一个插件 checkout 里执行 add . 安装的是该 checkout,而不是 profile。
什么算一个插件组合包
一个包只要在 manifest(元数据清单)里声明了 bundle 关系,就会成为组合层栈中的一层:
{
"name": "turtle-ui",
"dsh": { "bundle": { "patch": "./cordis.patch.yml" } }
}每次成功运行后,dsh.profile.bundles 会与已安装状态对账:
- 声明了
dsh.bundle.patch的依赖加入层栈(例如一次update让包新增了该声明,就会随之激活); - 没有声明 bundle 的依赖保持普通依赖,并给出一次性警告;
- 被移除的依赖离开层栈。
安装好的包拥有自己的依赖,并贡献其声明的 cordis.patch.yml 层。
Git 托管插件与构建
自带源码、在 prepare 脚本里构建的 Git 托管插件,会被 pnpm ≥10 拦截,直到你允许构建:第一次 add 会失败,并给出 pnpm 的 allowBuilds 提示(以及指向 profile 的 pnpm-workspace.yaml 的说明);把打印出来的键复制进去再重跑即可。安装已构建的 tarball 或本地 checkout 则不需要允许。
发现与信任
- 为你的插件仓库添加
dsh-plugin话题,便于被发现; - 插件组合包与内置组合包一样,其 patch 层按
dsh.profile.bundles顺序叠加,之后是 profile 与 home 的cordis.patch.yml覆盖层(见 CLI 与 Profile); - 插件包贡献的
cordis.patch.yml里若通过!!js引用了其他包,需确保这些依赖在其解析器 manifest 中声明。
执行任意代码
安装一个第三方插件就是在你的 profile 组合里执行它声明的 patch 与插件代码。只安装你信任来源的包。
下一步
- 组合语法与 patch 语义见开发者指南的 Cordis 入门。
- 想自己写一个插件包,看动态插件。