博客 · 教程
手把手写第一个 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.json、tsconfig.json、tsconfig.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 路径——这也是我们对目录里每一个条目的态度。