前言¶
DSH(DeepSeek Harness)的插件機制不算複雜,難的是裝多了之後的事。插件到幾十個以後,問題不再是「哪個插件叫什麼」,而是「我現在到底開着什麼」。官方插件頁給的是一張平鋪的已安裝清單,啓用和停用的都在裏面,只能靠記憶區分:裝的時候順手打開,用的時候忘了關,是常見狀態。
下面介紹的 dsh-plugin-packs 解決的就是這個視角問題。它由 mmmmlp-cloud 維護,MIT 協議,當前版本 0.1.0,在社區目錄中歸爲「工作流」分類。它把已安裝數據重排成 Minecraft 資源包式的左右兩欄(左欄正在用、右欄裝了沒啓用),再疊一層可手工編輯的標籤。倉庫還比較新,公開星標數爲 0,適合願意先試用再反饋的用戶。
這是什麼¶
一句話定位:一個 DSH 插件包管理器,用兩欄視圖回答「這個包現在開沒開」,用標籤回答「它算哪一類」。
它不是卸載工具,也不是插件分組工具。區別在於視角:分組類插件回答「它屬於哪一類」,組織方式是用戶自定義層級;本插件回答「它現在在不在跑」,左欄是當前 profile 的 bundle 選擇,右欄是閒置的包。兩者可以同時安裝,彼此不寫同一份數據。
核心功能¶
裝好後,插件在左側欄「插件」頁面頂部新增「插件包」標籤頁,能力如下:
- 兩欄視圖:左欄「已啓用 · 一起用」,右欄「未啓用」。卡片爲正方形,每欄一行兩個。
- 搬包:點卡片右上
→/←箭頭,或直接拖到對面一欄,即完成啓用/停用。 - 批量操作:勾選多張卡片後,頂部浮出「批量啓用 / 批量停用」。
- 標籤:卡片可掛自定義標籤;頂部標籤欄點一下即篩選,再點取消;「未標記」撈出還沒歸類的包。
- 搜索:匹配中文名、包名、描述、版本和標籤。
- 範圍篩選:默認只顯示用戶自己安裝的包;可選官方可選包、全部;勾「顯示系統核心」才露出只讀區。
- 詳情展開:展開可看完整描述、來源、包內插件行及運行狀態,並改中文名、勾標籤。
- 切換反饋:每次切換後提示區分四種結局:
已生效/需重啓 DSH/被更高優先級覆蓋/失敗:<code>,前兩種支持撤銷。 - 會話記憶:訪問過一次「插件包」頁後,本次會話內切走再回來,仍停在該頁。
安裝與啓用¶
安裝通過 DSH 官方 CLI 完成,指定 --profile web(瀏覽器 half 需要掛在 web profile 上):
# 官方 CLI:走 pnpm 安裝並選中 bundle
dsh plugin --profile web add github:mmmmlp-cloud/dsh-plugin-packs
裝完重啓一次 dsh web(宿主 half 要掛路由),再按 Ctrl+F5 強刷頁面,入口在左側欄「插件」→ 頂部「插件包」。
注意 DSH 有兩個都叫「插件」的入口:左側欄是插件總頁面,「設置 → 插件」是另一個面。本插件掛在前者,排錯先確認這一點。
數據存在哪裏¶
標籤和中文名不寫在瀏覽器 localStorage,而是寫在一個普通 JSON 文件裏,隨 DSH_HOME 走:
<$DSH_HOME>/plugin-packs/packs.json
# 默認路徑爲 C:\Users\<用戶名>\.dsh\plugin-packs\packs.json
文件格式:
{
"version": 1,
"tags": [{ "id": "novel", "label": "小說 · 閱讀", "color": "#7B68EE" }],
"packs": {
"dsh-novel-writer": { "name": "小說寫作助手", "tags": ["novel"] }
}
}
要點:
packs的鍵是包名而不是 entry id,重裝、升級、換目錄 id 都不丟標籤。- 文件不存在時生成空表,附帶 7 個通用分類標籤(小說·閱讀 / 聯網搜索 / 界面美化 / 安全·滲透 / 模型渠道 / 記憶·知識 / 工具·其它)。出廠不預填任何包和歸屬,哪個包打哪個標籤由用戶決定。
- 可以直接手改,刷新即生效;格式寫錯不會靜默丟數據,壞文件先改名留底(
packs.json.broken-<時間戳>)再重建。 - 寫入是原子寫(臨時文件 + rename)且串行化,連續點擊標籤不會互相吞更新。
- 只涉及插件包,不碰會話、提示詞或憑據;換機器不隨賬號同步,要手工拷貝。
它改的是哪一層¶
「啓用/停用」調用內核的 pluginManager.setBundleEnabled,把包加入或移出 profile 的 bundle 選擇層,改的是真實插件狀態,不是頁面顯示:依賴仍留在 node_modules,隨時可以移回,不是卸載;由上層配置接管(只讀)的包會明確標出,不會假裝可切。
包內單個 loader 行的開關不在本插件職責內,本頁包內行列表是隻讀展示;需要行級管理要配專門的行級工具。
範圍上有保護:勾「顯示系統核心」才露出 dsh-base / dsh-web-app 以及 acp、headless、sdk-app、sdk-minimal 這幾種別的運行模式的包,一律不可切,避免誤觸改壞桌面檔。未安裝(availability === "missing")的包不顯示。
架構與接口¶
包分宿主 half 和瀏覽器 half,零運行時依賴、無構建步驟。瀏覽器端數據走宿主 half 的同源路由,可用 curl 單獨驗證:
| 方法 | 路徑 | 說明 |
|---|---|---|
| GET | /plugin-packs/api/health |
自檢:build 標記、路由、數據文件路徑 |
| GET | /plugin-packs/api/bundles |
包清單與行狀態 |
| POST | /plugin-packs/api/bundles/enabled |
整包啓停,body { name, enabled },需 x-plugin-packs: 1 頭 |
| GET/PUT | /plugin-packs/api/state |
讀 / 整份替換寫入標籤文檔,PUT 需 x-plugin-packs: 1 頭 |
這樣做是因爲瀏覽器直接調 ctx.remote.pluginManager 要接客戶端遠程裝配順序,容易在啓動競態裏靜默失敗;走宿主路由不受影響。寫操作帶自定義請求頭且路由不答預檢,別的本地頁面無法借道改插件狀態。
排錯先看自檢接口:
curl 127.0.0.1:<端口>/plugin-packs/api/health
build 字段存在即路由正常;頁面報 HTTP 404 / 響應不是 JSON 時,通常是改了宿主代碼未重新應用 bundle 行,重新開關一次即可,不必重啓 DSH。
適用場景與注意¶
適合插件數量在幾十個量級、習慣按用途分類管理包、願意把分類放進可手改文件的用戶。標籤跟着 DSH_HOME 走,換瀏覽器或清站點數據都不會丟。
留意幾點:
- 插件以當前 dsh 進程權限運行,能讀寫該 profile 能訪問的所有插件包,安裝前建議先讀源碼與許可證(MIT)。
- 它只管到包這一層,包內行級開關需另找行級工具。
- 官方「已安裝」標籤本身無法替換,本插件以並列標籤提供另一種視角,兩者共存。
- 個別包(尤其宿主側插件)切換後需重啓
dsh web才完全生效,頁面會明確提示。
結尾¶
dsh-plugin-packs 做的事情很小:把已有的插件清單重排成日常語言——兩欄、標籤、搜索、批量。沒引入新的安裝方式,也沒改內核語義,只是把「我現在在跑什麼」從記憶問題變成可見事實。如果這正是痛點,可以從社區目錄頁開始試用:
- 目錄頁:https://www.skillhub.cn/plugins/mmmmlp-cloud/dsh-plugin-packs
- GitHub:https://github.com/mmmmlp-cloud/dsh-plugin-packs