dshbase

博客 · 教程

手把手写第一个 DeepSeek Harness 插件:注册、打包、发布

2026年8月30日 · dshbase · 改写解读

本文基于微信公众号「GoCoding」文章改写重组,代码为通用 API 用法示意。

参考/线索(微信;非原文搬运) — 本文基于微信公众号「GoCoding」文章改写重组,代码为通用 API 用法示意。

Harness 自带插件,但真正好玩的是自己写。这篇教程把社区开发记录重新组织了一遍:注册工具、热加载、打包、发布,一条链路走通。

一个模块,一个工具

DSH 插件本质是一个导出 apply(ctx, config) 的 TypeScript 模块,能力全部通过 ctx 注册。以最小可用的 greet 工具为例,只需三步:声明 inject: ['tools'] 让 Cordis 等工具注册表就绪;用 Schema.object 定义带默认值的配置(加载时校验,配错直接报清晰错误);最后 ctx.tools.register(defineTool({…})) 挂上名称、描述、参数和 execute 函数。

再配一个 cordis.yml 覆盖文件插入插件 id、源码路径和配置,然后:

pnpm dsh web --patch ./start-dsh-plugin/cordis.yml

对话里让模型调用 greet,它就会执行你的代码——全程无需重启。这种热插拔体验更像给游戏写 Mod,而不是做 SDK 集成。

从覆盖文件到可安装组合包

要分发,就给目录补一个 package.json,用 dsh.bundle.patch 字段指向 cordis.patch.yml,目录即变成一个 bundle:

  • 本地安装:pnpm dsh plugin --profile web add ./start-dsh-plugin
  • 按名移除:pnpm dsh plugin --profile web remove start-dsh-plugin
  • 查看最终配置树:pnpm dsh web --dump-config

profile 位于 $DSH_HOME/profiles/<name>web 是预装的那个。

发布:npm、tar 包或 GitHub

发布前补齐构建链(package.jsontsconfig.jsontsconfig.local.json),pnpm exec tsc 编译出 lib/,用 pnpm pack --dry-run 检查内容物,再 pnpm pack 出 tar 包或 pnpm publish --access public 发 npm。GitHub 直装也支持:dsh plugin add github:user/repo

原作者踩过一个真实的坑:示例插件在最新源码上起不来,因为 dsh-tools 已到 0.1.2-alpha.1,而清单里锁的还是旧版本线,导致 CallId 导入失败,最终只能在 harness 仓库内构建解决。版本迭代极快,锁版本不如跟着 master 验证。

去哪找插件——以及 dshbase 的提醒

社区索引有 DSH Market、Awesome DSH Plugin 和 GitHub 上的 awesome-deepseek-harness。但请记住审计原则:插件运行时,你的 Shell 和文件系统就在它手边。安装任何 bundle 前,先读它的 execute 路径——这也是我们对目录里每一个条目的态度。

在 dshbase 上

装随机 GitHub 插件前,先看已验证目录审计说明

全部文章 →