@wangmuy/dsh-provider-dispatcher

DeepSeek Harness (DSH) 的插件開發中,當多個插件需要共享同一個能力(例如統一搜索或網頁抓取)時,直接調用全局 ctx 容易造成衝突或狀態混亂。@wangmuy/dsh-provider-dispatcher 是一個通用提供者調度器,它將多個普通 DSH 子插件代理到一個能力後,讓它們協作工作。

這是一個通用提供者調度器,屬於工作流類別,由 wangmuy 維護,採用 MIT 許可證。它允許多個子插件在隔離的 realm 中運行,框架將子插件的註冊調用記錄下來,並通過一個 setup 腳本構建代理,將單一操作分發給所有記錄的子提供者。

核心功能

  • 將多個普通 DSH 子插件代理到一個能力後。
  • 支持 web search 和 web fetch 能力的分發。
  • 提供並行(parallel)合併和失敗即止(bail)策略。
  • 支持自定義 merge 函數。
  • 爲子插件提供隔離的 realm。
  • 通過 cordis.patch.yml 集成配置。

安裝與啓用

安裝插件需要執行以下命令:

dsh plugin --profile web add @wangmuy/dsh-provider-dispatcher

配置與使用

安裝完成後,需要在 cordis.patch.yml 中定義配置。配置主要包含注入服務、setup 腳本和子插件列表。

  • inject: 指定注入的服務(例如 ['web'])。
  • setup: 指定 setup 腳本的模塊路徑。
  • children: 子插件數組,每個子插件包含 name(模塊路徑)和 config。

插件隨帶兩個內置的 setup 腳本:
* web-search-setup: 用於分發搜索提供者(registerSearchProvider)。
* web-fetch-setup: 用於分發抓取提供者(registerFetchProvider)。

配置參數(params)由 setup 腳本讀取:
* providerId: 代理在全局註冊的 ID(默認 dispatcher-search 或 dispatcher-fetch)。
* strategy: 策略,支持 parallel(運行所有併合並)或 bail(遇到第一個成功即止)。
* tolerateFailures: 是否容忍子插件失敗,默認爲 true。
* merge: 自定義合併函數的模塊路徑。

子插件是普通的 DSH 插件,它們通過 ctx.web.registerSearchProvider 或 registerFetchProvider 註冊提供者。這些調用不會直接註冊到全局 ctx,而是在隔離的 realm 中被捕獲。

注意事項

子插件如果是 bundles,必須從 dsh.profile.bundles 中移除。

如果子插件(例如 @liustack/modsearch)既在 bundles 中又在 children 中,其 bundle 層會繞過調度器代理,直接註冊到全局 ctx.web 或 ctx.tools。移除 bundles 配置項後,插件將正確走代理流程。

總結

該插件通過隔離 realm 和代理模式,解決了多插件共享能力時的協調問題。開發者可以通過編寫自定義 setup 腳本,靈活定義子插件的組合邏輯。

GitHub | DSH 目錄

羽毛球分组比赛记分
小程序二维码

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

小夜