用 dsh-plugin-installer 給 DeepSeek Harness 加上內置插件市場

前言

DeepSeek Harness(dsh)把運行時拆成可疊加的插件層:工具、會話、沙箱、UI 都可以做成 bundle,裝進某個 Profile,下次啓動再按層合成。官方倉庫把這件事概括成「一切皆插件」。對使用者來說,改能力往往不是去改 Harness 源碼,而是選、換、裝一層配置。

真正動手時,發現和安裝社區插件仍然比較散。官方建議給倉庫加上 GitHub Topic dsh-plugin 方便檢索;安裝則走 dsh plugin add,由 CLI 在 Profile 目錄裏轉發給 pnpm。命令本身不復雜,麻煩在後面幾步:這個倉庫是不是聲明瞭 dsh.bundle.patch、該不該固定到某個 commit、有沒有現成的 Release 安裝包、裝完要不要重啓、以及裝到哪個 Web Profile。社區裏已經有獨立的插件目錄站,也有人做了命令行市場;它們能減輕檢索成本,但多數還是要把人帶回終端。

Toukaiteio 維護的 dsh-plugin-installer 走的是另一條路:在官方 Web UI 的「設置 → 插件」裏增加「插件市場」標籤頁,把發現、校驗、安裝、更新和 Profile 切換留在同一個界面裏。下面按社區目錄頁、GitHub README / package.json 以及 DeepSeek Harness 官方文檔覈對後的內容,說明它是什麼、能做什麼、怎麼裝、怎麼用。

這是什麼

dsh-plugin-installer 是一款面向 DeepSeek Harness 的界面增強插件,由 Toukaiteio 維護,許可證爲 MIT,主要語言是 JavaScript。社區目錄頁的定位是「市場插件:快速把 DeepSeek Harness 接入 GitHub 插件生態」;倉庫 README 寫得更具體:它是內置於 Web UI 的插件市場,同時也是 Web Profile 切換工具。

它解決的不是「再寫一個插件」,而是這幾件日常操作:

  • 從 GitHub 的 dsh-plugindsh Topic 瀏覽候選倉庫
  • 安裝前確認倉庫根目錄 package.json 聲明瞭 dsh.bundle.patch
  • 優先用 GitHub Release 裏已經構建好的 .tgz,並在有摘要時做 SHA-256 校驗
  • 把插件裝進選定的 Profile,並在頁面裏更新或刪除
  • 打開、創建其他 Web Profile,不必離開當前界面

截至本文寫作時(2026-08-18),社區目錄頁與 GitHub 倉庫均顯示 6 顆星。最新穩定版是 v0.2.0(2026-08-16 發佈),package.json 中的版本號與之一致。需要說明的是:社區插件目錄是獨立站點,和 DeepSeek / 幻方沒有官方從屬關係,不能把它理解成官方應用商店;這個安裝器本身也是社區插件,不是 Harness 內置功能。

核心功能

從 GitHub Topic 發現,而不是維護私有索引

插件市場在線檢索 GitHub 上帶 dsh-plugindsh Topic 的倉庫,並自動排除 DeepSeek Harness 本體倉庫,避免把宿主程序當成插件列出來。列表支持兩種 GitHub 官方支持的倉庫排序:按更新時間和按星標數。接近列表底部時會預取下一頁,形成無限滾動。

README 把 Topic 的含義寫得很明確:它只是發現信號,不代表安全審覈,也不代表官方背書。倉庫出現在列表裏,只說明它打了相應標籤,不說明代碼已經被審查過。

爲了降低 GitHub API 壓力,搜索結果會按「搜索詞 + 排序方式 + 頁碼」在服務端和客戶端各緩存十二分鐘。匿名額度用盡時,可以在同一標籤頁的「GitHub 請求設置」裏粘貼 Token;無人值守場景也可以用服務端環境變量 GITHUB_TOKEN 作爲後備。

安裝前先確認這是 DSH bundle

用戶點擊安裝後,host 端按 README 記載的順序處理:

  1. 讀取倉庫元數據和最新 GitHub Release
  2. 讀取根目錄 package.json
  3. 要求存在有效的 dsh.bundle.patch 聲明
  4. 優先使用 Release 中與版本匹配的 <包名>-<版本>.tgz;GitHub 提供摘要時校驗內容,並把歸檔保存在 DSH_HOME/plugin-archives/ 後再安裝
  5. 沒有合適 Release 時,僅在確認該提交裏確實存在包所聲明的 JavaScript 入口後,才允許固定 commit 的源碼安裝

這和 DeepSeek Harness 官方發佈文檔是對齊的:沒有 dsh.bundle 聲明的包可以當成普通依賴裝上,但不會成爲 Profile 的一層;從 Git 安裝拿到的是源碼而不是構建產物,TypeScript 包如果沒提交 lib/,加載會失敗。這個安裝器選擇「有 Release 就裝構建包;源碼回退必須能看到入口文件」,並且源碼路徑如果還需要跑 prepare,必須針對該插件再確認一次。既沒有可用 Release、也沒有可驗證入口時,市場會拒絕安裝並說明原因。

裝完之後可以更新、刪除,也可以先管自己

「已安裝插件」區域對應當前選定的 Profile。頁面打開時,會優先把市場安裝的插件和倉庫最新 Release 比較;沒有 Release 時再比較源碼提交。頁面上的狀態包括:

  • 有可用更新:下載並安裝經過驗證的最新 Release 安裝包
  • 已是最新:已安裝包版本與最新 Release 版本一致
  • 暫無法檢查更新:Release 和源碼狀態都覈對不上時的保守提示,不會在比較失敗時聲稱「有更新」
  • 刪除:確認後再調用 DSH 自己的 plugin remove,讓 Profile 的 bundle 清單和實際包狀態一致

v0.2.0 起,打開插件市場時還會檢查安裝器自身有沒有新的穩定 Release。一鍵更新只作用於當前 Profile,重啓後生效;重啓前舊構建繼續提供服務,其他 Profile 不受影響。

文案和倉庫日期格式會跟隨 DSH「設置 → 通用設置 → 語言」。安裝到當前 Web Profile 後,頁面會提示重啓,並提供「立即重啓 DSH」:先拉起新進程,確認新地址可用再跳轉,然後關掉舊進程。

在同一頁切換 Web Profile

除了裝插件,這個界面還提供 Profile 相關操作:

  • 打開 Profile:在新的本地端口啓動所選 Web Profile,再跳轉到新地址;當前進程暫時保留,切換失敗時不丟掉當前會話
  • 創建並打開:初始化一個包含官方 Web bundle 和本插件的新 Profile,然後打開

README 同時記錄了一個上游限制:當前 DSH 預覽版裏,npm 包 @deepseek-ai/dsh-web-app 可能依賴倉庫中不存在的 @deepseek-ai/dsh-frontend。遇到這種情況時,創建全新 Web Profile 會被上游包阻斷,已經能正常運行的 Web Profile 不受影響。這是 Harness 預覽版的打包問題,不是安裝器自己能繞開的。

安裝與啓用

環境要求以倉庫 README 和 package.json 爲準:

  • Node.js >=22.19.0
  • pnpm >=10
  • DeepSeek Harness 0.1.0-rc.6 或兼容版本
  • 一個已經能打開的 DSH Web Profile(應用內界面掛在 Web UI 上)

社區目錄頁給出的安裝命令如下,在 DeepSeek Harness 終端中運行即可:

dsh plugin add github:Toukaiteio/dsh-plugin-installer

如需可復現安裝,目錄頁建議固定 commit:

dsh plugin add github:Toukaiteio/dsh-plugin-installer#commit

把上面的 commit 換成實際的 40 位哈希。倉庫 README 更明確地要求裝進正在使用的 Web Profile,並從 GitHub 指定提交安裝時倉庫裏必須已經包含構建後的 lib/

dsh plugin --profile web add github:Toukaiteio/dsh-plugin-installer#<commit>
dsh web

如果希望直接用已經構建好的安裝包,可以從 GitHub Releases 下載最新穩定版 .tgz(當前爲 dsh-plugin-installer-0.2.0.tgz),再加入 Web Profile:

dsh plugin --profile web add ./dsh-plugin-installer-0.2.0.tgz
dsh web

Windows 也可以用倉庫提供的 PowerShell 一鍵腳本:下載最新穩定 Release,在 GitHub 提供 SHA-256 摘要時校驗,把歸檔留在 DSH_HOME/plugin-archives/dsh-plugin-installer/,安裝到 web Profile 並啓動 DSH Web:

irm https://raw.githubusercontent.com/Toukaiteio/dsh-plugin-installer/main/scripts/Install-DshPluginInstaller.ps1 | iex

指定其他 Profile、或不自動啓動 Web 時,先下載腳本再傳參數:

$script = "$env:TEMP\Install-DshPluginInstaller.ps1"
Invoke-WebRequest https://raw.githubusercontent.com/Toukaiteio/dsh-plugin-installer/main/scripts/Install-DshPluginInstaller.ps1 -OutFile $script
& $script -Profile work -NoStart

macOS 和 Linux 對應的是 Bash 腳本,流程與 Windows 相同,額外需要 bashcurl 和 Node.js:

curl --fail --location --remote-name https://raw.githubusercontent.com/Toukaiteio/dsh-plugin-installer/main/scripts/install-dsh-plugin-installer.sh
bash ./install-dsh-plugin-installer.sh

指定 Profile 或只安裝不啓動:

bash ./install-dsh-plugin-installer.sh --profile work --no-start

Web UI 起來之後,打開 設置 → 插件 → 插件市場

典型用法

下面的步驟來自倉庫中的 SKILL.md 和中文 README,可以按界面直接做。

  1. 確認當前是一個正在運行的 Web Profile,進入 設置 → 插件 → 插件市場
  2. 在在線列表裏按更新時間或星標瀏覽,或輸入搜索詞過濾。
  3. 選中倉庫後先看審查結果,確認它被識別爲 DSH bundle,再執行安裝。目標 Profile 要在安裝前選好。
  4. 如果審查提示存在 prepare 腳本,說明安裝階段會執行第三方代碼。不要在沒有明確確認的情況下放行構建權限。
  5. 安裝到當前 Web Profile 後,使用 立即重啓 DSH,讓新的 bundle 疊加層生效。
  6. 之後可在「已安裝插件」裏查看更新狀態,需要時更新或刪除。

GitHub 匿名請求被限流時,展開同一標籤頁裏的 GitHub 請求設置,粘貼 Token 並保存。保存後 Token 不會回顯到瀏覽器,插件把它寫到:

$DSH_HOME/config/dsh-plugin-installer.json

未設置 DSH_HOME 時使用 DSH 默認目錄。保存空值會清除本插件存過的 Token。Token 只在服務端讀取,可以來自上述配置,也可以來自環境變量 GITHUB_TOKEN;README 建議只授予訪問公開倉庫元數據所需的最小權限。

在 Windows 上如果還開了 FastGitHub、steamcommunity_302 這類本地 HTTPS 加速或代理,市場可能連不上 GitHub,並提示無法驗證 TLS 證書。倉庫 Issue #1 記錄了這種情況:代理根證書已被 Windows 信任,但 Node.js 默認沒有用系統證書存儲。處理方式是先完全退出 DSH,在同一個 CMD 窗口裏讓 Node.js 使用系統 CA,再啓動:

set "NODE_OPTIONS=%NODE_OPTIONS% --use-system-ca"
dsh web

該選項需要 Node.js 22 或更高版本,加速器根證書仍須安裝並被 Windows 信任。不要用 NODE_TLS_REJECT_UNAUTHORIZED=0 關掉證書校驗。

如果目的是自己發一個能被這個市場發現的插件,倉庫 SKILL.md 給出的最小條件是:根目錄 package.json 聲明 dsh.bundle.patchcordis.patch.yml 插入 host 模塊,host 模塊導出 apply(ctx),並把 dsh-plugin Topic(可選再加 dsh)打到 GitHub 倉庫上。從 Git 安裝的倉庫應提交構建後的 lib/,避免安裝時再跑構建腳本。Skill 描述工作流,Plugin 修改運行時或 UI,兩者不是同一類東西。

適用場景與注意事項

比較適合這些情況:

  • 已經在用 DSH 官方 Web UI,希望在設置頁裏瀏覽、安裝社區插件,而不是每次回到終端抄命令
  • 需要在多個 Web Profile 之間切換,或者偶爾建一個帶官方 Web bundle 的新 Profile
  • 給自己的 DSH 插件打上 dsh-plugin Topic 後,想確認市場側會怎樣發現和校驗它

使用前有幾條邊界需要看清楚。

插件以當前 dsh 進程的權限運行,安裝時可能執行代碼。社區目錄頁和倉庫 README 都要求:安裝前檢查源代碼倉庫和許可證。GitHub Topic 不是安全審查。安裝器能做的是校驗 bundle 形狀、固定 commit、優先使用帶摘要的 Release 包;它不能代替你閱讀第三方源碼,尤其是帶安裝腳本或構建腳本的倉庫。

目錄頁上的 dsh plugin add github:Toukaiteio/dsh-plugin-installer 沒有寫死 Profile。應用內界面依賴 Web Profile,實際使用時按 README 加上 --profile web(或你正在用的 Profile 名),需要可復現安裝時再釘死 commit。DeepSeek Harness 目前仍是開發者預覽,官方 README 寫明會有破壞性變更;本插件聲明兼容 0.1.0-rc.6,升級 Harness 後應再覈對一次。

創建全新 Web Profile 還受上游 @deepseek-ai/dsh-frontend 打包問題影響。已有可用的 Web Profile 時,繼續在現有 Profile 裏裝插件即可,不必爲了「乾淨環境」強行新建。

小結

dsh-plugin-installer 把 GitHub 上的 DSH 插件發現和安裝收進官方 Web UI 的「設置 → 插件」頁:用 Topic 檢索,用 dsh.bundle.patch 過濾,優先裝校驗過的 Release 包,並附帶更新、刪除和 Profile 切換。它降低的是操作路徑,並不改變「插件在當前進程權限下運行」這件事。

目錄頁:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-plugin-installer/

GitHub:https://github.com/Toukaiteio/dsh-plugin-installer

DeepSeek Harness:https://github.com/deepseek-ai/deepseek-harness

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

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

小夜