dsh-packforge/dsh-pack-plugin 介紹

前言

DeepSeek Harness (DSH) 的設計理念是“一切皆插件”。在整合包管理方面,官方桌面端主要提供運行時環境,用戶往往需要手動處理 .dspack 文件的導出、安裝以及多環境切換。dsh-packforge/dsh-pack-plugin 作爲一個純方案 B 插件 bundle,旨在填補這一空白。它不依賴官方源碼修改,而是通過獨立 npm 包的形式,將整合包管理能力注入到官方桌面端中。

定位與架構

該插件是一個自包含的獨立 npm 包,通過官方 DSH 的 bundle 機制注入桌面端。它主要包含兩部分:Host 側(Node.js)負責文件操作、依賴重建和系統代理處理,Client 側(瀏覽器 bundle)負責界面交互和任務展示。

  • 零官方源碼改動:不觸碰 apps/desktop 或 apps/desktop-host。
  • 零第三方插件:不依賴除運行時服務外的第三方插件。
  • 自包含:運行時依賴僅 fflate(處理 ZIP)、proxy-agent(下載代理)和 proxy-from-env。

核心功能

插件提供了從導出到運行的全流程管理能力:

  1. 導出與安裝:支持將 profile 打包爲 .dspack 文件,或從源倉庫導出。安裝支持本地文件、URL 和市場包,並在安裝前進行 sha256 和大小校驗。
  2. 多 Profile 切換:利用 Windows Junction(硬鏈接)技術實現換指切換。切換激活 Profile 時,系統自動重定向 profiles/desktop 指針,無需重新安裝。
  3. 隔離管理:Home 級別的 skills 和 .agent-presets 會隨 Profile 切換進行獨立換指隔離,確保不同環境間互不干擾。
  4. 市場與配置:內置市場瀏覽功能(支持索引懶加載),並提供工作區配置文件 .dshpkcfg 用於保存 Profile 的元數據設置。
  5. 任務中心:導出、安裝等操作採用非阻塞模式執行,通過任務中心視圖展示進度條和時間線。
  6. 下載代理:在 About 頁配置代理後,市場索引、包詳情下載及 .dspack 安裝均生效。未配置時依次回退至環境變量(HTTP_PROXY 等)或系統代理。

多 Profile 切換與隔離

切換 Profile 的核心邏輯在 profiles/desktop 指針上。插件通過刪除舊 junction 並創建新的 junction 來實現切換。

  • 紅線原則:刪除 junction 時必須使用 unlink(lstat 語義),絕不能使用 rm -r,否則會遞歸刪除目標目錄內容。
  • 首次遷移:首次將 Profile 切換到真實 desktop 目錄時,必須先退出桌面進程,改名成 default,再進行換指操作。插件使用脫管 helper 完成這一流程。
  • Home 級隔離:skills 和 .agent-presets 位於 Home 根目錄,插件將其也做成 junction 指向各 Profile 的槽位,實現換 Profile 時一併切換。

格式契約與安全規則

插件遵循 pack-structure v3 r2 標準。

  • 安全規則:打包時會自動過濾 node_modules、dist、密鑰、嵌套壓縮包、.dshpkcfg 和 .dsh-pack 等敏感或冗餘文件。
  • 工作區配置:.dshpkcfg 爲 UTF-8 編碼的 JSON 文件,使用 2 空格縮進,僅支持白名單字段(如 name、dshVersion、exportContent 等)。
  • Vendor 檔位:導出時支持 auto(默認)、off(禁用)、full(全部內嵌)三種模式。內嵌模式會將依賴 tarball 放入 vendor-blobs/,安裝時優先讀取本地文件。

注意事項

  1. 運行權限:插件以當前 DSH 進程權限運行,安裝前應檢查源碼與許可證。
  2. 依賴檢測:安裝前會對包內 vendor 字段進行 sha256 預驗,確保包完整性。
  3. 進程管理:首次遷移或切換到真實 desktop 目錄前,桌面進程必須關閉,否則可能導致文件鎖定錯誤。

結語

該插件爲 DSH 桌面端提供了標準化的整合包管理方案。它通過 RPC 通道與官方運行時服務交互,在不修改官方代碼的前提下實現了 Profile 管理、市場瀏覽和任務中心功能。適合需要頻繁在多個開發環境或配置之間切換的用戶。

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

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

小夜