前言¶
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。
典型用法¶
- profile 啓動異常或懷疑
install-shadow時,先執行dsh-fusion scan --profile <name>看 conflict 與 override 列表。 - 需要可提交的修復草案時,執行
dsh-fusion fuse --fix --write,檢查生成的cordis.fusion.yml再合併進自己的 patch 流程。 - 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