DSH plugin 从零怎么写?最小插件目录、本地构建与装进 profile 调试的完整起步流程

简介: 写第一个 DSH plugin 只需要一个导出 apply 函数的模块:先用 patch 覆盖层把本地文件插进 Web 界面验证,再做成包用 dsh plugin --profile add 装进 profile,最后用 --dump-config 与日志排错。

写第一个 DSH plugin 只需要一个导出 apply 函数的模块:先用 patch 覆盖层把本地文件插进 Web 界面验证,再做成包用 dsh plugin --profile add 装进 profile,最后用 --dump-config 与日志排错。

本文转自 DSH Plugin Hub 插件市场


写第一个 DSH plugin 不需要搭一套完整工程:一个 TypeScript 模块加一个 apply 函数就是完整插件。 真正需要想清楚的是调试闭环——先让宿主加载到它,再验证它真的生效。这篇按「最小结构 → 接配置 → 装进 profile → 排错」四步走一遍。

最小 DSH plugin 长什么样:一个模块加一个 apply 函数

在 DeepSeek Harness 里,插件就是一个导出 apply 函数的 TypeScript 模块,框架加载时调用 apply 并传入 ctx,你通过 ctx 注册能力(来源)。

  1. 建一个目录 — 找一个空目录作为实验目录,例如在仓库根下建 scratch-plugin/src。预期:有地方放插件文件,且不污染主工程结构。
  2. 写最小插件文件 — 文件里导出 name 用于标识身份,并导出 apply(ctx)。预期:这就是一个完整插件,name 与 apply 两者缺一不可。
  3. 需要别的服务就声明 inject — 例如要用工具服务就写 export const inject = ['tools']。预期:框架会等到该服务就绪才调用 apply,服务消失时自动卸载。
  4. 选插件形态 — 函数形式最常用;需要向其他插件提供服务时用类形式;也可以导出带 name、inject、apply 的对象。预期:三种形态等价,先用函数形式把闭环跑通。

关于清理:通过 ctx 注册的东西——事件监听、工具、定时器——在插件卸载时会自动撤销,不需要手写 removeListener。只有框架管不到的资源(比如网络连接)才用 ctx.effect() 返回一个处置函数。

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

export const name = 'hello-plugin'

export function apply(ctx: Context) {
   
  console.log('[hello-plugin] plugin loaded!')
}

让 DSH plugin 接受配置:Config 与 apply 的第二个参数

插件要接受用户配置,就导出 Config 描述结构,并把 apply 的第二个参数当作配置对象接收(来源)。

  1. 定义配置结构 — 用 Schema.object({...}) 声明字段。预期:字段类型与默认值都被框架掌握,写错配置会被校验拦下。
  2. 在 apply 里接收配置 — 写成 export function apply(ctx: Context, config: Config)。预期:函数体里能直接用 config.xxx,不必自己解析来源。
  3. 给字段留合理默认值 — 让插件在没有任何配置时也能工作。预期:本地调试阶段可以先不写配置,先验证加载。
  4. 配置来源记在 profile — 配置最终写进 profile 的配置层,而不是插件代码里。预期:同一份插件代码在不同 profile 下可以有不同行为,这也是本地调试与线上行为不一致的常见原因。

配置放在哪个文件、三层配置怎么叠加,见《配置文件在哪》。

把 DSH plugin 装进 profile 调试:patch 覆盖层与本地包两条路

本地插件有两条落地路径:单文件用 patch 覆盖层插进去,成型的包用 dsh plugin 装进 profile(来源)。

  1. 写一个 patch 覆盖层 — 建一个 YAML 文件,用 insert 列表写入条目的 id 与 name。预期:name 指向你的插件文件,必须写绝对路径。
  2. 带覆盖层启动 — 用 --patch 把这个 YAML 传给 dsh。预期:启动时终端打印插件里的那行日志,说明插件已被加载。
  3. 换成包装进 profile — 把插件做成带 package.json 的本地包目录,然后执行 dsh plugin --profile web add <本地路径>。预期:命令把参数转发给 pnpm,pnpm 会把本地目录装进该 profile 的 node_modules。
  4. 改完重新加载验证 — 修改插件代码后重启宿主再观察日志。预期:改动生效;没有生效先确认加载的是不是你改的那份文件。
  5. 也可以走图形界面 — 本地目录或源码同样能从插件市场的自定义安装装进当前 profile。预期:省去手敲命令,装完在已安装列表里能看到条目。

自定义安装

本地目录安装的完整说明见《本地目录怎么装》,开发全流程与打包见《怎么开发 DSH plugin》。

调试 DSH plugin 与排错:--dump-config、日志与加载失败怎么查

插件没生效时先分两层判断:它到底有没有进配置树,以及 apply 有没有抛错(来源)。

  1. 先干跑一次配置检查 — 用 --dump-default-config 或 --dump-config 在不启动的情况下打印合成后的配置树。预期:配置树里能看到你的插件条目,说明加载路径对;看不到就先修 patch 或依赖声明,别急着改代码。
  2. 再看启动输出 — 宿主启动时会在终端打印插件加载信息。预期:能区分「没被加载」与「加载了但报错」两种情况。
  3. 加载失败按 apply 报错处理 — apply 抛出异常会让插件进入失败状态。预期:读终端里的异常栈,定位到具体代码行,而不是反复重启。
  4. 按类别看系统日志 — 在日志里按类别与级别筛选。预期:能看出失败发生在加载阶段还是运行阶段,避免只看到一句「没生效」。
  5. 顺带确认 profile 没搞错 — 插件装在哪个 profile,就只在该 profile 生效。预期:换 profile 启动却没装过插件,表现就是「明明装了却不起作用」。

调试环境怎么搭、源码构建怎么跑,见《源码构建与调试环境》。

开发 DSH plugin 的注意事项与局限

  1. apply 是唯一硬要求:没有 apply 的模块不会被当作插件加载,name 用于标识身份,二者别漏。
  2. 插入本地文件必须用绝对路径:patch 覆盖层只贡献配置,不会改变模块解析目录,相对路径会找不到文件。
  3. 依赖要声明不要假设:需要 tools、llm 等服务就写进 inject,让框架处理加载时序,别自己在 apply 里等待。
  4. 注意自动清理的边界:ctx 注册的资源会自动撤销,自己创建的资源必须用 ctx.effect() 返回处置函数,否则热重载会留下残留。
  5. 开发者预览阶段接口会变:官方明确未来会有破坏兼容性的变更,插件代码要保持可调整,别把实现绑死在某一版内部行为上。

跑通本地闭环之后再考虑发布:把仓库加上官方约定的 dsh-plugin 话题,然后走插件市场上架流程,步骤见《怎么发布到插件市场》。开发期间想找现成插件参考实现,可以在 DSH Plugin Hub 里按分类浏览。


常见问题

写一个最小的 DSH plugin 需要哪些文件,一定要建完整工程吗?

最小的 DSH plugin 只是一个导出 apply 函数的 TypeScript 模块,name 用于标识插件身份,需要别的服务时再加 inject。官方入门教程就是建一个目录放一个 .ts 文件、不建完整工程,用 patch 覆盖层把它插进 Web 界面验证加载。

DeepSeek Harness 的插件怎么读取用户配置并生效?

DeepSeek Harness 插件通过导出 Config 描述配置结构,并把 apply 的第二个参数作为配置对象接收,框架会按 Config 校验并传入。写法是 export const Config: Schema<Config> = Schema.object({...}) 配合 export function apply(ctx: Context, config: Config)。

本地写的 DSH plugin 怎么装进 profile 调试,不用发布也能装吗?

DSH plugin 不用发布也能装。两条路:把本地文件用 patch 覆盖层直接插进运行中的配置树,适合单文件快速验证;或者把本地包目录用 dsh plugin --profile web add <本地路径> 装进 profile,因为它转发给 pnpm,pnpm 支持装本地路径。

DSH plugin 加载失败怎么排查,插件没生效该看哪里?

DSH plugin 加载失败先分两层看:配置层用 dsh --dump-config 确认插件是否真的进了合成后的配置树,运行层看宿主启动时的终端输出与系统日志里的加载报错。apply 抛出异常会让插件进入失败状态,需要按报错改代码而不是反复重启。

本地调试没问题了,把 DSH plugin 发布到市场的流程是什么?

DSH plugin 本地跑通后再考虑发布:把插件做成独立的 npm 包或公开仓库,仓库加上官方约定的 dsh-plugin 话题便于被发现,然后走插件市场上架流程。发布与上架的完整步骤与本地调试不是一回事,可参考站内的发布教程。


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

分类:插件开发

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

首页:DSH Plugin Hub

来源:DeepSeek Harness 开发指南 - 第一个插件、DeepSeek Harness 开发指南 - 插件配置、dsh CLI README(官方仓库)

相关文章
|
20天前
|
JavaScript 开发工具 git
DSH 插件怎么开发?从最小插件到打包安装
DSH 插件是一个导出 apply 函数的 TypeScript 模块,基于 Cordis:通过 name 命名、inject 声明依赖、ctx 注册能力、Config schema 接受配置。本文从最小插件写起,讲清打包成 bundle、用 dsh plugin add 装进 profile 的完整流程。
339 0
|
6天前
|
JavaScript 开发工具 git
DSH plugin 开发环境搭建:Node 与 pnpm 准备、两种获取 Harness 的方式、工程依赖与脚手架
DeepSeek Harness(DSH)插件开发环境搭建:装 Node 与 pnpm,用 npx @deepseek-ai/dsh 或源码检出获得 Harness,再用 create-dsh-plugin 生成工程,装好 cordis、dsh-tools、schemastery 三类依赖。
127 0
|
20天前
|
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 差异指南
|
1月前
|
缓存 数据可视化 开发工具
DeepSeek Harness 怎么更新?dsh 更新完整指南:更新本体(npx、npm、源码)与更新插件两种方式
DeepSeek Harness 的更新分两层:本体更新(npx 自动最新、npm update -g、源码 git pull)与插件更新(插件市场点更新、命令行覆盖安装)。本文按「准备 → 更新本体 → 更新插件 → 更新后检查」四步走,覆盖新手常见疑问。
3077 2
DeepSeek Harness 怎么更新?dsh 更新完整指南:更新本体(npx、npm、源码)与更新插件两种方式
|
3月前
|
人工智能
Qwen3.8抢先体验!正式版即将发布并开源!
千问Qwen3.8即将开源,参数达2.4T,进化速度以“天”计,实力媲美Fable 5。预览版Qwen3.8-Max已上线阿里Token Plan等平台,限时优惠:日间Credits低至1折,夜间更优,个人/团队版月付仅35元起!
5020 158
|
23天前
|
人工智能 安全 JavaScript
DeepSeek Harness开源Agent运行框架实战:4种安装方式、WebUI启动、插件管理与排坑全流程
随着AI Agent技术快速发展,单纯依靠大模型对话能力,很难完成复杂的自动化任务。模型需要具备读取本地文件、执行脚本、访问网页、操作文件系统、拆分复杂任务并分步执行的能力。DeepSeek Harness,简称DSH,是开源的AI Agent执行运行框架,遵循“Agent = 大模型 + Harness执行底座”的设计理念,为大模型提供一套安全可控的工具调用、任务编排、沙箱执行与插件扩展能力。它提供Web可视化界面与完整命令行工具,支持插件化扩展,能够让大模型自主拆解复杂需求,调用各类工具分步完成目标,无论是本地电脑调试,还是部署在云服务器上长期运行智能体任务都十分合适。本文为从0到1完整保
1329 0
|
2月前
|
缓存
dsh plugin 命令怎么用?DSH 插件安装、卸载、列出命令大全
dsh plugin 是管理 DSH 插件的命令族:add 安装、remove 卸载、list 列出,都配合 --profile 指定环境。安装有 npm 包名、GitHub 源码、本地目录、市场图形化四种方式,卸载有命令行与界面两种,本文逐个展开步骤并附常见问题排查。
2266 1
dsh plugin 命令怎么用?DSH 插件安装、卸载、列出命令大全
|
25天前
|
机器学习/深度学习 缓存 人工智能
Claude Fable 5.1 发布解读:科研智能体跑分翻倍,Agent 成本降45%
Claude Fable 5.1 于 2026 年 9 月发布:科研智能体基准翻倍、缓存降价 75%,Agent 成本最高降 45%,一文讲清升级点与价格。
321 1
Claude Fable 5.1 发布解读:科研智能体跑分翻倍,Agent 成本降45%
|
2月前
|
搜索推荐 Linux API
趁 DeepSeek Harness 刚火,我做了一个 DSH 插件市场,2 天冷启动记录
DeepSeek Harness 插件生态分散难用?DSH Marketplace(dshmarketplace.dev)应运而生:聚合插件、标注兼容性、提供一键安装。支持Web/CLI/Python/API/DSH内置Store等多入口,含自托管插件。开源共建,欢迎用户反馈与作者入驻。(239字)