dsh-plugin-factory:让 DSH 会话里的 Agent 自己写插件

前言

如果你在给 DeepSeek Harness(dsh)做插件开发,会碰到一个现实问题:dsh 的插件有一套严格的契约规范,apply(ctx) 生命周期函数、defineTool 工具定义、Schema DSL 硬约束。这些 API 对人来说要翻文档,对模型来说更麻烦,dsh 发布不久,模型缺乏针对性训练数据,直接在会话里让 Agent「帮我做一个 XX 插件」,很容易出现 API 幻觉,产出跑不起来的代码。

dsh-plugin-factory 要解决的就是这件事:它给 dsh 会话中的 Agent 提供一套完整的插件开发工具链,让 Agent 自己读契约文档、生成合法骨架、自查校验,最后给出可直接安装的片段,全程不需要人工编写。

这是什么

用 README 的原话定位:让 dsh 的 AI 自己编写 dsh 插件,自举式插件生成工具。维护者为 ktziy,License 为 MIT,当前版本 0.3.2。

它的思路是把契约规范打包成「文档 + 脚手架 + 校验器」三个工具,从源头约束 Agent 输出,确保生成代码的合法性。README 还注明本插件由 DeepSeek 模型制作(AI 含量高达 99.99%):因为模型发布不久缺乏相关训练数据,由 DeepSeekV4 闪光版整理、Pro 版分发为提示词包供模型使用。这个背景本身也说明了插件的用途——给没有训练数据的模型补上契约知识。

三个核心工具

plugin_doc:按主题读取契约文档

Agent 写插件前先查规范,而不是凭记忆猜 API。plugin_doc 支持按主题读取开发契约文档,主题包括:

core / tools / services / llm / compose / preset / client / api

另外支持 file= 按路径读取官方结构化参考(ref/)与官方原文(official/)。

plugin_scaffold:生成六种插件骨架

plugin_scaffold 生成插件骨架,支持 6 种 kind:

kind 说明
tool Host 工具(defineTool)
service Host Service 类
event Host 事件监听
llm-adapter Host LLM 适配器
client Web UI 插件(settings.section 槽位)
client-node Web UI 对话节点

plugin_validate:落盘前的静态自查

plugin_validate 基于守卫规则做静态自查,覆盖 tool 的 defineTool 规则,以及 client 的 apply/inject/slots。生成骨架后先跑一次校验,再进入落盘环节。

Host 侧与 Client 侧的覆盖

按 README 的开发进度表,两侧的能力如下。

Host 侧:

  • Tool 工具:文档 + 脚手架 + 校验
  • Service 服务:脚手架(Service 类 + declare module)
  • 事件监听/拦截:脚手架(ctx.on + 分发模式提示)
  • 配置:文档 + scaffold 带 Config 示例
  • LLM 适配器:脚手架(LlmAdapter + StreamChunk 协议)
  • 打包/发布:文档 + 包本身是 bundle

Client 侧:

  • Client UI 插件(settings.section 槽位):文档 + 脚手架 + 校验 + 构建 + 挂载实测
  • 对话节点 UI:脚手架(ConversationNodeDefinition 全套)
  • 其他槽位:文档覆盖(client.md §3 完整清单)+ 两个代表模板

README 记录的自测结果:无模型自测 6 种 kind 全部通过,编译通过,打包 29KB。

安装

README 给出三种安装方式,推荐 tarball(免构建):

# 方式一:tarball(推荐,免构建)
dsh plugin --profile web add ./dsh-plugin-factory-0.3.2.tgz

# 方式二:Git 仓库
dsh plugin --profile web add github:ktziy/dsh-plugin-factory

# 方式三:NPM
dsh plugin --profile web add dsh-plugin-factory

三条命令都指定了 --profile web,按你的 profile 实际情况调整。

典型用法

安装完成后,直接在 dsh 会话中对 Agent 说:

Use plugin_scaffold to create a plugin named weather-tool with toolName get_weather.

Agent 将自动返回两样东西:合法的插件骨架源码,以及可直接粘贴的 --patch 安装片段。

背后的完整工作流程是这样的:

  1. Agent 调用 plugin_doc 读取契约规范
  2. 调用 plugin_scaffold 生成合法骨架
  3. 调用 plugin_validate 自查校验
  4. 利用 dsh 的 fs/bash 工具落盘
  5. 通过 dsh plugin add 加载插件

更完整的工作流程和高级用法,可参阅仓库内的核心文档 docs/CORE.md。README 的「效果预览」一节目前标注为待补充,实际效果以你自己环境里的运行为准。

适用场景与注意事项

适合两类人:一是经常为 dsh 写插件、想省去反复翻契约文档的开发者;二是希望在会话内让 Agent 代劳插件生成,减少 API 幻觉带来的调试成本。

使用前注意两点:

  1. 插件以当前 dsh 进程权限运行,上面工作流程里的 fs/bash 落盘操作也在这个权限下执行。安装任何第三方插件前,建议先检查源码与许可证。本插件源码在 GitHub 公开,License 为 MIT,package.json 的 license 字段同为 MIT。
  2. 插件本身由模型制作,Agent 生成结果仍建议人工过一遍,尤其是通过 plugin_validate 之后再看一眼再安装。

小结

dsh-plugin-factory 把「人读文档、人写代码、人调试」的插件开发流程,压缩成 Agent 会话内的一次工具链调用。对 dsh 插件生态来说,这类自举工具降低了写插件的门槛,也让「一切皆插件」的理念更容易落地。

  • 社区目录页:https://www.skillhub.cn/plugins/ktziy/dsh-plugin-factory (社区独立站点,与 DeepSeek / 幻方无官方从属关系)
  • GitHub 仓库:https://github.com/ktziy/dsh-plugin-factory
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜