🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

插件开发模版 elonnzhang/dsh-plugin-template

DeepSeek Harness
elonnzhang72 天前有提交已提供中文文档扫描:未发现敏感能力

提供最小与全能力两套起点,快速搭建 dsh 插件

26.9/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/9/29 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add elonnzhang/dsh-plugin-template
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:待复验
是什么
dsh 原生插件 · dev
装得上吗
曾在 dsh 0.2.0-rc.2 下真实安装成功,但当前 dsh 已更新至 0.2.1-rc.5,本站尚未在新版下复验
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 72 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🟢 扫描:未发现敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。

扫描于 2026/10/31(1 天前) · 范围 全包扫描 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-attachment@deepseek-ai/dsh-brand@deepseek-ai/dsh-code-runtime@deepseek-ai/dsh-invariants@deepseek-ai/dsh-timeout@deepseek-ai/dsh-user-approval
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 最小化模版
  • 全能力模版
  • 含构建与加载路径

README

由 DeepSeek 最新模型翻译生成
dsh-plugin-template DeepSeek Harness(dsh)插件开发模版。提供两套可直接复制的起点、一套构建方式,以及把插件加载进 dsh 的完整路径。 模版里的每一处 API 都对照 npm 上已发布的 @deepseek-ai/ 包类型核对过,并通过了本仓库的 typecheck → build → smoke 三步验证。 两套模版 | | packages/minimal | packages/full | | 定位 | 一个插件的最小可用形态 | 逐项演示 harness 的全部主要扩展点 | | 代码量 | 1 个文件 | 8 个文件,按扩展点分文件 | | 覆盖 | name / inject / Config / apply + 一个工具 | 见下方清单 | | 适合 | 加一个工具、写个小钩子 | 做一整套能力,或当作 API 速查 | full 覆盖的扩展点: - 配置 — Schemastery schema、默认值、加载时校验(src/config.ts) - 类型化事件 — 声明合并 + emit / waterfall 两种分发模式(src/events.ts) - 能力分层 — Service Definition / Provider / Consumer 三角色(src/capability.ts)
展开完整文档(README 剩余 1 节)
dsh-plugin-template

DeepSeek Harness(dsh)插件开发模版。提供两套可直接复制的起点、一套构建方式,以及把插件加载进 dsh 的完整路径。

模版里的每一处 API 都对照 npm 上已发布的 @deepseek-ai/ 包类型核对过,并通过了本仓库的 typecheck → build → smoke 三步验证。

两套模版

| | packages/minimal | packages/full |
| 定位 | 一个插件的最小可用形态 | 逐项演示 harness 的全部主要扩展点 |
| 代码量 | 1 个文件 | 8 个文件,按扩展点分文件 |
| 覆盖 | name / inject / Config / apply + 一个工具 | 见下方清单 |
| 适合 | 加一个工具、写个小钩子 | 做一整套能力,或当作 API 速查 |

full 覆盖的扩展点:

- 配置 — Schemastery schema、默认值、加载时校验(src/config.ts)
- 类型化事件 — 声明合并 + emit / waterfall 两种分发模式(src/events.ts)
- 能力分层 — Service Definition / Provider / Consumer 三角色(src/capability.ts)
- 模型工具 — 嵌套参数 schema、规范值、Native 渲染器、UI 卡片、超时、并发分类(src/tool-echo.ts)
- 长任务 — ctx.jobs 后台任务句柄、前台/后台双分支、取消语义(src/tool-watch.ts)
- 执行策略与观测 — tools/pre-execute、ctx.tools.guard()、tools/post-execute、tools/result(src/hooks.ts)
- 系统提示词 — ctx.systemPrompt.section() 与 order 约定(src/prompt.ts)
- 斜杠命令 — ctx.commands.register(),面向人而非模型(src/command.ts)
- 生命周期 — ctx.effect() 手动清理、ctx.plugin() 子插件组合(src/index.ts、src/hooks.ts)

前置条件

- Node.js ^22.19.0 || >=24.0.0
- pnpm(本仓库用 pnpm workspace 管理两个模版包)
- dsh CLI —— 仅在加载插件时需要;构建和类型检查不需要它

跑通

pnpm install
pnpm run check # typecheck + build + smoke

check 通过意味着两个模版都能编译、产物可加载、Config schema 能求值出默认值。

接着挂进 dsh 看效果:

pnpm run dev:web # 生成开发 overlay 并用它启动 Web UI

在对话框里输入 Use the greet tool to greet Ada.,模型会调用 greet 工具。

插件契约

一个 dsh 插件就是一个导出 apply 的模块。框架加载时调用 apply(ctx, config),你通过 ctx 注册能力:

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

export const name = 'my-plugin' // 插件标识
export const inject = ['tools'] // 依赖的服务;apply 运行时它们必然就绪

export function apply(ctx: Context) {
// 在这里注册能力 }

四条要点:

- 注册是可逆的副作用。 通过 ctx 注册的一切 —— 工具、事件监听、提示词段、命令 ——在插件卸载或热替换时自动撤销。需要手动清理的资源用 ctx.effect() 返回清理函数。
- inject 表达加载顺序。 声明的服务未就绪时插件停在 PENDING,这是合法状态而非错误:它不打印任何东西,所以「插件没反应」的第一个排查方向就是 fiber 状态。
- 可选依赖不写进 inject。 在使用点用 ctx.get('logger') 查询,缺失时降级。
- 不要硬编码可调参数。 凡是不同部署可能取不同值的,都必须是 Config 字段。
检验标准:能否只改 cordis.patch.yml 就改变它,而不动代码?

插件也可以写成对象形式(export default { name, inject, apply })或类形式(extends Service,用于对外提供服务)。函数形式覆盖大多数场景。

构建

两个模版都用 tsdown 从 src/ 直接产出 lib/index.js + lib/index.d.ts:

pnpm run build # 两个包
pnpm --filter dsh-plugin-full run dev # watch 模式

构建器只用 tsdown 一个。为什么不是 tsup(官方已停止维护)或 Vite(library mode 不会自动 external dependencies / peerDependencies),对照见 docs/build.md。

一条不能违反的规则:@deepseek-ai/cordis 与 @deepseek-ai/dsh- 必须 external。
它们声明为 peerDependencies,运行时由 dsh 安装本身提供。打进产物会出现第二份 Context / Service 基类,插件与宿主无法互通。

细节(产物约定、prepare 脚本、为什么 tsc 只做 --noEmit)见 docs/build.md。

加载到 dsh

三种方式,按开发阶段选:

| 方式 | 命令 | 何时用 |
| 安装进 profile | dsh plugin --profile demo add ./packages/full | 最接近用户真实环境,验收用 |
| --patch overlay 指向产物 | dsh web --patch ./dev/cordis.dev.local.yml | 日常开发;配合 tsdown --watch |
| --patch overlay 指向源码 | 同上,overlay 里写 src/index.ts | 需要源码 checkout 的 dsh(能加载 TS) |

完整说明 —— 配置层顺序、patch 语法、--dump-config 调试、HMR 行为、profile 与组合包的区别 ——见 docs/load-into-dsh.md。

开始你自己的插件

每个模版目录都是自包含的(自带 package.json / tsconfig.json / tsdown.config.ts,不 extends 仓库根配置),复制出去就能独立成仓库:

cp -r packages/minimal ~/my-dsh-plugin
cd ~/my-dsh-plugin && pnpm install && pnpm run build

复制后要改的地方:

1. package.json 的 name(也是 patch 行引用它的名字)、description、version
2. cordis.patch.yml 里的 id 与 name(name 必须等于包名)
3. src/index.ts 的 export const name
4. 工具名、Config 字段

如果打算通过 dsh plugin add github:you/repo 分发,插件包必须位于仓库根目录 ——
git 安装拉取的是仓库根,而不是某个子目录。所以请把复制出去的目录作为新仓库的根。

目录结构

dsh-plugin-template/
├── packages/
│ ├── minimal/ # 最小化模版(自包含,可直接复制) │ └── full/ # 全能力模版(自包含,可直接复制) ├── dev/ # 开发用 --patch overlay(生成物被 gitignore) ├── scripts/ │ ├── dev-patch.mjs # 生成带绝对路径的开发 overlay │ └── smoke.mjs # 加载产物、校验插件契约 └── docs/ ├── build.md # 构建方式 ├── load-into-dsh.md # 加载到 dsh ├── api-cheatsheet.md # 扩展点速查 └── publish.md # 发布与分发

上游文档

本模版是对 harness 官方文档的可运行提炼。深入阅读:

- 插件入门 → docs/user/develop/basic/(第一个插件、工具、配置、打包安装)
- 框架机制 → docs/user/develop/framework/(服务与依赖、事件系统)
- 能力分层 → docs/user/develop/practice/
- 工具约定的真源 → docs/cookbook/adding-a-tool.md
- 扩展形态汇总 → docs/cookbook/extension-cookbook.md
- Cordis 框架 → docs/cordis-primer.md、docs/cordis-tutorial/
- CLI 行为(层优先级、flag、profile)→ apps/cli/reference/README.md
- 每个服务/事件的生成参考 → docs/subsystems/*.md 的 cordis-surface 区块
预览分享卡片长什么样 ↓elonnzhang/dsh-plugin-template
分享 · DeepSeek Harness Hub
elonnzhang/dsh-plugin-template

提供最小与全能力两套起点,快速搭建 dsh 插件

回到顶部