用 dsh-super-injector 在 DeepSeek Harness 運行時注入本地插件

前言

DeepSeek Harness(dsh)的設計口號是「一切皆插件」:模型、工具、會話、沙箱和界面都可以換成插件,由 Cordis 負責掛載和依賴。官方裝配走的是配置:profile 的 cordis.patch.yml、bundle 列表、repository 插件。改一次本地插件包,通常要重啓 web 進程,bundle 纔會重新接管。

對插件開發者來說,這條路徑偏「生產態」。調試一個帶 host 工具和 client UI 的完整包時,反覆重啓成本很高;熱重載失敗後如果殘留路由、幽靈 entry 或半截緩存,排查也不輕鬆。社區插件 dsh-super-injector 做的就是這塊運行時管理面:先按官方路徑把注入器裝進去,之後把本地插件包注入正在運行的 web,不改 patch / package.json / bundles 列表,也不殺進程。

本文按社區目錄頁、GitHub README / INSTALL.md / docs/SPEC.mdpackage.json 與 v0.3.3 Release 交叉覈對後整理。該目錄是獨立站點,與 DeepSeek / 幻方沒有官方從屬關係,不要把它當成官方應用商店。

這是什麼

dsh-super-injector 是一款面向 DeepSeek Harness 的運行時模組注入器,由 GitHub 用戶 yjh051108 維護,社區目錄歸在「工具與能力」。倉庫地址是 https://github.com/yjh051108/dsh-super-injector。截至 2026-08-17,GitHub API 顯示該倉庫 87 星標;目錄頁當時快照爲 34 星,以倉庫頁面爲準。

package.json 中的包名是 @dsh-external/dsh-super-injector,當前版本 0.3.3,主要語言 TypeScript,dsh.client.platform 聲明爲 web。許可證在 package.json 裏寫的是 BSD-3-Clause;倉庫根目錄沒有獨立的 LICENSE 文件,安裝前應自行覈對源碼與聲明是否一致。

它解決的問題可以收成一句:把「已經構建好的標準插件包」(package.json + lib/)在運行中的 web profile 裏注入、熱重載、側掛測試、卸載,並在失敗時回滾。倉庫 README 把它比作遊戲圈的 BepInEx 式入口——官方裝配機制只裝一次引導器,之後其他模組走運行時注入。

v0.3.0(2026-08-14)起,作者按倉庫 docs/SPEC.md 重構了自重載。該規範寫明依據是 DSH 0.1.0-rc.6 裏 loader / include / cordis 的源碼語義:工具只負責排程,reboot 走官方 REPLACE 結構(entry._dispose,loader 的 _disposing 豁免),失敗自動 rollback。CHANGELOG 記載 v0.2.6 起在 0.1.0-rc.6 上「一行未改直接運行」;這是維護者的兼容性聲明,不是 DeepSeek 官方認證。

核心功能

運行時注入,而不是第二套安裝庫

注入器自己必須先走官方裝配。裝上之後,對本地插件目錄調用 dev_inject_plugin:把插件包 junction 到 ~/.dsh/profiles/web/node_modules,再 ctx.loader.create({ name, config })。README 強調注入清單只是運行時恢復緩存,落在 ~/.dsh/super-injector/registry.json,web 重啓後自動歸位;生產態則用 dev_install_package 寫入 profile bundles,重啓後仍由官方列表接管。

注入後 host 工具和 client UI 都要可用。實現上會清掉 loader 幽靈 entry 隔離(normalizeEntry),並補掃 / 聯動 / 卸載 client 模塊表。每次注入、重載、安裝會返回 host ✓ / client ✓ 雙驗證。

熱重載、自重載與自動 watch

dev_reload_package 做整包重載:清緩存 → 重新 import → 重建 fiber。失敗則回滾,保留舊代。注入器自身也支持自重載。v0.3.0 之後這條路徑對齊官方 entry.update 的 REPLACE 分支,而不是手寫「自殺再重建」。

插件目錄被注入後會自動 watch:改代碼並 build 完成後,README 寫的是大約 1.5 秒自動重載。watch 前會做 import 預檢,損壞的 lib 會拒絕重載,避免半成品把進程打掛。SPEC 把原則寫成:恢復用 touch patch(include.refresh,只對無 fiber 的 entry 生效),更新用自重載,永不殺進程

開發側掛區

測試中的工具可以先掛「後側」,不進入 tools schema,避免開發期工具集合波動打穿前綴緩存。對應工具是 dev_stage_add / dev_stage_call / dev_stage_list / dev_stage_promote / dev_stage_demote。轉正只刷新一次緩存;staging 會落盤,自重載或重啓後已轉正的工具可以恢復。

卸載、路由自愈與狀態查詢

dev_uninject_plugin 走 fiber dispose,清理工具、監聽、路由和 client 表,再清注入清單、刪 junction,不需要重啓。bundle 插件卸載時還會寫 disabled,避免 include.refresh 把插件加回來。

熱重載若留下孤兒路由,可用 dev_clear_routes 按 path 前綴清 webserver 內部路由表。dev_injected_list 列出注入清單;dev_plugin_status 給出已裝配插件、fiber 狀態和操作成功率。

插件生產線

README 還提供骨架 / 構建 / 發佈三個工具:dev_scaffold_plugin(toolkit / daemon-loop / ui-panel / hybrid)、dev_build_plugindev_release_plugin。這是給「自己寫完整插件包」用的,和 dsh-evolve 那種在對話里長出單文件 .mjs 的創造模式不同。維護者把兩者寫成互補:evolve 的源碼可以升級成完整包,再交給注入器熱掛。

安裝與啓用

社區目錄頁給出的安裝命令是:

dsh plugin add github:yjh051108/dsh-super-injector

該插件聲明平臺爲 web。倉庫 README 和 INSTALL.md 都寫成顯式指定 profile:

dsh plugin --profile web add github:yjh051108/dsh-super-injector

目錄頁提醒:如需可復現安裝,應固定 commit 哈希。當前最新 Release 是 v0.3.3(2026-08-15),對應 commit 51dcda74a784cf113e850899b43a1a22e3799e91

dsh plugin add github:yjh051108/dsh-super-injector#51dcda74a784cf113e850899b43a1a22e3799e91

INSTALL.md 更推薦方式 A:從 Releases 下載 dsh-external-dsh-super-injector-<版本>.tgz(v0.3.3 的資產名是 dsh-external-dsh-super-injector-0.3.3.tgz),解壓後:

mkdir -p ~/dsh-super-injector && tar -xzf dsh-external-dsh-super-injector-0.3.3.tgz -C ~/dsh-super-injector --strip-components=1
dsh plugin --profile web add ~/dsh-super-injector

官方 bundle 裝配在啓動時完成,需要重啓 web 進程。重啓後對 agent 說 dev_plugin_status,看到 dsh-super-injector 且狀態爲 active,再跑 dev_self_test。INSTALL.md 寫自檢共 8 項,期望全部 PASS。

v0.3.3 Release 說明把運行時依賴打進 lib/index.js,用來避免官方裝配時出現 Cannot find package '@deepseek-ai/dsh-tools'。git 源碼安裝仍需要本機構建環境(bash、node、npm,以及 DSH checkout 或 DSH_CHECKOUT)。Windows 上 INSTALL.md 要求用 Git Bash 或 WSL 跑 bash 語法;v0.3.3 還會拒絕 PATH 裏搶先命中的 System32\bash.exe,優先 Git Bash。

插件以當前 dsh 進程的權限運行,安裝時可能執行代碼。安裝前請檢查源代碼倉庫和許可證。

典型用法示例

以下命令與對話指令均來自倉庫 README / INSTALL.md,參數裏的路徑換成本機絕對路徑。

1. 確認注入器已掛上

dev_plugin_status
dev_self_test

2. 注入一個已經構建好的本地插件包

拿到含 package.jsonlib/ 的目錄後,對 AI 說:

dev_inject_plugin {"dir": "D:/dev/my-plugin"}

README 寫注入當場生效,下一 step 就能看到 host 工具;若插件聲明瞭 client,UI 也會補掃。

3. 開發迭代

改代碼 → build。watch 約 1.5 秒自動重載;也可以手動:

dev_reload_package

穩定後用 dev_stage_promote 把側掛工具轉到正式 schema。

4. 從骨架走到注入

dev_scaffold_plugin {"dir": "D:/dev/my-plugin", "name": "my-plugin", "form": "daemon-loop", "description": "..."}
dev_build_plugin {"dir": "D:/dev/my-plugin"}
dev_inject_plugin {"dir": "D:/dev/my-plugin"}

form 還可取 toolkitui-panelhybrid

5. 卸載

dev_uninject_plugin

參數是包名子串。卸載後工具 / 監聽 / 路由 / client 表應被清掉,無需重啓。

適用場景與注意事項

適合這幾類人:在本地開發完整 DSH 插件包、需要免重啓驗證 host+UI、要把成品模組熱掛進正在跑的 web profile。不適合只想改官方配置、或只需要對話里長出單文件小工具的場景——後者應對 dsh-evolve

使用前注意下面幾條,均能在 README、INSTALL.md 或 SPEC 裏對上:

  1. 權限與來源。插件與當前 dsh 進程同權,能讀寫 profile、寫 patch、動 node_modules junction。社區目錄不是官方商店,安裝前自己看源碼和許可證。
  2. profile 必須對上。工具掛在 web profile。--profile web 與正在運行的 profile 不一致時,dev_* 工具不會出現。
  3. 包名文檔有滯後package.json 與倉庫內 cordis.patch.yml 使用 @dsh-external/dsh-super-injector;INSTALL.md 部分示例仍寫 @yjh051108/dsh-super-injector。裝配、卸載、junction 路徑以 package.jsonname 爲準。
  4. 資源必須掛 ctx.effect。熱重載或卸載時靠 fiber dispose 清理。裸註冊會留下殭屍工具 / 路由,重載時可能報 duplicate / already registered
  5. 插件包要自帶依賴解析lib/import '@deepseek-ai/dsh-tools' 從包自身 node_modules 走;client UI 需要單獨 npm run build:client,產物是 lib/client.js。client 操作必須用完整包名,短名會靜默失敗。
  6. cordis.patch.yml 只能有一個頂層值。要麼 [],要麼 - id: / - insert: 列表,兩者混存會 YAML 解析失敗,裝配全滅。同 id 重複條目會觸發 duplicate loader entry id,dsh 起不來。v0.3.3 起 writePatch 按 id 冪等去重;已崩潰時可用解壓目錄裏的 node scripts/fix-patch.mjs(不依賴 dsh 已啓動)。
  7. peerDependencies 是範圍聲明@deepseek-ai/dsh-tools: >=0.0.1-rc <2cordis: >=4.0.0-rc <5。維護者聲稱適配了服務改名 webServer(原 httpServer)、compaction(原 compact)。DSH 仍處於 developer preview,核心 API 還會變,升級後應再跑 dev_self_test
  8. README 裏的評測分數、壓力測試「零崩潰」和自檢 8/8,都是維護者在倉庫中的自述,不是第三方復現報告。

小結

dsh-super-injector 補的是官方 bundle 裝配之下的運行時層:注入、熱重載、側掛轉正、卸載、路由自愈。v0.3.0 把自重載收束到 DSH 0.1.0-rc.6 的 REPLACE 契約,v0.3.3 補了 Windows/macOS 裝配和宿主自包含打包。先按官方路徑裝引導器,再對本地插件包說 dev_inject_plugin,是它的主路徑。

目錄頁:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-super-injector/
GitHub:https://github.com/yjh051108/dsh-super-injector
Release:https://github.com/yjh051108/dsh-super-injector/releases

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

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

小夜