DSH plugin 开发教程:从环境准备、脚手架到打包上架,DSH 插件开发完整教程与新手入门流程

简介: DeepSeek Harness(DSH)插件开发教程:从准备 Node 与 pnpm、创建插件工程、用 cordis.yml 挂载调试,到打包成 bundle 并装进 profile 验证。六步跑通第一个可安装插件。

DeepSeek Harness(DSH)插件开发教程:从准备 Node 与 pnpm、创建插件工程、用 cordis.yml 挂载调试,到打包成 bundle 并装进 profile 验证。六步跑通第一个可安装插件。

本文转自 DSH Plugin Hub 插件市场


DSH plugin 开发教程的完整路径是六步:准备环境 → 创建插件工程 → 写 apply → 用 cordis.yml 挂载调试 → 打包成 bundle → 装进 profile 验证。 前三步让插件跑起来,后三步把它变成别人能装的包。本文按官方文档的顺序给出每一步的确切命令与预期输出。无论你把它叫 DSH插件 还是 DeepSeek插件,走的都是同一套插件框架与同一份命令约定。

DSH plugin 开发第一步:准备环境

DSH plugin 开发需要能跑源码版的 DeepSeek Harness,官方教程从仓库检出开始。 前置条件是 Node 与 pnpm 装好,然后 clone 并安装依赖(来源):

git clone https://github.com/deepseek-ai/deepseek-harness.git
cd deepseek-harness
pnpm install

如果你还没装好宿主本体,先按《DSH plugin 开发环境搭建》把 Node 版本与 pnpm 配置妥当——版本不匹配会在后面每一步都制造假故障。

DSH plugin 开发第二步:创建插件工程

在仓库根下建一个临时目录放插件源码,tmp/ 与 scratch-* 都不进版本控制。 官方教程的做法:

mkdir -p scratch-plugin/src

这不是必须叫 scratch-plugin,只是官方示例的命名。真正要遵守的只有一条:插件的模块路径由 profile 目录解析,本地调试时用绝对路径引用最省事,所以把源码放在检出内。

DSH plugin 开发第三步:写 apply 让插件能加载

一个 DSH plugin 最小就是导出 apply 的 TypeScript 模块。 创建 scratch-plugin/src/my-plugin.ts:

import type {
    Context } from '@deepseek-ai/cordis'

export const name = 'hello-plugin'

export function apply(ctx: Context) {
   
  // 必需依赖在 apply 运行前就已就绪。
  console.log('[hello-plugin] plugin loaded!')
}

name 是标识,apply 是入口,ctx 是注册能力的通道。想深入导出与命名的规范细节,见《DSH plugin 开发规范》。

DSH plugin 开发第四步:用 cordis.yml 挂载调试

用 --patch 覆盖层把本地插件插进配置树,启动 Web UI 看输出。 三步(来源):

  1. 取仓库根的绝对路径 —— 在仓库根执行 pwd。预期:打印出仓库根的绝对路径,下一步的 name 要用它。
pwd
  1. 写覆盖层配置 —— 创建 scratch-plugin/cordis.yml,把 name 换成上一步打印的真实路径:
- insert:
    - id: hello
      name: '/absolute/path/to/deepseek-harness/scratch-plugin/src/my-plugin.ts'
  1. 带 patch 启动 —— 执行下面的命令。预期:Web UI 在 http://127.0.0.1:3080 起来,启动过程中终端打印 [hello-plugin] plugin loaded!:
pnpm dsh web --patch ./scratch-plugin/cordis.yml

两个必须记住的点:插件路径必须绝对;patch 文件只贡献配置,不会改变加载器解析模块路径的 profile 目录。

DSH plugin 开发第五步:打包成 bundle

要让别人能装,就得把插件做成「组合包」(bundle)。 目录结构:

hello-plugin/
├── package.json       # 声明 dsh.bundle
├── cordis.patch.yml   # 该组合包贡献的配置层
└── index.js           # patch 行引用的插件模块

package.json 的四项声明:

{
   
  "name": "dsh-hello-plugin",
  "version": "0.1.0",
  "type": "module",
  "main": "index.js",
  "files": ["index.js", "cordis.patch.yml"],
  "dsh": {
    "bundle": {
    "patch": "./cordis.patch.yml" } }
}

cordis.patch.yml 按包名引用自己:

- insert:
  - id: hello
    name: dsh-hello-plugin

注意这里的差异:调试期的 cordis.yml 用绝对路径指向源文件,发布期的 cordis.patch.yml 用包名——因为安装后包已经在 profile 的依赖里解析得到。

DSH plugin 开发第六步:装进 profile 验证

先 add、再 --dump-config、最后启动,三步都不能省。 dsh plugin 会把参数转发给 profile 目录里的 pnpm(来源):

  1. 装进 profile —— 执行 dsh plugin --profile demo add ./hello-plugin。预期:包被写进 profile 依赖;因为包声明了 dsh.bundle,DSH 会把它追加进 dsh.profile.bundles。
  2. 核对配置层 —— 执行 dsh --profile demo --dump-config。预期:打印出的配置树里能看到你的 patch 行。跳过这一步直接启动,很容易把「没挂载」误判成「插件代码有 bug」。
  3. 启动验证 —— 执行 dsh --profile demo。预期:插件在运行中的插件树里生效,终端能看到它的输出。

想先看看社区里同类插件的成品长什么样,可以在 DSH Plugin Hub 里挑一个装起来对照。

六步跑通后,最容易卡住的三处:

  1. 路径写成相对路径 —— 第四步的 cordis.yml 里 name 必须是绝对路径,否则加载器从 profile 目录解析,找不到文件。
  2. 打包漏了 cordis.patch.yml —— files 里没写它,npm 不会带上,安装方拿不到配置层,插件装了不挂载。
  3. 本地目录安装与发布包混淆 —— dsh plugin add ./hello-plugin 装的是本地目录,与从 npm 装包的解析路径不同;本地目录安装的细节见《DSH plugin 本地目录安装》。

六步走通后,把成品提交到社区收录的流程见《DSH plugin 发布到插件市场》;如果插件装上了但一直不激活,按《DSH plugin 装了不生效》用 Fiber 状态定位。


常见问题

DSH plugin 开发教程里,从零到能装进 profile 一共要几步?

DSH plugin 开发教程的完整路径是六步:准备环境 → 创建插件工程 → 写 apply → 用 cordis.yml 挂载调试 → 打包成 bundle → 装进 profile 验证。前三步把插件跑起来,后三步把它变成可分发的包。官方教程要求从「已完成 run-from-source 的仓库检出」开始,也就是先有能跑源码版的 DeepSeek Harness(来源:官方「你的第一个插件」)。

开发 DSH plugin 一定要克隆整个 DeepSeek Harness 仓库吗?

开发 DSH plugin 的官方教程确实从仓库检出开始:官方要求在 clone 并 pnpm install 之后,从仓库根创建插件目录,再用 --patch 覆盖层加载本地插件。原因是插件的模块路径由 profile 目录解析,本地调试最省事的做法是把源码放在检出内、用绝对路径引用。如果你只想验证一个独立包,可以跳到第五步的 bundle 流程,用 dsh plugin add 安装(来源:官方「你的第一个插件」)。

DSH plugin 开发时怎么把本地插件挂进 Web UI 调试?

DSH plugin 开发时用 --patch 覆盖层挂载:先 pwd 拿到仓库根绝对路径,然后写一个 cordis.yml,用 insert 把插件路径插进配置树,最后 pnpm dsh web --patch ./scratch-plugin/cordis.yml 启动。插件路径必须是绝对路径,而且 patch 文件只贡献配置、不改变加载器解析模块路径的 profile 目录(来源:官方「你的第一个插件」)。

DSH plugin 打包成 bundle 时,package.json 必须声明哪些字段?

DSH plugin 打包时 package.json 至少要声明四项:main 指向插件入口、type: module、files 包含入口与 cordis.patch.yml、以及 dsh.bundle.patch 指向该 patch 文件。少了 files 里的 cordis.patch.yml,安装方拿不到配置层,插件装了也不会被挂载——这是打包环节最常见的漏项(来源:官方「打包与安装插件」)。

DSH plugin 开发教程里最后一步怎么验证安装成功?

DSH plugin 开发的最后一步是先把配置层打印出来核对,再启动:用 dsh plugin --profile demo add ./hello-plugin 装进 profile,接着 dsh --profile demo --dump-config 确认你的 patch 行已经进配置树,最后 dsh --profile demo 启动并观察插件输出。跳过 --dump-config 直接启动,会把「没挂载」误判成「插件代码有问题」(来源:dsh CLI README)。


本文转自 DSH Plugin Hub 插件市场,版权归属 DSH Plugin Hub 插件市场。

分类:插件开发

原文地址:https://dsh-plugin.org/zh/tutorials/develop-plugin-tutorial

首页:DSH Plugin Hub

来源:官方「你的第一个插件」、官方 Cordis 教程、dsh CLI README

相关文章
|
7天前
|
JSON 编译器 开发工具
DSH plugin 开发常见错误:插件不加载、停在 PENDING、execute 契约越界与卡片渲染非纯函数的修法
DSH plugin 开发常见错误速查:插件不加载、停在 PENDING、apply 转 FAILED、execute 返回值越界、卡片渲染做了 I/O、bundle 漏 patch 文件——按症状定位根因与修法。
|
1天前
|
数据采集 人工智能 开发者
怎么把 DSH plugin 提交到 DSH Plugin Hub?DeepSeek Harness 插件发布流程与审核
把 DSH plugin 提交到 DSH Plugin Hub:先把插件发布成 GitHub 公开仓库、加 dsh-plugin topic,再到本站提交页核对收录要求;通过后插件自动收录、在插件市场可搜索安装,本文讲全发布、提交与收录后的完整流程。
|
监控 架构师 Java
JVM 11 调优指南:如何进行JVM调优,JVM调优参数
JVM 11的优化指南:如何进行JVM调优,以及JVM调优参数有哪些”这篇文章将包含JVM 11调优的核心概念、重要性、调优参数,并提供12个实用的代码示例,每个示例都会结合JVM调优参数和Java代码
843 2
|
21天前
|
JavaScript API 开发工具
DeepSeek Harness 源码怎么构建?DSH plugin 本地开发调试与源码版 npx 差异指南
DeepSeek Harness 从源码构建分五步:装 Node.js 与 pnpm → git clone → pnpm install → pnpm run build → pnpm dsh 启动。源码版最适合本地开发 DSH plugin——dsh plugin 会把参数原样转发给 pnpm,支持本地路径调试;开发完可提交到 DSH Plugin Hub 收录。
205 3
DeepSeek Harness 源码怎么构建?DSH plugin 本地开发调试与源码版 npx 差异指南
|
21天前
|
缓存 Linux iOS开发
DeepSeek Harness 自动更新怎么开?dsh 本体自动更新与插件升级提醒的做法
DeepSeek Harness 本体没有自动更新开关:最省事是用 npx 启动(每次按最新解析),全局安装则用系统计划任务定时跑 npm install -g @latest;插件侧另有启动时检查更新与可更新徽标。
262 1
DeepSeek Harness 自动更新怎么开?dsh 本体自动更新与插件升级提醒的做法
|
2月前
|
存储 开发工具 git
DeepSeek Harness 更新会丢配置吗?dsh 升级后会话、插件保留说明与更新前备份
更新 dsh 只换程序本体,不动数据:密钥在 $DSH_HOME/.credentials.yaml、profile 在 $DSH_HOME/profiles、会话数据都独立保留。本文说明更新到底动什么、备份哪些目录,以及升级后怎么验证插件没坏。
376 3
DeepSeek Harness 更新会丢配置吗?dsh 升级后会话、插件保留说明与更新前备份
|
21天前
|
缓存 Shell Linux
dsh 更新了版本没变怎么办?DeepSeek Harness 多份安装、PATH 与缓存排查
dsh 更新了版本没变,先分清三层:磁盘上的包、PATH 命中的命令、正在跑的进程。最常见是服务没重启与多份安装;本文给 which -a、npm root -g、hash -r 与缓存、镜像滞后的逐项排查。
197 3
|
21天前
|
JavaScript 开发者
DSH plugin 从零怎么写?最小插件目录、本地构建与装进 profile 调试的完整起步流程
写第一个 DSH plugin 只需要一个导出 apply 函数的模块:先用 patch 覆盖层把本地文件插进 Web 界面验证,再做成包用 dsh plugin --profile add 装进 profile,最后用 --dump-config 与日志排错。
176 2
|
21天前
|
缓存 运维 安全
dsh 更新命令速查表:升级 DeepSeek Harness 本体与插件的命令、对应场景与执行后怎么验证
dsh 更新命令一张表看完:npx 重跑即最新、npm 全局用 npm update -g、源码用 git pull 加重建;插件更新走 dsh plugin --profile update 或在市场点更新。每条命令都标明适用场景与执行后的验证方式。
236 0
|
7天前
|
JavaScript 开发工具 git
DSH plugin 开发环境搭建:Node 与 pnpm 准备、两种获取 Harness 的方式、工程依赖与脚手架
DeepSeek Harness(DSH)插件开发环境搭建:装 Node 与 pnpm,用 npx @deepseek-ai/dsh 或源码检出获得 Harness,再用 create-dsh-plugin 生成工程,装好 cordis、dsh-tools、schemastery 三类依赖。
129 0