前言¶
DSH(DeepSeek Harness)的核心理念是“一切皆插件”。隨着插件數量的增加,手動管理依賴、配置熱重載以及處理版本同步會變得繁瑣。dsh-package-manager 是一個針對 DSH 的包管理中間件,它封裝了原有的 add 模式,支持預設和插件。它通過官方的 watchUserPatches 機制,實現了插件的聲明式安裝與熱裝卸,無需重啓進程。
工作原理¶
本插件只保留一條安裝管線:將 dsh-bundle 插件安裝爲 profile 依賴,並將該插件聲明的 dsh.bundle.patch 寫入 profile 自己的 cordis.patch.yml。
熱掛載、熱卸載、禁用/啓用不再直接操作 Loader API,而是完全交給宿主啓動時掛載好的 watchUserPatches。DSH 在啓動時將補丁層合成爲一棵 Loader 樹,本插件通過在 cordis.patch.yml 中寫入帶標記的託管塊,利用行級 diff 實現更新:
- 寫塊 = 熱掛載
- 刪塊 = 熱卸載
- 重寫爲“原補丁行 + { disabled: true }” = 熱禁用/啓用
這種方式避免了重複組合同一批行,且插件無需重啓即可生效。
核心功能¶
- dsh-bundle 單管線熱裝卸:利用官方熱重載路徑,無需重啓。
- 開關即禁用行:禁用操作保留依賴記錄,僅在託管塊尾部增刪補丁行。
- 檢查更新:對 git 源插件執行
git ls-remote,有更新時自動同步 mirror 並熱更新。 - Custom Adapter 支持:無 bundle 插件仍可聲明式 YAML adapter 執行任意安裝/卸載步驟。
- requirements 復原與同步:通過
deps.yaml做最小差集管理install / keep / update / uninstall / disable / enable。 - 本地運行插件發現:監聽 Cordis
internal/plugin並遍歷已存在 fiber,自動展示本地插件。 - CLI + Web + API:提供統一的
dpmCLI、Web 設置頁接口與程序化 API。 - 裝前校驗:拒絕
workspace:依賴、非 ESM、缺dsh.bundle.patch或未構建入口的包。 - doctor:清理 ledger stale 記錄、託管塊殘留與 profile pnpm 樹。
安裝與啓用¶
前提:已有 DSH profile(例如 <home>/profiles/web),且尚未安裝本包。
- 在 profile 目錄下安裝依賴:
cd <home>/profiles/web
pnpm add github:space-spacee-clamation/dsh-package-manager
pnpm install
- 編輯
<home>/profiles/web/package.json,添加依賴(不要添加到dsh.profile.bundles):
{
"dependencies": {
"@dsh-ext/dsh-package-manager": "github:space-spacee-clamation/dsh-package-manager"
}
}
- 將包管理器自己遷入 profile 的
cordis.patch.yml託管塊:
dpm self-managed --repo /path/to/dsh-package-manager --profile web
重啓 DSH 後,包管理器由用戶層託管塊掛載。之後通過 watchUserPatches 即可熱更新。
若未發佈到 profile,也可以直接執行 node bin/dpm.mjs ... 使用 CLI。
典型用法¶
# 查看狀態
dpm state
# 安裝插件(dry-run)
dpm install --profile web --source github:owner/repo --adapter auto --dry-run
# 安裝並允許構建
dpm install --profile web --source github:owner/repo --allow-build
# 卸載
dpm uninstall --profile web --id repo
# 檢查更新
dpm check-update --profile web --id repo
# 禁用/啓用
dpm disable --profile web --id repo
dpm enable --profile web --id repo
# 還原 requirements
dpm restore --file ./requirements/deps.yaml
# 同步 profile
dpm sync --repo . --modes web,headless
# 運行診斷
dpm doctor
適用場景與注意¶
本插件適合需要批量管理 DSH 插件依賴和熱重載的 DSH 用戶。由於插件以當前 DSH 進程的權限運行,安裝前應仔細檢查源碼與許可證。
當前內容仍在迭代中。
結尾¶
dsh-package-manager 通過統一管線和託管塊機制,簡化了 DSH 插件的安裝與熱更新流程。通過 CLI、Web 和 API 的結合,它爲插件管理提供了從命令行到可視化界面的完整工具鏈。