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
羽毛球分组比赛记分
小程序二维码

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

小夜