DSH plugin 开发环境搭建:Node 与 pnpm 准备、两种获取 Harness 的方式、工程依赖与脚手架
DSH plugin 开发环境只需要三样:Node.js、pnpm,以及一份能跑起来的 DeepSeek Harness 本体;官方把前置条件定义为「从一份已完成 run-from-source 的仓库检出开始」,所以第一步不是写代码,而是先把 pnpm dsh web 跑通。 无论你叫它 DSH插件 还是 DeepSeek插件,要准备的东西完全一样。
DSH plugin 开发环境清单:三样东西
官方对插件开发的前置条件只有一句话:从已完成 run-from-source 的仓库检出开始。 拆开就是三样(来源):
| 组件 | 作用 | 怎么装 |
|---|---|---|
| Node.js | 运行 Harness 与插件 | 按官方要求安装,注意脚手架的 engines 约束 |
| pnpm | 工作区依赖管理与命令前缀 | 仓库是 pnpm 工作区,命令统一 pnpm dsh ... |
| Harness 本体 | 加载并运行你的插件 | npx @deepseek-ai/dsh web 或源码检出 |
注意 Node 版本:脚手架 create-dsh-plugin 在 engines 里声明需要 Node ^22.19.0 || >=24.0.0——版本太低会在安装阶段直接报错(来源)。
获取 DeepSeek Harness 的两种方式,开发 DSH plugin 选哪种
只想用 Harness 就用 npx 一条命令;要写插件就进源码检出——因为本地调试依赖检出目录。 官方 README 给的两种方式可以并存(来源):
- 方式一:跑发布版(适合只想用 Harness 的人):
npx @deepseek-ai/dsh web,预期一条命令拉起 Web UI。 - 方式二:源码检出(插件开发推荐):依次执行
git clone https://github.com/deepseek-ai/deepseek-harness.git→cd deepseek-harness→pnpm install→pnpm run build→pnpm dsh web,预期检出内能启动 Web UI。
为什么插件开发选方式二:官方插件教程要求「从仓库根创建 scratch-plugin 目录」,再用 --patch 覆盖层把绝对路径的插件源码挂进去——插件路径由 profile 目录解析,源码检出内引用本地文件最省事。所以日常用 npx、写插件时切到检出即可。源码构建的每一步拆解见 源码构建与本地调试。
创建 DSH plugin 工程:脚手架或手写
想快速起步用脚手架,想理解机制就手写一个文件。 脚手架 create-dsh-plugin 提供 tool / events / webui 三套模板,内置 --verify 冒烟测试,并用 next 标签钉住版本(来源):
- 脚手架生成:
npx create-dsh-plugin my-plugin -t tool,预期得到带好package.json、tsconfig 与模板代码的工程。 - 或手写最小工程:在检出根目录创建
scratch-plugin/src/my-plugin.ts(只有一个文件):
import type { Context } from '@deepseek-ai/cordis'
export const name = 'hello-plugin'
export function apply(ctx: Context) {
console.log('[hello-plugin] plugin loaded!')
}
两种方式的差别只在起步速度:脚手架会带好上述工程文件;手写则必须自己补 package.json(打包时需要)。想跟着走一遍完整流程见 开发教程。
DSH plugin 工程要装哪三类依赖
依赖按需引入,最小插件只需要类型。 三类官方包各自的职责:
| 包 | 提供 | 什么时候装 |
|---|---|---|
@deepseek-ai/cordis | Context、Service 等类型 | 所有插件 |
@deepseek-ai/dsh-tools | defineTool 与工具扩展点 | 写工具插件时 |
@deepseek-ai/schemastery | Schema,用于声明 Config | 插件需要配置时 |
不要一股脑全装:类型包(cordis)通常作为 dev 依赖,运行期真正需要的是 dsh-tools 这类被 apply 使用的包(来源)。
DSH plugin 开发环境自检:跑通这一步就够了
判断环境是否 OK 的标准不是「装了哪些东西」,而是最小插件能否被加载。 三步做完就能确认:
- 取绝对路径:在检出根执行
pwd,后面写进配置的必须是完整路径。 - 写覆盖层配置:在
scratch-plugin/cordis.yml里插入插件行:
- insert:
- id: hello
name: '/absolute/path/to/deepseek-harness/scratch-plugin/src/my-plugin.ts'
- 带覆盖层启动:
pnpm dsh web --patch ./scratch-plugin/cordis.yml,预期终端打印[hello-plugin] plugin loaded!。
没打印就按这个顺序排查:路径是否为绝对路径 → pnpm install 是否装完 → Node 版本是否满足 engines → 检出是否已 pnpm run build。这四步覆盖绝大多数环境问题。
DSH plugin 开发环境搭好后的下一步
环境通过后,先定插件的形态与能力落点,再动手写。 建议顺序:照 开发指南 判断函数 / 对象 / 类与能力注册到哪里,照 怎么写插件 写代码,最后用 开发规范 的自检清单过一遍。要打包发布再看 打包成 bundle 与 发布到插件中心。
常见问题
**开发 DSH plugin 前最少要准备三样:Node.js、pnpm、以及一份可运行的 Harness 本体。** 官方「你的第一个插件」把前置条件写成「从一份已完成 run-from-source 的仓库检出开始」,也就是要先能 pnpm dsh web 把 Web UI 跑起来,再开始写插件(来源:官方「你的第一个插件」)。
**写 DSH plugin 建议用源码检出。** npx @deepseek-ai/dsh web 适合只想用 Harness 的用户,一条命令跑起 Web UI;但插件本地调试要用 --patch 覆盖层挂载绝对路径的源码文件,官方教程也是从仓库根创建 scratch-plugin 目录开始的。两者可以并存:日常用 npx,开发插件时进检出(来源:官方 README 与「你的第一个插件」)。
**create-dsh-plugin 是 DSH plugin 的工程脚手架,提供 tool / events / webui 三套模板**,并用 next 标签做版本钉住,内置 --verify 冒烟测试。它在 package.json 的 engines 里声明需要 **Node ^22.19.0 || >=24.0.0**,所以装依赖前先确认本地 Node 版本(来源:npm create-dsh-plugin)。
**DSH plugin 工程按需装三类依赖**:① @deepseek-ai/cordis(Context 等类型);② @deepseek-ai/dsh-tools(defineTool,写工具插件才需要);③ @deepseek-ai/schemastery(声明 Config schema,需要配置才用)。三者都是按需引入,最小插件只需要 cordis 的类型(来源:官方「你的第一个插件」与「构建一个工具」)。
**确认 DSH plugin 开发环境的方法是用最小插件跑一次加载日志。** 写一个只 console.log 的插件,用 --patch 覆盖层挂进 Web UI,启动时终端打印出那行日志,就说明 Node、pnpm、Harness 与加载链路全部正常。这一步不涉及打包,是成本最低的环境自检(来源:官方「你的第一个插件」)。
相关术语
- run-from-source
- run-from-source 是 DSH plugin 开发的前置状态:从仓库检出运行 Harness——git clone 后依次 pnpm install、pnpm run build,再用 pnpm dsh web 启动。官方要求插件教程从这个状态开始。— https://github.com/deepseek-ai/deepseek-harness/blob/master/README.md
- pnpm workspace
- pnpm workspace 是 DeepSeek Harness 源码仓库的组织方式,因此 DSH plugin 开发命令统一以 pnpm 前缀执行(如 pnpm dsh web);插件开发时的本地路径调试也基于这套工作区解析。— https://github.com/deepseek-ai/deepseek-harness/blob/master/README.md
- create-dsh-plugin
- create-dsh-plugin 是生成 DSH plugin 工程的脚手架,提供 tool / events / webui 模板与 --verify 冒烟测试,并在 engines 中要求 Node ^22.19.0 或 >=24.0.0。— https://www.npmjs.com/package/create-dsh-plugin
- --patch 覆盖层
- --patch 是 DSH plugin 的启动参数,让 dsh 启动时把一份额外的 cordis.yml 叠加到现有 profile 上,用于挂载尚未发布的本地插件;它只贡献配置,不改变 loader 解析模块路径所用的 profile 目录。— https://github.com/deepseek-ai/deepseek-harness/blob/master/docs/user/develop/basic/index.md
来源
- DeepSeek Harness README(run-from-source)· deepseek-ai
- DeepSeek Harness 官方文档 - 你的第一个插件(前置条件)· deepseek-ai
- npm - create-dsh-plugin(engines 与模板)· npm
- dsh CLI README· deepseek-ai