---
标题: 官方插件开发教程——一个 apply 函数就是一个插件
类型: 官方文档
来源平台: GitHub
原始链接: https://github.com/deepseek-ai/deepseek-harness/blob/master/docs/user/develop/basic/index.zh.md
发布日期: 2026-08-13
热度: star 149,856（主仓库，采集于 2026-08-18）
语言: 中英双语（官方自带中文版）
作者: deepseek-ai
---

## 中文摘要
官方的「第一个插件」教程门槛低得惊人：一个插件就是一个导出 `apply` 函数的 TypeScript 模块，框架加载时把 `ctx`（上下文对象）递给你，你通过 ctx 注册能力——十几行代码就能跑通 hello world。两个贴心设计值得写进文章：一是**自动清理**，通过 ctx 注册的事件监听、工具、定时器在插件卸载时全部自动回收，不用手写 removeListener；二是**声明依赖**，插件需要用到 tools、llm 等服务时声明 inject 即可，框架保证依赖就绪后才调用你。发布链路也定义得很清楚：本地开发用 `--patch` 覆盖层加载 → 打包成带 `dsh.bundle` manifest 的 npm 包（组合包/bundle）→ 用户用 `dsh plugin add` 装进自己的 profile → 给仓库打 `dsh-plugin` topic 让人发现。这条「写→装→被发现」的完整闭环是生态 5 天冒出几千个插件的机制基础。

## 原文要点/摘录
- 最小插件：`export const name = 'my-plugin'; export function apply(ctx) { ... }`——"这就是完整配置"
- "通过 ctx 注册的任何东西——事件监听、工具、定时器——在插件卸载时都会被自动清理"
- 手动资源用 `ctx.effect()` 声明清理函数
- 本地调试：`pnpm dsh web --patch ./scratch-plugin/cordis.yml`
- 发布两概念：**组合包**（npm 包 + `dsh.bundle` 指向 patch 文件，回答「这个包贡献什么」）与 **profile**（`$DSH_HOME/profiles/<name>` 目录 + `dsh.profile` 列 bundle 顺序，回答「这套配置怎么组成」）；"组合包是你编写并分发的东西；profile 是用户启动的东西"
- 安装命令：`dsh plugin --profile <name> add <包名>`（转发给 pnpm）
- 配套教程：config.md（插件配置）、tool.md（加工具）、publish.md（打包安装）

## 素材价值点
1. 直接回答读者「我也能写插件吗」——十几行代码的 hello world 可原样引用
2. 「自动清理」「声明依赖」是和其他 agent 框架对比时的差异化卖点
3. 「写→打包→dsh plugin add→topic 被发现」四步闭环，解释插件生态为何长得快

## 配图
无
