前言¶
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。
核心功能¶
插件提供了從導出到運行的全流程管理能力:
- 導出與安裝:支持將 profile 打包爲
.dspack文件,或從源倉庫導出。安裝支持本地文件、URL 和市場包,並在安裝前進行sha256和大小校驗。 - 多 Profile 切換:利用 Windows Junction(硬鏈接)技術實現換指切換。切換激活 Profile 時,系統自動重定向
profiles/desktop指針,無需重新安裝。 - 隔離管理:Home 級別的
skills和.agent-presets會隨 Profile 切換進行獨立換指隔離,確保不同環境間互不干擾。 - 市場與配置:內置市場瀏覽功能(支持索引懶加載),並提供工作區配置文件
.dshpkcfg用於保存 Profile 的元數據設置。 - 任務中心:導出、安裝等操作採用非阻塞模式執行,通過任務中心視圖展示進度條和時間線。
- 下載代理:在 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/,安裝時優先讀取本地文件。
注意事項¶
- 運行權限:插件以當前 DSH 進程權限運行,安裝前應檢查源碼與許可證。
- 依賴檢測:安裝前會對包內
vendor字段進行 sha256 預驗,確保包完整性。 - 進程管理:首次遷移或切換到真實
desktop目錄前,桌面進程必須關閉,否則可能導致文件鎖定錯誤。
結語¶
該插件爲 DSH 桌面端提供了標準化的整合包管理方案。它通過 RPC 通道與官方運行時服務交互,在不修改官方代碼的前提下實現了 Profile 管理、市場瀏覽和任務中心功能。適合需要頻繁在多個開發環境或配置之間切換的用戶。