02_认识DSH插件
高度概念
插件是 dsh 的核心; 几乎所有的功能甚至界面都以插件的方式存在以及组合。
dsh插件是一个cordis设计理念的插件。
结合dsh的基本使用方法,落到实处,它本质一个导出apply函数的TypeScript模块。框架在加载时调用 apply,传入一个 ctx(上下文对象),我们通过 ctx 注册能力。(更加具体的原理请自行搜索cordis)
1 |
|
解读实践插件开发
最小插件解读
我们从0开始,给deepseek的界面添加逐渐复杂的插件功能。
1 | mkdir -p my-plugin-to-do |
首先,dsh的仓库是一个使用pnpm进行workspace管理的仓库。我们的插件要想不报错,首先是需要将我们的插件添加到dsh的workspace中,做好项目的初始化。否则,即使是最小的哪那个插件示例,在开发的过程当中也会找不到模块“@deepseek-ai/cordis”或其相应的类型声明。
- package.json
1 | { |
需要将cordis添加到所需的依赖,这个是本地仓库的包,所以需要使用workspace:^来引用。
- tsconfig.json
1 | { |
tsconfig.json当中使用references来说明插件的依赖路径,这能让编辑器能够正确识别链接到插件的类型声明。
之后执行
1 | pnpm exec tsc -b my-plugin-to-do/tsconfig.json |
这一个命令本质上是在仓库根目录里,使用项目本地安装的 TypeScript 编译器,按 build mode 去构建 my-plugin-to-do 这个 TS 工程。
pnpm exec:用当前 workspace 里安装的可执行文件来运行命令,这里就是本地的 tsc,不用依赖全局安装。
tsc:TypeScript 编译器。
-b:–build 模式,不只是“编译单文件”,而是把传入的 tsconfig 当成一个工程来构建,并处理 references。
my-plugin-to-do/tsconfig.json:指定要构建的项目配置文件,也就是 tsconfig.json。
结合你这个配置,它会做什么 从 tsconfig.json 看:extends: “../tsconfig.base.json”:继承仓库公共 TS 配置。
include: [“src”]:只处理 my-plugin-to-do/src 下面的 TypeScript 源码。
rootDir: “src”:把 src 当作源码根目录。
outDir: “lib/types”:编译产物输出到 my-plugin-to-do/lib/types。
references:这个项目依赖两个被引用的 TS 工程:
- ../vendor/cosmokit
- ../vendor/cordis
所以这条命令通常会:
先检查并按需要构建 vendor/cosmokit 和 vendor/cordis
再构建 my-plugin-to-do
做类型检查
按配置把输出写到 lib/types
整体的最小插件完整结构应该如下所示:

这样整个插件的代码结构就和官方的大差不差了
插件代码实现的逻辑之后再看,现在我们需要将我们的插件连接到dsh的运行当中,因此,我们需要新建一个yml配置文件。如下:
1 | - insert: |
通过pnpm dsh web --patch ./my-plugin-to-do/cordis.yml 将我们的配置文件透传给到dsh。dsh也能够链接我们真实的插件代码。

下一章,我们将带着我们的理解,完成一个带有逻辑的工具类插件实现,敬请期待。
