dsh-plugin-marketplace:把 GitHub dsh-plugin 話題變成可搜索的插件市場

前言

DeepSeek Harness(DSH)的插件生態分散在 GitHub 上,倉庫通過 dsh-plugin 話題歸類,數量已超過一千。平時找插件往往要打開話題頁、逐個翻倉庫、對照 README 裏的安裝命令,再手動執行 dsh plugin add。已安裝的插件散落在 profile 配置裏,更新和卸載也沒有統一入口。

下面介紹的 dsh-plugin-marketplace 由 AwesomeHou 維護,是一個 DSH 永久插件。它把 GitHub dsh-plugin 話題即時同步到 Harness 設置頁的「插件市場」標籤,支持搜索、分頁瀏覽、一鍵安裝,並向 agent 註冊 market_searchmarket_install 等工具,讓模型也能自行搜索並安裝插件。

這是什麼

dsh-plugin-marketplace 同時承擔兩件事:

  1. 設置 UI — 在「設置 → 插件」下新增「插件市場」和「已安裝」兩個標籤頁,與自帶的「插件配置」「插件列表」並列。
  2. Host 工具 — 通過 ctx.tools.register 向 agent 暴露市場搜索、安裝、列出已裝插件、更新等能力。

數據來源是 GitHub Search API,針對 github.com/topics/dsh-plugin 話題即時拉取;頁面頂部會聲明清單來源。當前版本爲 v0.3.1,分類爲聯網工具,許可證 MIT。

核心功能

瀏覽與搜索

  • 全量分頁:按頁拉取 topic 下的全部倉庫,默認每頁 50 條、最大 100 條,UI 提供「加載更多」;total 反映 GitHub 返回的真實 total_count,不再侷限於前 50 個。
  • 關鍵詞搜索:搜索框和 market_search 工具均走 GitHub 的 q 參數,在整個 topic 範圍內檢索,而非只在已加載頁內過濾。

一鍵安裝與進度反饋

每個插件卡片提供「安裝」按鈕,點擊後通過 POST /api/market/install 啓動異步安裝任務。Host 側 planInstall 會先探測倉庫形態:

  1. 根目錄 package.json 聲明瞭 dsh.bundle / dsh.client 的根級插件 → 走標準 dsh plugin add -w <spec>
  2. 已發佈到 npm 的插件 → 優先用 name@<latest> 安裝 npm 版(pnpm 一併安裝運行時依賴如 wsnode-pty)。
  3. 未發佈到 npm → 使用 GitHub spec。
  4. monorepo / workspace 根 → 克隆到 $DSH_HOME/marketplace-src,經 corepack pnpm 構建後以 link: 註冊。

安裝完成後會做結果校驗:確認插件進入 dsh.profile.bundles、入口文件存在、運行時依賴可解析。卡片內聯展示 App Store 式進度條(階段、百分比、速度、ETA、即時日誌),可取消。

pnpm 兼容與安裝止損

借鑑 dsh-market 的做法,所有安裝子進程注入 CI=true,避免 pnpm ≥10 在無 TTY 時無限等待交互提示。檢測到 pnpm 大版本漂移(ERR_PNPM_VIRTUAL_STORE_DIR_MAX_LENGTH_DIFF 等)會自動 pnpm install 重建 modules 並重試。失敗經 classifyPnpmFailure 分類後給出可操作文案,覆蓋預發佈 peer 解析、構建腳本攔截、幽靈依賴 404、workspace 缺失等場景。

若 pnpm / git 在慢網絡下零輸出掛死,Host 側停滯看門狗(默認 120 秒,可用 DSH_MARKET_STALL_MS 覆蓋)會殺掉進程樹並直連重試一次;再次停滯則快速失敗,提示檢查網絡或改用「讓 agent 安裝」。

Agent 工具

Host 側註冊四個工具:

工具 作用
market_search(q?, page?, perPage?) 返回 topic 倉庫 JSON 列表(full name、star、語言、簡介、URL)
market_install(spec) 通過 dsh plugin --profile web add -w <spec> 安裝到 web profile;執行前校驗 spec 是否含 shell 元字符
market_installed() 列出 web profile 已安裝的第三方插件及啓用狀態、版本、是否可更新
market_update(name) 將指定插件更新到最新版本

已安裝插件管理

「已安裝」標籤頁只展示後安裝(第三方)插件;來自 profile 模板的內置插件不列出,頁面頂部有說明。

  • 停用 / 啓用/api/market/set-enabled):移出或移回 dsh.profile.bundles,依賴保留。
  • 卸載/api/market/uninstall):dsh plugin --profile web remove <name>,同時從 bundle 層摘除。
  • 更新/api/market/update):對照 npm registry latest 或 GitHub 默認分支 package.jsonversion;有新版本時卡片標「可更新」。

以上操作均需重啓 harness 後生效。

兜底:讓 agent 安裝

直裝失敗時(尤其預發佈對等依賴、非標準結構),卡片會出現「讓 agent 安裝」。Host 確保專屬工作區 $DSH_HOME/marketplace-install,client 在該工作區新開對話併發送固定提示詞,由 agent 讀 README 自行決定安裝方式,不污染當前會話。若 runtime 不可用則回退到當前會話。

對等依賴失敗(如 @deepseek-ai/*@^0.1.0-rc.6 觸發 ERR_PNPM_NO_MATCHING_VERSION)時,Host 會給出說明而非裸 exit 1

市場自更新

本插件會檢查自身 GitHub 倉庫 package.json 的最新版本;有新版本時在「插件市場」和「已安裝」標籤頁頂部顯示 vX → vY · 立即更新 橫幅。

安裝與啓用

官方安裝命令如下。安裝後需重啓 harness 才能生效。

dsh plugin --profile web add https://github.com/AwesomeHou/dsh-plugin-marketplace

也可以讓 agent 安裝:

幫我安裝這個插件 https://github.com/AwesomeHou/dsh-plugin-marketplace

安裝前請確認 web profile 存在 package.jsonpnpm-workspace.yaml;缺失時 market_install/api/market/install 會返回可操作的錯誤說明,而不是 pnpm 的 --workspace-root may only be used inside a workspace

典型用法

在設置頁瀏覽並安裝

  1. 重啓 harness 後打開「設置 → 插件 → 插件市場」。
  2. 在搜索框輸入關鍵詞,或點擊「加載更多」翻頁。
  3. 找到目標插件,點擊「安裝」,觀察進度條;完成後重啓 harness。

讓 agent 搜索並安裝

agent 可調用 market_search 檢索 topic,再用 market_install 安裝:

market_search(q="markdown", page=1, perPage=20)
market_install(spec="owner/repo")

安裝完成後 agent 應提示用戶重啓 harness。

查看與更新已裝插件

market_installed()
market_update(name="某插件包名")

或在「已安裝」標籤頁直接操作停用、啓用、卸載、更新。

適用場景與注意

適合誰

  • 經常在 DSH 裏試用社區插件的開發者。
  • 希望 agent 能自主發現並安裝 dsh-plugin 話題下倉庫的工作流搭建者。
  • 需要集中管理 web profile 第三方插件啓用狀態與版本的用戶。

注意事項

  • 插件以當前 dsh 進程權限運行;安裝前應檢查目標倉庫源碼與許可證。
  • 不能用 link: 裝根級插件;monorepo 場景由 Host 自動處理克隆與構建。
  • 內置插件隨 harness 提供,不能在此市場停用或卸載。
  • DSH 社區目錄(如 SkillHub)是獨立站點,與 DeepSeek / 幻方無官方從屬關係;本市場同步的是 GitHub 話題,亦非官方應用商店。

鏈接

  • 社區目錄頁:https://www.skillhub.cn/plugins/AwesomeHou/dsh-plugin-marketplace
  • GitHub 倉庫:https://github.com/AwesomeHou/dsh-plugin-marketplace
  • 插件話題來源:https://github.com/topics/dsh-plugin
羽毛球分组比赛记分
小程序二维码

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

小夜