把 GitHub `dsh-plugin` 话题拉成可搜索、可一键安装/更新/卸载的 DSH 插件市场设置面板,并给 agent 配齐四个市场工具。
- 语言
- JavaScript
- License
- MIT
- 分支
- master
安装
$ dsh plugin --profile web add github:AwesomeHou/dsh-plugin-marketplace在终端中运行以上命令,通过 dsh CLI 安装此插件。可在右上角切换 Profile。 第一次用 dsh?看这篇新手教程
对话式安装
帮我安装 DeepSeek Harness 插件 AwesomeHou/dsh-plugin-marketplace:先查看仓库 https://github.com/AwesomeHou/dsh-plugin-marketplace.git 确认安全性,然后执行安装命令并验证插件加载成功。
把这段指令粘贴给 DSH Web GUI 里的助手,由它代你完成安装与验证。
一句话定位
DeepSeek Harness 的「插件市场」入口:把 GitHub 上 dsh-plugin 话题里的所有仓库拉成可搜索的列表,让你在设置面板里一键安装、更新、停用、卸载插件,agent 也可以自己调用同名工具来搜装。
核心能力
- 同步 GitHub
dsh-plugin话题(默认每页 50、上限 100),支持分页加载更多和关键词搜索,搜索走 GitHub 自己的q,所以搜的是整个话题而不仅是已加载的页 - 卡片一键安装,启动异步任务并实时显示阶段、百分比、已下载字节、网速、ETA、最近几行日志,可中途取消
- 区分根级插件与 monorepo 工作区:已发布到 npm 的优先装 npm 版(免 GitHub 拉取、运行时依赖一并装好),monorepo 根则克隆源码、用 corepack pnpm 构建后再
link:注册 - 「已安装」标签页管理第三方插件:检查最新版本、更新、停用/启用、卸载;本插件自己有新版本时在两个标签页都显示横幅
- 给 agent 注册 4 个同名工具:
market_search/market_install/market_installed/market_update,让模型能自己搜索并安装插件
技术实现
- 语言: JavaScript(ESM,纯 Node 内置模块,无 npm 依赖)
- 关键依赖:
node:child_process(调dsh plugin)、node:net(回路代理实时统计下载字节和速度)、node:fs+node:path(读写 profile manifest、克隆源码到$DSH_HOME/marketplace-src)、fetch(调 GitHub Search / npm registry / 翻译服务) - 架构模式: 双半 bundle 插件 —— Host 半(
lib/index.js)通过cordis.patch.yml把自身注入 Loader,注册/api/market/*同源 HTTP 端点和模型工具;Client 半(lib/client.js)通过dsh.client声明作为浏览器模块加载,用 React 注册两个settings.plugins.tab;两端通过fetch通信(永久插件无沙箱 RPC) - 入口文件:
lib/index.js(host 注入webServer/timer/tools),lib/client.js(client 注入slots/sessions/workspaces)
适用场景
- 你装了 DSH 之后想「一键发现并安装社区插件」,而不是手动
git clone然后改package.json。 - 你想让 agent 也能自己搜索并安装插件(比如用户说「给我装一个能翻译网页的插件」),agent 通过
market_search+market_install即可完成。 - 你装了多个第三方插件后需要统一管理:看哪些有新版本、停用不用的、卸载想换掉的,不用去改 profile manifest。
前置依赖与兼容性
| 依赖 | 最低版本 | 说明 |
|---|---|---|
| DSH Harness | 未声明 | 需暴露 webServer / timer / tools 服务与 settings.plugins.tab 槽位、客户端 slots/sessions/workspaces 服务;未在 package.json 显式声明 |
| Node | 未声明 | 源码使用了 AbortSignal.timeout()(Node ≥17.3)和全局 fetch(Node ≥18),未在 package.json#engines 显式声明 |
| pnpm | 任意 | 安装子进程注入 CI=true(pnpm ≥10 无 TTY 不再无限等交互提示),并通过 --config.store-dir 锁定 store 路径防跨大版本漂移 |
| git | 任意 | 处理 monorepo 工作区时克隆/拉取 GitHub 仓库 |
| 平台 | 跨平台 | Windows 走 taskkill /T /F 杀进程树,POSIX 走 kill(-pid),对两种环境都有专用分支 |
| 原生模块 | 无 | 全部使用 Node 内置模块,零原生依赖 |
安装方式
dsh plugin --profile web add github:AwesomeHou/dsh-plugin-marketplace
配置项
| 配置 | 类型 | 说明 | 默认值 |
|---|---|---|---|
DSH_HOME | 环境变量 | 决定 web profile 目录($DSH_HOME/profiles/web)和 marketplace 源码/工作区目录 | ~/.dsh(harness 默认) |
DSH_MARKET_STALL_MS | 环境变量 | 安装停滞看门狗阈值:子进程这么长时间没有任何输出或字节增长就被杀进程树并直接重连一次(秒) | 120 |
说明:以上两个环境变量都不是「必填配置」,不设就用默认值。插件本身没有独立的配置文件。
常见问题
Q: 装完之后要重启 harness 吗?
A: 要。本插件属于永久(bundle)插件,安装/更新/卸载、停用/启用、还有本插件自己的更新,都需要重启 DSH harness 才会被 Loader 真正加载,页面顶部会显示「重启后生效」的提示。
Q: 「已安装」标签页里为什么只有我自己后装的插件,harness 自带的去哪儿了?
A: 故意这样设计的。harness 自带的内置插件在 profile 模板的 dsh.profile.bundles 里,不能关闭或卸载;只有你后装进 dependencies 的第三方插件才会出现在「已安装」里,页面顶部有一行声明提醒这件事。
Q: 装某个插件卡在「解析依赖 8%」十几分钟不动,怎么回事?
A: 多数是网络问题(GitHub 不可达或过慢)。默认 120 秒无进度会被停滞看门狗自动杀掉并直接重连一次;再卡就快速失败并提示「检查网络后重试,或改用『让 agent 安装』」。想拉长等待可设环境变量 DSH_MARKET_STALL_MS=300(秒)。
Q: 「让 agent 安装」按钮什么时候出现?安全吗?
A: 直装失败时出现。它的实现是:host 先确保一个专属工作区目录存在($DSH_HOME/marketplace-install),再由 client 调 runtime 的 workspaces.create / sessions.create / sessions.open 在该工作区新开一个会话并切过去,把安装任务发给那个新会话 —— 不污染当前会话,也不用你手动选工作区。如果 runtime 的会话/工作区服务不可用,会回退为把任务发给当前会话。
Q: 插件市场怎么知道自己有新版本?会不会误判?
A: 它读自己 package.json 里声明的 repository 字段,对照 GitHub 默认分支的 version,有新版就在两个标签页顶部显示 vX → vY · 立即更新。它显式走自己的 GitHub 仓库而不是裸 npm 名 —— 因为 dsh-plugin-marketplace 这个名字在 npm registry 另有他人持有,走裸名会拉到无关包。
上手难度
入门 — 安装一行命令重启即用;遇到安装失败直接照错误文案操作或点「让 agent 安装」,无需手动改 manifest 或配置文件。
已知问题与限制
- 仅支持 web profile 的插件管理(CLI/headless profile 不在覆盖范围)
- 安装走
dsh plugin add -w,要求目标 profile 是有效的 pnpm workspace(需pnpm-workspace.yaml);若不是,会给出明确报错,但本插件无法自动帮你创建工作区文件 - 声明了
@deepseek-ai/*@^0.1.0-rc.6这类预发布对等依赖的插件,直装会被 pnpm 拒绝(ERR_PNPM_NO_MATCHING_VERSION),需走「让 agent 安装」兜底 - 已装插件的「最新版本」每 15 分钟缓存一次,列表加载/已装查询可能略滞后于 npm registry 或 GitHub
- 网络极差时停滞看门狗可能误杀正常的长依赖解析(可通过
DSH_MARKET_STALL_MS调大阈值) - 「让 agent 安装」需要 client runtime 的
sessions/workspaces服务都可用;服务缺失时回退为发给当前会话,会污染当前对话
English | 中文
一个 DeepSeek Harness 的永久插件,把 GitHub
dsh-plugin topic 变成插件市场——既是 设置 → 插件 里的标签页,也提供一组模型工具,让 agent 自己就能搜索并安装插件。

插件市场:搜索、浏览、一键安装、检查更新。
功能
- 全量分页 — 完整 topic 按页拉取(默认 50 / 最大 100),UI 带"加载更多"按钮。不再有"只看 50 个"的硬限制:
total反映真实的total_count。 - 搜索 — 关键词搜索走 GitHub 自己的
q(所以是在整个 topic 里搜,而不是只在已加载的页里过滤),UI 搜索框和market_search工具都用它。 - Agent 工具(Host 侧通过
ctx.tools.register注册):market_search(q?, page?, perPage?)— 返回 topic 仓库的 JSON 列表(full name、star、语言、简介、URL)。market_install(spec)— 通过dsh plugin --profile web add -w <spec>安装到webprofile。执行前会校验 spec 是否含 shell 元字符;完成后提示需要重启 harness。market_installed()— 列出webprofile 已安装的第三方插件:启用状态、当前版本、最新版本与是否可更新(含市场自身的更新状态)。内置插件不在此列。market_update(name)— 把某个已安装插件更新到最新版本(需重启 harness 生效)。
- 安装(默认:直装,优先 npm 包) — 每个插件卡片都有 安装 按钮,点击后通过
POST /api/market/install启动确定性的异步安装任务:host 侧planInstall先探测仓库形态——根package.json声明了dsh.bundle/dsh.client的根级插件走标准dsh plugin add -w <spec>;已发布到 npm 的插件优先用name@<latest>装 npm 版(快、稳、免 GitHub 拉取,pnpm 把插件及运行时依赖如ws/node-pty一起装进 profile);未发布到 npm 的用 github spec;monorepo/workspace 根则克隆到$DSH_HOME/marketplace-src、corepack pnpm 构建后link:注册(沙箱内自带 node_modules,依赖可解析)。装完做真实结果校验(进入dsh.profile.bundles、入口文件存在、运行时依赖可解析——后一条专门防“link 缺依赖导致启动失败”的历史回归)。注意:不能用link:装根级插件。卡片内联渲染 App Store 式进度条(阶段 / 百分比 / 已下载 / 速度 / ETA / 实时日志),可取消。 - pnpm 兼容层(借鉴 dsh-market) — 所有安装子进程注入
CI=true(pnpm ≥10 无 TTY 时不再无限等交互提示而卡死,遇错直接报错);检测到 pnpm 大版本漂移(ERR_PNPM_VIRTUAL_STORE_DIR_MAX_LENGTH_DIFF/PUBLIC_HOIST_PATTERN_DIFF,即 modules 目录由别的 pnpm 大版本创建)会自动pnpm install重建 modules 目录并重试一次。失败分类classifyPnpmFailure覆盖:预发布 peer 解析、构建脚本拦截(IGNORED_BUILDS/GIT_DEP_PREPARE_NOT_ALLOWED)、幽灵依赖 404、发布新鲜度等待期、workspace 缺失、pnpm 缺失等,统一给可操作文案而不是裸报错。 - 安装卡住自动止损 — pnpm / git 在死网络或过慢的下载上可能零输出挂死(例如 GitHub 暂不可达时停在"正在解析依赖… 8%")。host 侧带停滞看门狗:一段时间(默认 120s,可用
DSH_MARKET_STALL_MS覆盖)没有任何进度(无输出行、无字节增长)就杀掉进程树 → 自动直连重试一次(去掉字节统计代理)→ 若再次停滞则快速失败并提示「检查网络后重试,或改用「让 agent 安装」」,不再无限转圈等到 10 分钟超时。 - 对等依赖失败识别 — 若插件声明了
@deepseek-ai/*@^0.1.0-rc.6这类预发布对等依赖,dsh plugin add可能以ERR_PNPM_NO_MATCHING_VERSION退出。host 侧会识别并给出可操作的说明(而不是裸的 "exit 1"),卡片同时提供 「让 agent 安装」 兜底按钮——agent 会按仓库 README / 安装脚本处理这类结构。 - workspace 缺失的友好报错 — host 侧在安装/更新前检查 web profile:
package.json或pnpm-workspace.yaml缺失时,market_install//api/market/install会返回可操作的错误信息(告诉用户如何创建pnpm-workspace.yaml或重新初始化 profile),而不是 pnpm 那种晦涩的--workspace-root may only be used inside a workspace。 - agent 安装方案(兜底,专属工作区新开对话) — 当直装失败时(尤其对等依赖 / 非标准结构场景),卡片上会出现 「让 agent 安装」 按钮。点击后 host 会确保一个专属安装工作区(
$DSH_HOME/marketplace-install,经GET /api/market/install-workspace暴露),client 通过 runtime 的workspaces.create/sessions.create/sessions.open在该工作区新开一个对话并切过去,再把固定提示词session.prompt发给那个会话——由 agent 读 README 并自行决定安装方式,不污染当前会话、无需手动选工作区。若 runtime 服务不可用则回退为发给当前会话。代码在lib/client.js的installViaAgent。更新/关闭/卸载仍走 host 接口(/api/market/update等)。 - 更新插件(有新版本提示) — 每个已安装插件都会对照最新版本(npm registry 的
latest,或 GitHub 默认分支package.json的version,GitHub 插件优先)。有新版本时在卡片上标 可更新 并给 更新 按钮(/api/market/update)。 - 区分内置 / 后安装 —
dsh.profile.bundles里来自 profile 模板的包是内置插件(随 harness 提供,不能关闭 / 卸载),dependencies里的是后安装插件。已安装标签页只展示后安装(第三方)插件,内置插件不列出(页面顶部有声明)。 - 后安装插件可停用 / 卸载 — 停用 / 启用(
/api/market/set-enabled)通过把它移出 / 移回dsh.profile.bundles实现(依赖保留);卸载(/api/market/uninstall)通过dsh plugin --profile web remove <name>移除依赖并自动从 bundle 层摘除。两者都需重启 harness。 - 市场自更新检查 — 插件市场(本插件)会检查自己的最新版本(从其 GitHub 仓库
package.json读取)。有新版本时在"插件市场"和"已安装"两个标签页顶部显示横幅:vX → vY · 立即更新。 - 声明来源 — 插件市场标签页顶部声明插件清单的来源:GitHub
dsh-plugin话题(github.com/topics/dsh-plugin),通过 GitHub Search API 实时同步。 - 并入插件设置 — 注册两个
settings.plugins.tab(market插件市场、installed已安装),与自带的"插件配置"、"插件列表"并列。
安装
手动安装
dsh plugin --profile web add https://github.com/AwesomeHou/dsh-plugin-marketplace
安装后需重启 harness 才能生效。
让 Agent 安装
帮我安装这个插件 https://github.com/AwesomeHou/dsh-plugin-marketplace
结构
| 部件 | 文件 | 作用 |
|---|---|---|
| Bundle 清单 | package.json | 声明 dsh.bundle.patch(host 层)+ dsh.client(浏览器模块) |
| Patch 层 | cordis.patch.yml | 把插件自己的 host 行插入 Loader 树 |
| Host 半 | lib/index.js | GitHub 分页同步 + /api/market/list、/api/market/install(异步任务)、/api/market/install/status、/api/market/install/cancel、/api/market/installed、/api/market/update、/api/market/set-enabled、/api/market/uninstall + market_search/market_install/market_installed/market_update 工具 |
| Client 半 | lib/client.js | __ModuleLoader__ bundle:插件市场 / 已安装 两个设置标签页 + 搜索 + 加载更多 + 一键安装(带进度条/速度/大小/阶段/取消)+ 更新 / 停用 / 启用 / 卸载 + 市场自更新横幅 |
数据走 Host 半在 ctx.webServer 上注册的同源 HTTP 端点(/api/market/*)——永久插件没有 harness/host.call 沙箱 RPC,所以浏览器半用 fetch。
开发
npm run check # 语法检查两个半
License
MIT
收录徽章
[](https://deepseek-plugin.org/plugins/AwesomeHou/dsh-plugin-marketplace)把这段 markdown 粘贴到你的 GitHub README,链接回本插件详情页。徽章只声明已被本站收录,不代表安全认证。