dsh-package-manager:DSH 插件包管理中間件

前言

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 }” = 熱禁用/啓用

這種方式避免了重複組合同一批行,且插件無需重啓即可生效。

核心功能

  1. dsh-bundle 單管線熱裝卸:利用官方熱重載路徑,無需重啓。
  2. 開關即禁用行:禁用操作保留依賴記錄,僅在託管塊尾部增刪補丁行。
  3. 檢查更新:對 git 源插件執行 git ls-remote,有更新時自動同步 mirror 並熱更新。
  4. Custom Adapter 支持:無 bundle 插件仍可聲明式 YAML adapter 執行任意安裝/卸載步驟。
  5. requirements 復原與同步:通過 deps.yaml 做最小差集管理 install / keep / update / uninstall / disable / enable。
  6. 本地運行插件發現:監聽 Cordis internal/plugin 並遍歷已存在 fiber,自動展示本地插件。
  7. CLI + Web + API:提供統一的 dpm CLI、Web 設置頁接口與程序化 API。
  8. 裝前校驗:拒絕 workspace: 依賴、非 ESM、缺 dsh.bundle.patch 或未構建入口的包。
  9. doctor:清理 ledger stale 記錄、託管塊殘留與 profile pnpm 樹。

安裝與啓用

前提:已有 DSH profile(例如 <home>/profiles/web),且尚未安裝本包。

  1. 在 profile 目錄下安裝依賴:
    cd <home>/profiles/web
    pnpm add github:space-spacee-clamation/dsh-package-manager
    pnpm install
  1. 編輯 <home>/profiles/web/package.json,添加依賴(不要添加到 dsh.profile.bundles):
    {
      "dependencies": {
        "@dsh-ext/dsh-package-manager": "github:space-spacee-clamation/dsh-package-manager"
      }
    }
  1. 將包管理器自己遷入 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 的結合,它爲插件管理提供了從命令行到可視化界面的完整工具鏈。

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

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

小夜