DSH 插件市场:在设置页浏览 mydsh.dev 插件大全5596 候选 / 3656 有效,分类/AI…
32.2/100
综合分
3
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/22 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查有告警:npm 同名包「dsh-plugin-market」归属 veloce-ailab/dsh-plugin-market,装到的可能不是本插件。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add uluckystar/dsh-plugin-market该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · market
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 14 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意npm 同名包「dsh-plugin-market」归属 veloce-ailab/dsh-plugin-market,装到的可能不是本插件
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-plugin-market @ 1.3.0
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/21 14:34:23
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 127 处,展示前 77 条)
- 发起网络请求lib/client.js:661
if ((await fetch("/api/plugin-market/lifecycle", { - 发起网络请求lib/client.js:1208
const resp = await fetch(path, { - 读取本地文件lib/gateway.js:27
return readFileSync(`/proc/${ppid}/comm`, 'utf8').trim(); - 执行外部命令固定命令lib/gateway.js:30
return execFileSync('ps', ['-o', 'comm=', '-p', String(ppid)], { encoding: 'utf8', timeout: 3000 }).trim(); - 读取密钥环境变量lib/gateway.js:129
githubToken: config?.githubToken || process.env.PLUGIN_MARKET_GH_TOKEN || process.env.GH_TOKEN || '', - 读取密钥环境变量lib/gateway.js:130
securityInternalKey: config?.securityInternalKey || process.env.PLUGIN_MARKET_SECURITY_KEY || '', - 发起网络请求lib/gateway.js:139
this.fetchDispatcher = this.config.proxyUrl !== '' ? new ProxyAgent(this.config.proxyUrl) : undefined; - 读取本地文件lib/gateway.js:168
if (existsSync(this.catalogDiskPath)) { - 读取本地文件lib/gateway.js:169
const disk = JSON.parse(readFileSync(this.catalogDiskPath, 'utf8')); - 发起网络请求lib/gateway.js:181
const resp = await fetch(`${this.config.marketBaseUrl}/assets/plugins.json`, { - 写入本地文件lib/gateway.js:202
mkdirSync(join(this.catalogDiskPath, '..'), { recursive: true }); - 写入本地文件lib/gateway.js:203
writeFileSync(this.catalogDiskPath, JSON.stringify({ at: now, plugins }), 'utf8'); - 请求外部主机api.github.comlib/gateway.js:245
const response = await fetch(`https://api.github.com/repos/${owner}/${repo}/contents/package.json`, this.fetchOptions(headers, controller.signal)); - 发起网络请求lib/gateway.js:245
const response = await fetch(`https://api.github.com/repos/${owner}/${repo}/contents/package.json`, this.fetchOptions(headers, controller.signal)); - 读取本地文件lib/gateway.js:268
const scheduled = existsSync(this.validatedDiskPath) - 读取本地文件lib/gateway.js:269
? JSON.parse(readFileSync(this.validatedDiskPath, 'utf8')) : {}; - 读取本地文件lib/gateway.js:270
const metadata = existsSync(this.validatedMetadataPath) - 写入本地文件lib/gateway.js:300
mkdirSync(join(path, '..'), { recursive: true }); - 写入本地文件lib/gateway.js:305
writeFileSync(temp, JSON.stringify(overlay), { encoding: 'utf8', mode: 0o600 }); - 写入本地文件lib/gateway.js:306
renameSync(temp, path); - 删除本地文件lib/gateway.js:312
unlinkSync(temp); - 发起网络请求lib/gateway.js:411
const resp = await fetch(`${this.config.marketBaseUrl}/api/security/list`, { - 发起网络请求lib/gateway.js:456
const resp = await fetch(`${this.config.marketBaseUrl}/api/ai-search`, { - 发起网络请求lib/gateway.js:618
const resp = await fetch(`${this.config.marketBaseUrl}/api/security/list`, { - 写入本地文件lib/gateway.js:733
mkdirSync(join(this.lifecycleDiskPath, '..'), { recursive: true }); - 执行外部命令来自配置/变量lib/gateway.js:961
const proc = spawn(process.execPath, [wrapper, String(process.pid), port, '--', ...restArgs], { - 读取本地文件lib/profile-ops.js:21
const manifest = JSON.parse(readFileSync(join(packageDir, 'package.json'), 'utf8')); - 读取本地文件lib/profile-ops.js:25
return typeof declared === 'string' && existsSync(join(packageDir, declared)); - 读取本地文件lib/profile-ops.js:34
if (!existsSync(pkgPath)) - 读取本地文件lib/profile-ops.js:38
raw = JSON.parse(readFileSync(pkgPath, 'utf8')); - 写入本地文件lib/profile-ops.js:55
mkdirSync(dir, { recursive: true }); - 读取本地文件lib/profile-ops.js:58
if (existsSync(src)) { - 读取本地文件lib/profile-ops.js:60
writeFileSync(backup, readFileSync(src, 'utf8'), 'utf8'); - 写入本地文件lib/profile-ops.js:60
writeFileSync(backup, readFileSync(src, 'utf8'), 'utf8'); - 写入本地文件lib/profile-ops.js:63
writeFileSync(backup, '{}', 'utf8'); - 删除本地文件lib/profile-ops.js:73
unlinkSync(join(dir, oldest)); - 写入本地文件lib/profile-ops.js:125
writeFileSync(pkgPath, `${JSON.stringify(next, null, 2)}\n`, 'utf8'); - 写入本地文件lib/profile-ops.js:133
renameSync(backup, pkgPath); - 发起网络请求lib/client/MarketTab.js:211
const resp = await fetch('/api/plugin-market/lifecycle', { method: 'POST', headers: { 'content-type': 'application/json' }, body: '{}' }); - 发起网络请求lib/client/index.js:13
const resp = await fetch(path, { - 发起网络请求src/client/index.ts:32
const resp = await fetch(path, { - 读取本地文件src/gateway.ts:45
return readFileSync(`/proc/${ppid}/comm`, 'utf8').trim() - 执行外部命令固定命令src/gateway.ts:48
return execFileSync('ps', ['-o', 'comm=', '-p', String(ppid)], { encoding: 'utf8', timeout: 3000 }).trim() - 读取密钥环境变量src/gateway.ts:165
githubToken: config?.githubToken || process.env.PLUGIN_MARKET_GH_TOKEN || process.env.GH_TOKEN || '', - 读取密钥环境变量src/gateway.ts:166
securityInternalKey: config?.securityInternalKey || process.env.PLUGIN_MARKET_SECURITY_KEY || '', - 发起网络请求src/gateway.ts:175
this.fetchDispatcher = this.config.proxyUrl !== '' ? new ProxyAgent(this.config.proxyUrl) : undefined - 读取本地文件src/gateway.ts:204
if (existsSync(this.catalogDiskPath)) { - 读取本地文件src/gateway.ts:205
const disk = JSON.parse(readFileSync(this.catalogDiskPath, 'utf8')) as { at: number; plugins: MarketPlugin[] } - 发起网络请求src/gateway.ts:215
const resp = await fetch(`${this.config.marketBaseUrl}/assets/plugins.json`, { - 写入本地文件src/gateway.ts:235
mkdirSync(join(this.catalogDiskPath, '..'), { recursive: true }) - 写入本地文件src/gateway.ts:236
writeFileSync(this.catalogDiskPath, JSON.stringify({ at: now, plugins }), 'utf8') - 请求外部主机api.github.comsrc/gateway.ts:276
const response = await fetch(`https://api.github.com/repos/${owner}/${repo}/contents/package.json`, this.fetchOptions(headers, controller.signal)) - 发起网络请求src/gateway.ts:276
const response = await fetch(`https://api.github.com/repos/${owner}/${repo}/contents/package.json`, this.fetchOptions(headers, controller.signal)) - 读取本地文件src/gateway.ts:293
const scheduled = existsSync(this.validatedDiskPath) - 读取本地文件src/gateway.ts:294
? JSON.parse(readFileSync(this.validatedDiskPath, 'utf8')) as Record<string, ValidationStatus> : {} - 读取本地文件src/gateway.ts:295
const metadata = existsSync(this.validatedMetadataPath) - 写入本地文件src/gateway.ts:319
mkdirSync(join(path, '..'), { recursive: true }) - 写入本地文件src/gateway.ts:323
writeFileSync(temp, JSON.stringify(overlay), { encoding: 'utf8', mode: 0o600 }) - 写入本地文件src/gateway.ts:324
renameSync(temp, path) - 删除本地文件src/gateway.ts:327
finally { if (temp && existsSync(temp)) unlinkSync(temp) } - 发起网络请求src/gateway.ts:426
const resp = await fetch(`${this.config.marketBaseUrl}/api/security/list`, { - 发起网络请求src/gateway.ts:474
const resp = await fetch(`${this.config.marketBaseUrl}/api/ai-search`, { - 发起网络请求src/gateway.ts:630
const resp = await fetch(`${this.config.marketBaseUrl}/api/security/list`, { - 写入本地文件src/gateway.ts:750
mkdirSync(join(this.lifecycleDiskPath, '..'), { recursive: true }) - 执行外部命令来自配置/变量src/gateway.ts:976
const proc = spawn(process.execPath, [wrapper, String(process.pid), port, '--', ...restArgs], { - 读取本地文件src/profile-ops.ts:31
const manifest = JSON.parse(readFileSync(join(packageDir, 'package.json'), 'utf8')) as unknown - 读取本地文件src/profile-ops.ts:34
return typeof declared === 'string' && existsSync(join(packageDir, declared)) - 读取本地文件src/profile-ops.ts:43
if (!existsSync(pkgPath)) throw new Error('profile 清单不存在') - 读取本地文件src/profile-ops.ts:46
raw = JSON.parse(readFileSync(pkgPath, 'utf8')) - 写入本地文件src/profile-ops.ts:66
mkdirSync(dir, { recursive: true }) - 读取本地文件src/profile-ops.ts:69
if (existsSync(src)) { - 读取本地文件src/profile-ops.ts:71
writeFileSync(backup, readFileSync(src, 'utf8'), 'utf8') - 写入本地文件src/profile-ops.ts:71
writeFileSync(backup, readFileSync(src, 'utf8'), 'utf8') - 写入本地文件src/profile-ops.ts:73
writeFileSync(backup, '{}', 'utf8') - 删除本地文件src/profile-ops.ts:82
if (oldest !== undefined) unlinkSync(join(dir, oldest)) - 写入本地文件src/profile-ops.ts:136
writeFileSync(pkgPath, `${JSON.stringify(next, null, 2)}\n`, 'utf8') - 写入本地文件src/profile-ops.ts:142
try { renameSync(backup, pkgPath) } catch { }
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
涉及外部主机:api.github.com
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/schemastery@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-runtime@deepseek-ai/dsh-client-ui-slots@deepseek-ai/dsh-client-ui-settings@deepseek-ai/dsh-host-webserver给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 浏览插件大全
- 分类与AI搜索
- 一键安装启用停用卸载
展开完整介绍(98 字)↓
DSH 插件市场:在设置页浏览 mydsh.dev 插件大全(5596 候选 / 3656 有效),分类/AI 搜索、一键安装启用停用卸载、安全评估与自动重启。非官方社区 mydsh.dev 出品
README
由 DeepSeek 最新模型翻译生成dsh-plugin-market · 插件市场
在 DeepSeek Harness 设置页直接浏览 mydsh.dev 插件大全(catalog 5596 个,已核验可直接启用 3656 个)——分类浏览、本地/AI 搜索、安装、启用、停用、卸载、安全评估与一键自动重启生效。只展示已核验为可直接启用的 DSH 插件。非官方社区 mydsh.dev 出品。
预览
| 分类浏览 | 本地 / AI 搜索 | 已安装状态 |
| 分类浏览 | 本地和 AI 搜索 | 已安装状态 |
详细教程见:docs/USAGE.zh-CN.md。
软推广素材见:docs/PROMOTION.zh-CN.md。
展开完整文档(README 剩余 1 节)
dsh-plugin-market · 插件市场
在 DeepSeek Harness 设置页直接浏览 mydsh.dev 插件大全(catalog 5596 个,已核验可直接启用 3656 个)——分类浏览、本地/AI 搜索、安装、启用、停用、卸载、安全评估与一键自动重启生效。只展示已核验为可直接启用的 DSH 插件。非官方社区 mydsh.dev 出品。
预览
| 分类浏览 | 本地 / AI 搜索 | 已安装状态 |
| 分类浏览 | 本地和 AI 搜索 | 已安装状态 |
详细教程见:docs/USAGE.zh-CN.md。
软推广素材见:docs/PROMOTION.zh-CN.md。
功能
- 分类浏览:全部 / Agent / MCP / 开发工具 / 界面 / 视觉 / LLM / 记忆 / 数据 / 集成 共 10 类,带计数,按星数排序,「加载更多」
- 本地搜索:毫秒级本地匹配(名称 / 中英简介 / 描述 / topics)
- AI 搜索:勾选 🤖 AI 后调用 mydsh.dev 的 AI 搜索服务,语义理解你的需求
- 安装后可控启用:安装只下载插件,不自动启用;是否启用由用户明确点击「启用」决定
- 启用 / 停用 / 卸载:启用/停用后一键自动重启生效;停用保留安装,可随时重新启用;卸载彻底移除并清理启用状态
- 生命周期七态:未安装 / 已安装·未启用 / 已启用·重启后生效 / 已启用 / 已停用·重启后生效 / 不兼容·不建议启用 / 安装失败
- 一键自动重启生效:启用/停用后点「立即重启生效」——确认弹窗如实告知预估时长与影响,重启完成后页面自动刷新。适配所有运行环境(PM2 / 手动启动 / Docker / systemd / Windows)
- 安全评估:查询 mydsh.dev 安全报告,无报告则引导提交
- 安全保护:写配置前自动备份、写后校验、失败自动回滚;DSH 核心组件保护;不兼容插件拒绝启用(防启动失败);安装失败留痕可重试;插件名白名单 + 同源校验 + 请求体上限
- mydsh.dev 引流:每个插件带详情页链接(README / 安装方式 / 相似推荐 / 中文总结)
性能
- 插件大全磁盘持久化缓存($DSH_HOME/storages/plugin_market_catalog.json,6 小时 TTL):重启不丢、不重复拉取 2MB 数据
- 严格校验缓存($DSH_HOME/storages/plugin_market_validated_bundle_v1.json):只把含 dsh.bundle.patch 声明的仓库标为可展示
- 分类切换纯本地过滤,零网络请求
- AI 搜索 6 秒超时保护,慢不阻塞本地结果
安装
方式一:从 GitHub 安装
dsh plugin --profile web add github:uluckystar/dsh-plugin-market
方式二:从本地目录安装(开发)
dsh plugin --profile web add /path/to/dsh-plugin-market
安装后重启 DSH,在 设置 → 插件 → 插件市场 查看。后续通过插件市场安装的插件需要先「启用」,再按提示重启 DSH 后生效。
配置(cordis.patch.yml)
- id: plugin-market
name: dsh-plugin-market
config:
marketBaseUrl: 'https://mydsh.dev' # 数据源 profileName: 'web' # 安装目标 profile pnpmCommand: 'npx -y pnpm@11.7.0' # pnpm 版本(匹配 profile packageManager) proxyUrl: 'http://127.0.0.1:7897' # 本机代理(加速 GitHub 下载),可置空 catalogCacheMs: 21600000 # 插件大全缓存 TTL(6 小时) installTimeoutMs: 300000 # 安装超时 githubToken: '' # 可选:GitHub API token;无 token 时使用 raw/HEAD + 代理校验
API
| 端点 | 说明 |
| POST /api/plugin-market/browse | {category, limit} 分类浏览(limit=0 全量) |
| POST /api/plugin-market/search | {query, ai} 本地 + 可选 AI 搜索 |
| POST /api/plugin-market/install | {repo} 安装到当前配置,但不自动启用 |
| POST /api/plugin-market/enable | {repo} 启用插件,必要时提示重启 |
| POST /api/plugin-market/disable | {repo} 停用插件,保留安装 |
| POST /api/plugin-market/uninstall | {repo} 卸载并清理启用状态 |
| POST /api/plugin-market/status | {repo} 查看单个插件生命周期状态 |
| POST /api/plugin-market/lifecycle | 当前配置下全部已安装插件生命周期(含运行环境与自动重启能力) |
| POST /api/plugin-market/restart | 一键自动重启 DSH(PM2 托管由监督者拉起;其余环境由插件自拉起 wrapper) |
| POST /api/plugin-market/assess | {repo} 安全评估 |
| POST /api/plugin-market/installed | 已安装清单 |
数据源
MyDSH · DeepSeek Harness 插件大全 —— 自动同步 DSH 插件候选(当前 5596 个),并通过 package.json 中的 dsh.bundle.patch 声明严格校验是否可直接启用(当前 3656 个有效 / 1940 个无效已隐藏);插件市场只展示已严格确认的仓库。未知、不可解析、纯界面包和不完整包都不会展示。非官方社区。
开发
pnpm install
pnpm run typecheck # host + client 双 tsc
pnpm run build # tsc + tsdown(产物在 lib/)
node scripts/lifecycle-smoke.mjs # 生命周期安全回归(18 项断言,临时 profile,不碰真实配置)
License
MIT —— 详见 LICENSE。
致谢
- DeepSeek Harness——一切皆插件的 Agent 运行时
- MyDSH 社区——非官方插件大全数据源
2026-10 维护说明
本站目录是候选收录,不是安装量或全部可用插件数。valid 仅表示历史检查找到插件 bundle 声明,不等于指定 DSH 版本安装、启动或安全审查通过。当前分类规则与网站统一,并包含生态桥/兼容层。
校验任务使用 $DSH_HOME,可通过 PLUGIN_MARKET_CATALOG_SOURCE 指定目录源,不强制使用某台电脑的回环代理。PLUGIN_MARKET_VALIDATE_MAX_ITEMS 同时约束新增与到期复查;有效条目周期复查,无效条目可在作者修复后重新校验。结果原子写入,网络临时失败不将已有有效结果改判为无效。
运行 node scripts/test-validation.mjs 验证批量上限和结果落盘。详情页的版本依赖来自作者声明;没有实测记录时明确标记未实测,不承诺运行兼容。
0.1.2 搜索维护
本地检索先判断关键词匹配,星数只对已匹配条目加权,避免无关高星仓库出现在结果中。AI 精排使用相关候选,并拒绝候选集外的返回;6秒超时覆盖完整响应体,失败仍返回本地结果。node scripts/test-search.mjs 覆盖这些行为。
0.1.3 持续运行
服务内临时校验按 profile 写入独立原子覆盖层,独立调度是主校验缓存的唯一写入者,避免旧内存快照覆盖调度刚更新的结果。按实际校验时间合并;临时网络失败不降级已有确定结果。AI 整体请求最多30秒,以覆盖当前模型正常响应时间,普通本地搜索仍不调用模型。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
uluckystar/dsh-plugin-market
DSH 插件市场:在设置页浏览 mydsh.dev 插件大全5596 候选 / 3656 有效,分类/AI…
相关插件 · 市场 / 管理
插件精选列表awesome-dsh-plugin/awesome-dsh-plugin
DeepSeek Harness(dsh)插件精选列表
★ 22,225未汉化DSH
73.6
新词雷达zhuyansen/new-term-radar
new-term-radar新词雷达
★ 2,049已汉化MCP
72.8
插件生态导航0xsline/awesome-deepseek-harness
安装 贡献指南 DeepSeek Docs 公开插件目录 Issues
★ 1,188已汉化DSH
72.6
技能注册中心iflytek/skillhub
企业级开源智能体技能注册中心——发布、发现并管理组织内可复用的技能包。
★ 5,370已汉化DSH
71.9
插件市场目录imsai-sh/awesome-deepseek-harness-plugins
面向 DeepSeek Harnessdsh生态的社区插件目录,共收录 13941 个插件含 PR 收录与…
★ 355已汉化DSH
71.8
插件精选清单Anil-matcha/awesome-dsh-plugin
DeepSeek Harnessdsh精选指南——DeepSeek…
★ 1,013已汉化DSH
71.7
这是你的仓库?认领条目