dsh-webui-market-plugin:在 Web GUI 內瀏覽與安裝社區插件

前言

DeepSeek Harness(DSH)把能力拆成可組合的插件,但裝插件往往要查社區目錄、複製安裝命令、在終端裏指定 profile,再重啓 web 服務。社區目錄獨立維護在 awesome-dsh-plugin.com,與 DeepSeek / 幻方無官方從屬關係;官網實現可參考 dsh-market

下面介紹由 Sanqi-normal 維護的 @sanqi-normal/dsh-webui-market-plugin:把目錄瀏覽、安裝、更新、卸載放進 DSH web GUI 的 設置 → 插件 → 插件市場,界面跟隨 harness 深淺色主題,並按系統語言切換中英文。

這是什麼

@sanqi-normal/dsh-webui-market-plugin 是 DSH web profile 內的社區插件市場客戶端。它讀取 awesome-dsh-plugin.com 的插件目錄(JSON API plugins.json,含 Star 數與收錄日期),在設置面板裏展示分類、搜索與排序,並通過後臺調用 dsh plugin CLI 把插件寫入指定 profile 的 bundle 層。

插件當前版本爲 0.5.5,許可證 MIT,GitHub 倉庫約 100 stars。分類上屬於聯網工具:目錄數據來自網絡,安裝可走 npm registry 或 GitHub 源。

核心功能

目錄瀏覽與排序

打開 設置(Settings)→ 插件(Plugins)→ 插件市場(Plugin Market) 後:

  • 目錄按分類分組,支持搜索與「已安裝」過濾
  • 卡片顯示 GitHub Star(無數據則不顯示)
  • 可按 最熱(Star 降序,無 Star 排最後)、最新(收錄日期)排序,或恢復官網默認順序
  • 大目錄分批漸進渲染,避免一次性插入數百卡片造成卡頓
  • 頂部顯示目錄來源官網鏈接,可直達 awesome-dsh-plugin.com

詳情 可查看該插件的官方安裝命令(含目標 profile)。

安裝、更新、卸載與任務隊列

安裝、更新、卸載組成 FIFO 任務隊列。多個插件可連續排隊;任務面板固定在右下角,即時顯示「排隊中 / 校驗中 / 執行中 / 完成 / 失敗 / 已終止 / 超時」。可取消排隊項、終止執行項、查看每個任務的 pnpm 日誌。

  • 默認任務超時 120 秒,可用環境變量 DSH_MARKET_OP_TIMEOUT_MS 調大(例如 300000
  • 遇到 pnpm 臨時網絡錯誤(GET ... errorETIMEDOUTECONNRESET 等)會自動重試一次
  • 一鍵更新全部 會把所有可更新插件依次加入隊列
  • 隊列支持一鍵清空已完成/失敗記錄;清除會同步到服務端,刷新後不會再次出現

已安裝插件卡片會顯示真實狀態(與 profile 的 package.json 同步),按「作者 + 倉庫」(owner/repo)識別,避免同名插件誤標。目錄外或市場之外安裝的依賴也會出現在 本機插件 列表,標註目錄內/外、已停用、來源類型,並支持停用、啓用或卸載(內置 bundle 與本地 link/file 源不提供刪除)。

跨 Profile 安裝與同步

官網目錄默認發佈 --profile web 命令;桌面端(desktop shell)使用獨立 profile(如 desktop),只裝到 web 的插件不會自動出現在桌面應用。

面板頂部提供 安裝設置跨 Profile 同步

  • 自動同步到其它 profile 默認開啓:安裝時自動裝到本機所有已初始化的 profile;關閉後僅裝到安裝時選擇的 profile
  • 安裝確認框可選目標 profile(默認 web)
  • 跨 Profile 同步 把 web 裏已裝的插件一鍵補裝到目標 profile(只新增缺失項)
  • 同步爲本地複製:源 profile 已裝過才放行(syncFrom 校驗),目錄外插件(如 aegis)也可同步;裝到 desktop 等 profile 後需重啓對應應用

安全機制與試裝驗證

  • 來源白名單:安裝只接受精選目錄收錄的 github: 源(與 dsh-market 策略一致);目錄抓取失敗或 registry/link 源不做此限制。白名單對所有目標 profile 生效,可勾選「跳過安全檢查」繞過
  • npm 優先:目錄條目帶 npm 映射時優先用 npm 安裝/更新;僅 GitHub-only 插件走 GitHub 源。可在 npm/pnpm 配置中設置國內鏡像(如 registry=https://registry.npmmirror.com
  • 試裝驗證(trial boot):白名單通過後,若插件未聲明 web client 半端,會在臨時 DSH_HOME 裏試裝並實際啓動一次;只有出現 dsh web: 就緒行才判定可裝。驗證失敗給出真實啓動錯誤並拒絕安裝,真實 profile 不會被寫入。試裝僅對 web profile 執行
  • 同源校驗:寫操作只接受同源 POST,跨源請求返回 403
  • 安裝前自動快照:寫入前會把 package.json 備份爲 .mkts-snapshot-<時間戳>.json,可配合 dsh plugin --profile <name> remove <包名> 手工回退

停用、啓用與熱掛載

  • 停用 / 啓用:停用保留依賴與磁盤文件,只移出激活的 bundle 層;狀態寫入 dsh.market.disabled,重啓後仍保持
  • 熱掛載:安裝成功後,若 cordis.patch.yml 僅爲簡單 id/name 插入,可掛入運行中的組合並自動刷新頁面;複雜 patch 或環境不支持時回退爲「重啓生效」。熱掛載僅作用於運行中的 web profile

失敗排查

安裝 / 更新 / 卸載失敗(含超時、已終止、已拒絕)後,失敗彈窗和任務隊列會出現 詢問 DSH 按鈕:前端新建對話,並把操作目標、環境信息與完整錯誤日誌作爲 prompt 發送給 AI,便於排查。

pnpm ≥11 若遇 ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION,市場會自動把違規的 name@version 合併進 profile 的 pnpm-workspace.yamlminimumReleaseAgeExclude 並重試一次。

安裝與啓用

本插件在 DSH web profile 內運行,peer 依賴由宿主提供,用戶無需手動安裝 @deepseek-ai/cordis@deepseek-ai/dsh-client-runtime@deepseek-ai/dsh-client-ui-slots。當前版本面向 DSH 0.0.1-rc.2+(不含 0.0.1-rc.1)及 0.1.0-rc.2+。Node 要求 ^22.19.0 || >=24.0.0

方式一:從 npm registry 安裝(推薦):

dsh plugin --profile web add @sanqi-normal/dsh-webui-market-plugin

方式二:從 GitHub 源碼安裝:

dsh plugin --profile web add github:Sanqi-normal/dsh-webui-market-plugin

安裝後重啓 web 服務生效:

pnpm dsh web

GitHub 源安裝會執行包內 prepare 腳本。若被 pnpm 攔截,把提示的包名加入 profile 的 pnpm-workspace.yamlallowBuilds 後重試。pnpm 11 起未在 allowBuilds 中顯式放行的構建腳本會導致 ERR_PNPM_IGNORED_BUILDS;若該包不需要構建腳本,可寫成 false 明確拒絕。

典型用法

經過上面的安裝步驟後,在瀏覽器打開 DSH web 界面,進入 設置 → 插件 → 插件市場

  1. 在搜索框或分類中定位目標插件,用「最熱 / 最新」排序縮小範圍
  2. 詳情 覈對官方安裝命令與目標 profile
  3. 在卡片上執行 安裝;若需 desktop 等 profile,在 安裝設置 中確認「自動同步到其它 profile」,或在 跨 Profile 同步 區補裝
  4. 在右下角任務面板觀察進度;失敗時可查看 pnpm 日誌或點 詢問 DSH
  5. 安裝成功後,若未熱掛載生效,執行 pnpm dsh web 重啓 web 服務

維護者可用以下命令從官網 JSON API 刷新離線目錄快照(官網不可達時會失敗,不會複製舊數據):

pnpm run snapshot

快照寫入 data/catalog-snapshot.json,供官網抓取失敗時回退。

適用場景與注意

適合誰:經常在 DSH web GUI 裏試用社區插件的開發者;需要在 web 與 desktop 等多個 profile 間保持插件一致的本機用戶;希望用白名單、試裝驗證和任務隊列降低「裝壞組合」風險的環境。

務必注意

  • 本插件以當前 dsh 進程的權限運行,安裝前應檢查目標插件源碼與許可證
  • 安裝 / 卸載後通常需重啓 web 服務;熱掛載成功時可免重啓
  • 在命令行手工執行 dsh plugin add/remove/update 可能短暫恢復已停用項,重啓或下一次市場操作會再次應用停用狀態
  • 跨 profile 同步只增不刪,不會刪除目標 profile 已有內容
  • 目錄數據與插件數量以 awesome-dsh-plugin.com 爲準;這是社區生態目錄,不是官方應用商店

結尾

@sanqi-normal/dsh-webui-market-plugin 把 awesome-dsh-plugin.com 的目錄搬進 DSH 設置面板,用隊列化安裝、白名單、試裝驗證和跨 profile 同步,把「查目錄 → 敲命令 → 重啓」收成一套可觀測的流程。若你主要在 web GUI 裏擴展 harness 能力,這是聯網工具類裏較完整的市場前端之一。

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

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

小夜