前言¶
DeepSeek Harness(DSH)的插件生態分散在 GitHub 上,倉庫通過 dsh-plugin 話題歸類,數量已超過一千。平時找插件往往要打開話題頁、逐個翻倉庫、對照 README 裏的安裝命令,再手動執行 dsh plugin add。已安裝的插件散落在 profile 配置裏,更新和卸載也沒有統一入口。
下面介紹的 dsh-plugin-marketplace 由 AwesomeHou 維護,是一個 DSH 永久插件。它把 GitHub dsh-plugin 話題即時同步到 Harness 設置頁的「插件市場」標籤,支持搜索、分頁瀏覽、一鍵安裝,並向 agent 註冊 market_search、market_install 等工具,讓模型也能自行搜索並安裝插件。
這是什麼¶
dsh-plugin-marketplace 同時承擔兩件事:
- 設置 UI — 在「設置 → 插件」下新增「插件市場」和「已安裝」兩個標籤頁,與自帶的「插件配置」「插件列表」並列。
- 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 會先探測倉庫形態:
- 根目錄
package.json聲明瞭dsh.bundle/dsh.client的根級插件 → 走標準dsh plugin add -w <spec>。 - 已發佈到 npm 的插件 → 優先用
name@<latest>安裝 npm 版(pnpm 一併安裝運行時依賴如ws、node-pty)。 - 未發佈到 npm → 使用 GitHub spec。
- 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 registrylatest或 GitHub 默認分支package.json的version;有新版本時卡片標「可更新」。
以上操作均需重啓 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.json 或 pnpm-workspace.yaml;缺失時 market_install 和 /api/market/install 會返回可操作的錯誤說明,而不是 pnpm 的 --workspace-root may only be used inside a workspace。
典型用法¶
在設置頁瀏覽並安裝¶
- 重啓 harness 後打開「設置 → 插件 → 插件市場」。
- 在搜索框輸入關鍵詞,或點擊「加載更多」翻頁。
- 找到目標插件,點擊「安裝」,觀察進度條;完成後重啓 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話題下倉庫的工作流搭建者。 - 需要集中管理
webprofile 第三方插件啓用狀態與版本的用戶。
注意事項
- 插件以當前 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