dsh-fusion:DSH 插件組合衝突檢測與配置融合

前言

DeepSeek Harness(DSH)用分層方式拼裝 profile:根目錄的 cordis.yml、各 bundle 的 cordis.patch.yml、再到 profile 自身的 cordis.patch.yml。插件裝得越多,兩類問題越常見,且往往沒有明顯報錯。

一是同一個 loader 在不同 bundle 裏被掛載兩次。插件市場會報 install-shadow,例如同一模塊名 @deepseek-ai/dsh-skill-filesystem 同時來自 @deepseek-ai/dsh-base 與 @tt-a1i/archify-dsh。模塊可能跑兩遍,工具或服務重複註冊或互相遮蔽。

二是同一配置鍵被更上層 patch 靜默覆蓋。沒有錯誤、沒有日誌,你以爲生效的值其實已被改掉。

dsh-fusion 面向上述場景:讀取真實的層疊棧,標出誰覆蓋了誰,並輸出只含最終合併結果的 patch。維護者爲 mouyu6508-hue,在社區目錄中歸類爲工作流;倉庫 mouyu6508-hue/dsh-fusion 當前版本爲 0.1.0,許可證 MIT。

這是什麼

dsh-fusion 是 DSH 的 bundle 插件:在組合多個 market 插件時,檢測跨層重複的 loader 條目、同 id 命名不一致、以及被後層靜默改寫的 config,並可選生成可安全落地的 cordis.fusion.yml。它不改動正在運行的 loader 圖,也不動 system prompt。

核心功能

衝突與覆蓋類型

插件會區分若干報告種類(severity 與含義以 README 爲準):

Kind Severity 含義
duplicate-name conflict 同一 loader 在 2 行及以上掛載,模塊運行兩次
name-mismatch conflict 同一 id 被兩層賦予不同 name
disabled-conflict conflict 一層 enable、另一層 disable
unknown-target conflict patch 指向無人插入的 id,行被靜默丟棄
config-override override 配置鍵被後層覆蓋
repeat-row notice 同 id + 同 name 寫兩次(市場存設置的常見方式)
dynamic-config notice 配置含 !!js 表達式,無法靜態合併

CLI(DSH 無法啓動時仍可用)

獨立命令 dsh-fusion 只讀 profile 與 patch 文件(及可選的運行時 loader),便於在 host 起不來時先排查:

dsh-fusion scan                        # 當前 profile 裏誰在衝突?
dsh-fusion scan --profile web --json   # 機器可讀輸出
dsh-fusion fuse                        # 打印融合後的 patch
dsh-fusion fuse --fix --write          # 去重策略 + 寫入 cordis.fusion.yml

內置示例 profile examples/conflict-profile 的典型輸出包括:1 個 conflict(同一 loader 掛載兩次)、2 個 silent override。fuse --fix 可對重複項生成例如 disabled: true 的 patch;--prefer <id> 指定保留哪一份(默認保留先掛載的,即更底層)。

工具 fusion_report

安裝插件後會註冊一個工具,參數如下:

參數 含義
profile 要檢查的 profile 名(默認 desktop)
dir 用目錄代替 profile 名
write 是否寫入 cordis.fusion.yml(默認僅報告)

數據來源有兩路:Static 讀層疊 patch,host 未運行也能用;Runtime 向 ctx.loader 查詢實際掛載項。部分重複只在運行時出現(patch 文件乾淨,但在 apply() 裏又掛了一份),僅靠靜態掃描找不到。若 host 未暴露 loader,會降級爲僅靜態分析,而不是直接失敗。

明確不做的事

  • 不修改運行中的插件圖(只讀 loader,不 enable/disable)。
  • 不刪除 patch 行;融合結果只釘住最終值,重複項是否去掉由你決定(--fix 可寫 disabled: true)。
  • 不執行 !!js;無法靜態合併的行會跳過並在輸出中說明。

安裝與啓用

當前分發方式爲 GitHub。在命令行安裝到 web profile:

dsh plugin --profile web add github:mouyu6508-hue/dsh-fusion

桌面客戶端可在 Settings → Plugins 粘貼倉庫 URL。README 註明:若日後上架 npm,命令可能變爲 dsh plugin --profile web add dsh-fusion。

環境要求:Node.js 18+;需要支持 bundle 插件(dsh.bundle.patch)的 DSH host;Linux、macOS、Windows 均可。peer 依賴含 @deepseek-ai/cordis(>=4.0.0)、@deepseek-ai/dsh-tools(>=0.1.0),在 package.json 中標記爲 optional。

典型用法

  1. profile 啓動異常或懷疑 install-shadow 時,先執行 dsh-fusion scan --profile <name> 看 conflict 與 override 列表。
  2. 需要可提交的修復草案時,執行 dsh-fusion fuse --fix --write,檢查生成的 cordis.fusion.yml 再合併進自己的 patch 流程。
  3. DSH 已能運行時,通過 Agent 調用 fusion_report,必要時設 write: true 落盤;與 CLI 對照 static / runtime 差異。

開發自測(來自倉庫 README):

node --test
node bin/fusion.js scan --dir examples/conflict-profile

代碼結構:lib/core.js(解析、檢測、深合併、輸出)、lib/profile.js(按真實順序讀 profile 層)、lib/runtime.js(讀已掛載 loader)、lib/index.js(註冊 fusion_report)。

適用場景與注意

適合:多 bundle、多 market 插件的 profile 維護者,在 boot 失敗或行爲詭異時做只讀診斷,並生成融合 patch 草案。

注意:

  • 插件以當前 DSH 進程權限運行;安裝前請自行查看 源碼 與 MIT 許可證。
  • 社區插件目錄 SkillHub 上的 dsh-fusion 頁 爲獨立站點,與 DeepSeek / 幻方無官方從屬關係;星標等元數據以各站點當時展示爲準(GitHub 上當前爲 0 star)。

DSH 生態強調「一切皆插件」;dsh-fusion 補的是組合層可觀測性——把重複掛載和靜默覆蓋擺到明處,再給出可 boot-safe 的 patch,而不是在運行中硬改插件圖。

  • 目錄頁:https://www.skillhub.cn/plugins/mouyu6508-hue/dsh-fusion
  • GitHub:https://github.com/mouyu6508-hue/dsh-fusion
羽毛球分组比赛记分
小程序二维码

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

小夜