🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

私有插件管理 YINGCHAO-98/dsh-private-plugins

DeepSeek Harnessv1.0.0
YINGCHAO-9866 天前有提交已提供中文文档扫描:含敏感能力

统一导入、启用与更新本地及云端私有插件

28.8/100
综合分
1
GitHub 星标
20
npm 周下载
—/5
用户评分

数据截至 2026/9/18 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-private-plugins
npm 源 · dsh-private-plugins 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么[目录]—
dsh 原生插件 · tool
暂无时间戳·判据 →
装得上吗[实装验证]✓
静态安装检查通过
未做真实安装
L4 · 真实安装等级说明 →
数据截至 2026/10/24·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 66 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-private-plugins @ 1.0.0
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/9/24 11:31:00

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 32 处,展示前 32 条)
  • 读取本地文件
    lib/index.js:64
    readFileSync(new URL('../package.json', import.meta.url), 'utf8')
  • 写入本地文件
    lib/index.js:362
    await mkdir(inbox, { recursive: true })
  • 写入本地文件
    lib/index.js:364
    await writeFile(staged, body)
  • 发起网络请求
    client/client.js:202
    const response = await fetch(path, {
  • 执行外部命令来自配置/变量
    lib/dsh.js:103
    return spawn(
  • 执行外部命令来自配置/变量
    lib/dsh.js:109
    return spawn(fileToSpawn, spawnArgs, { ...spawnOptions, shell: false })
  • 读取本地文件
    lib/dsh.js:147
    return file !== 'dsh' || existsSync(process.env.COMSPEC || '')
  • 读取本地文件
    lib/profile.js:60
    return JSON.parse(readFileSync(path, 'utf8'))
  • 读取本地文件
    lib/profile.js:137
    return statSync(path).isDirectory()
  • 读取本地文件
    lib/repos.js:104
    const parsed = JSON.parse(await readFile(reposFilePath(profileDirectory), 'utf8'))
  • 写入本地文件
    lib/repos.js:114
    await mkdir(dir, { recursive: true })
  • 写入本地文件
    lib/repos.js:116
    await writeFile(temporary, JSON.stringify({ repos }, null, 2), 'utf8')
  • 删除本地文件
    lib/repos.js:117
    await rm(reposFilePath(profileDirectory), { force: true }).catch(() => undefined)
  • 写入本地文件
    lib/repos.js:118
    await writeFile(reposFilePath(profileDirectory), JSON.stringify({ repos }, null, 2), 'utf8')
  • 删除本地文件
    lib/repos.js:119
    await rm(temporary, { force: true }).catch(() => undefined)
  • 读取本地文件
    lib/updates.js:245
    const parsed = JSON.parse(await readFile(updatesFilePath(profileDirectory), 'utf8'))
  • 写入本地文件
    lib/updates.js:264
    await mkdir(dir, { recursive: true })
  • 写入本地文件
    lib/updates.js:267
    await writeFile(temporary, JSON.stringify({ checkedAt, items }, null, 2), 'utf8')
  • 删除本地文件
    lib/updates.js:268
    await rm(file, { force: true }).catch(() => undefined)
  • 写入本地文件
    lib/updates.js:269
    await writeFile(file, JSON.stringify({ checkedAt, items }, null, 2), 'utf8')
  • 删除本地文件
    lib/updates.js:270
    await rm(temporary, { force: true }).catch(() => undefined)
  • 读取本地文件
    lib/updates.js:294
    lockfileText = await readFile(join(profileDirectory, 'pnpm-lock.yaml'), 'utf8')
  • 读取本地文件
    lib/toggle.js:54
    text = readFileSync(patchPath, 'utf8')
  • 读取本地文件
    lib/toggle.js:93
    text = readFileSync(file, 'utf8')
  • 读取本地文件
    lib/toggle.js:164
    text = await readFile(patchPath, 'utf8')
  • 写入本地文件
    lib/toggle.js:170
    await writeFile(patchPath, block)
  • 写入本地文件
    lib/toggle.js:176
    await writeFile(patchPath, `${next}${block}`)
  • 写入本地文件
    lib/toggle.js:185
    await writeFile(patchPath, `${next}${block}`)
  • 写入本地文件
    lib/toggle.js:201
    await writeFile(patchPath, `${next}${block}`)
  • 读取本地文件
    lib/toggle.js:214
    text = await readFile(patchPath, 'utf8')
  • 写入本地文件
    lib/toggle.js:267
    await writeFile(patchPath, final)
  • 执行外部命令固定命令
    lib/validate.js:174
    spawn('taskkill', ['/pid', String(child.pid), '/t', '/f'], { stdio: 'ignore' }).unref()
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-host-webserver
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 导入本地及云端插件
  • 启用私有插件
  • 更新私有插件

在 DeepSeek Harness Web 设置中统一导入、启用、更新和管理本地及云端私有插件。

README

由 DeepSeek 最新模型翻译生成
dsh-private-plugins 私有插件:在 设置 侧栏新增独立的「私有插件」入口(与「插件市场」并列),把 云端 Git 仓库安装插件 与 本地插件导入 放在同一个界面。 社区维护的 DSH Plugin,与 DeepSeek AI 无隶属关系,也不代表 DeepSeek AI 官方。 Listed on dsh-plugin.org 私有插件管理界面 - 导入方式:云端仓库 与 本地文件 分别位于独立卡片——可添加公开/私有 Git 仓库(可选自定义名称)、上传 .tgz / .tar.gz / .tar 压缩包,或选择本地插件文件夹。 - 已安装插件:卡片式管理列表(参考插件市场)——本地导入与云端仓库插件统一在这里展示,每张卡片提供: - 启用 / 停用:写入 profile 的 cordis.patch.yml 补丁层,重启后生效; - 安装:尚未安装的云端仓库可直接安装; - 待更新 / 已更新 / 未知:更新状态显示在对应插件卡片; - 卸载。 - 所有变更通过 dsh plugin --profile add|remove 执行,与 DSH Desktop / dsh-market 同一安装链路;完成后提示重启 Harness 生效(桌面版提供一键重启按钮)。
展开完整文档(README 剩余 1 节)
dsh-private-plugins

私有插件:在 设置 侧栏新增独立的「私有插件」入口(与「插件市场」并列),把 云端 Git 仓库安装插件 与 本地插件导入 放在同一个界面。

社区维护的 DSH Plugin,与 DeepSeek AI 无隶属关系,也不代表 DeepSeek AI 官方。

Listed on dsh-plugin.org

私有插件管理界面

- 导入方式:云端仓库 与 本地文件 分别位于独立卡片——可添加公开/私有 Git 仓库(可选自定义名称)、上传 .tgz / .tar.gz / .tar 压缩包,或选择本地插件文件夹。
- 已安装插件:卡片式管理列表(参考插件市场)——本地导入与云端仓库插件统一在这里展示,每张卡片提供:
- 启用 / 停用:写入 profile 的 cordis.patch.yml 补丁层,重启后生效;
- 安装:尚未安装的云端仓库可直接安装;
- 待更新 / 已更新 / 未知:更新状态显示在对应插件卡片;
- 卸载。
- 所有变更通过 dsh plugin --profile add|remove 执行,与 DSH Desktop / dsh-market 同一安装链路;完成后提示重启 Harness 生效(桌面版提供一键重启按钮)。

安装

一键脚本(推荐)

无需克隆仓库,直接从 GitHub 安装;脚本会识别 Desktop 实际使用的 DSH_HOME、web / desktop profile 和匹配的 pnpm 主版本:

curl -fsSL https://raw.githubusercontent.com/YINGCHAO-98/dsh-private-plugins/main/scripts/install.sh | bash -s -- --remote

已经下载本仓库时,也可以安装当前本地代码:

./dsh-private-plugins/scripts/install.sh # 有多个 profile 时交互选择 ./dsh-private-plugins/scripts/install.sh --all # 装进所有检测到的 profile ./dsh-private-plugins/scripts/install.sh --check # 只打印检测结果 ./dsh-private-plugins/scripts/install.sh --reinstall # 已安装则先移除再重装 ./dsh-private-plugins/scripts/install.sh --home # 指定 DSH_HOME ./dsh-private-plugins/scripts/install.sh --profile # 指定 profile(如 desktop / web)

脚本会自动探测 dsh CLI,并读取 DSH Desktop 实际存在的 profile(例如 desktop 或 web)。它优先使用 Desktop 自带的 pnpm,避免全局 pnpm 主版本不同导致 ERR_PNPM_UNEXPECTED_STORE。也可用 --profile desktop 或 --profile web 显式指定。macOS 上会探测正式版、dev 版和 ~/.dsh;Windows 请用 --home 指定 DSH_HOME。

手动命令

所有用户都可以直接复制下面的命令,从 GitHub 安装本插件(公开仓库无需填写 Token):

仅当已确认 DSH_HOME、profile 和 pnpm 版本匹配时使用
dsh plugin --profile web add "git+https://github.com/YINGCHAO-98/dsh-private-plugins.git"

独立 CLI 使用 ~/.dsh/profiles/desktop 时
dsh plugin --profile desktop add "git+https://github.com/YINGCHAO-98/dsh-private-plugins.git"

在本项目根目录执行:安装当前本地代码(macOS Desktop 开发调试用)
DSH_HOME="$HOME/Library/Application Support/dsh-desktop/harness" \
dsh plugin --profile web add "$PWD"

手动命令要求当前终端已经使用正确的 DSH_HOME 和 pnpm 主版本,因此普通用户应优先使用上面的一键脚本。安装完成后,从菜单 Harness → 重启 Harness,然后打开 设置 → 私有插件 即可使用;安装了 dsh-market 时,该入口紧随「插件市场」。

私有仓库支持

界面支持以下地址写法(添加时自动归一化为 pnpm 的 git spec):

| 输入 | 归一化结果 |
| https://github.com/you/repo | git+https://github.com/you/repo.git |
| git@github.com:you/repo.git | git+ssh://git@github.com/you/repo.git |
| github:you/repo | github:you/repo(原样,pnpm 简写) |
| git+https://… / git+ssh://… | 原样 |
| git+file:///… | 原样(本地 git 仓库,用于测试) |

- 分支/标签:在地址后追加 #分支名(如 git+https://github.com/you/repo.git#main)。
- 私有仓库凭据:安装走本机 git,与你在终端 git clone 使用同一套凭据——SSH key(git@… / git+ssh://)、HTTPS token(https://,配合 credential helper)或全局 git 配置。
- 仓库列表保存在 /.dsh-private-plugins/repos.json,重启后仍在。

更新提醒

打开「私有插件」页面会自动检查由本页管理的插件更新(结果缓存 1 小时,可点「检查更新」强制刷新),有新版时对应插件行直接显示「更新」按钮,点击即更新为最新版本;插件市场安装的项目仅在「插件市场」内显示:

- npm 来源(registry 安装):查询本机配置的 npm registry(npm_config_registry,默认 npmjs.org)的 dist-tags.latest,与已装版本比较。
- git 来源(私有仓库,含 github:owner/repo):对比 pnpm-lock.yaml 里记录的已解析 commit 与 git ls-remote 的远端 HEAD/分支 commit。私有仓库若本机凭据不可用,显示「更新状态未知」,不会误报。
- 本地来源(file: / link:):可识别 Git 工作区;link: 源码目录为实时链接,已直接生效。非 Git 本地来源显示「未知」。
- 更新状态显示在各自插件卡片;更新完成后提示重启 Harness(桌面版可一键重启)。

安全说明

- 所有会改动 profile 的 HTTP 路由只接受 回环 + 同源 请求(isTrustedRequest)。
- 云端安装 spec 有白名单校验(npm 名/github: 源),上传文件名被清洗,路径导入要求绝对路径且拒绝指向 profile 自身。
- 本地安装会执行 pnpm/dsh plugin,属于特权操作:只导入可信来源的插件(插件的 cordis.patch.yml / client.js 会获得与主进程同等的执行权限)。

目录结构

dsh-private-plugins/
├── package.json # dsh.bundle(配置层)+ dsh.client(浏览器端入口) ├── cordis.patch.yml # 把插件行插入配置树 ├── lib/ # 宿主端(Node) │ ├── index.js # apply(ctx) + HTTP 路由 + 操作编排 │ ├── profile.js # profile 解析与已安装清单 │ ├── dsh.js # 重新调用 dsh CLI(超时/进程树清理) │ ├── repos.js # 私有仓库地址归一化/校验 + repos.json 持久化 │ ├── toggle.js # 插件启用/停用(写入 profile 的 cordis.patch.yml 补丁层) │ └── validate.js # spec/文件名/路径校验 + HTTP 工具 ├── client/client.js # 浏览器端 UI(零构建 ModuleLoader 格式) ├── scripts/install.sh # 一键安装/重装脚本(自动探测 profile 与 dsh CLI) └── test/ # node:test 单元测试

开发与测试

node --test test/unit.test.mjs

浏览器端 client.js 是手写的 window.__ModuleLoader__.load({ id, factory }) 格式,无需构建;宿主端为纯 ESM、零运行时依赖。
预览分享卡片长什么样 ↓YINGCHAO-98/dsh-private-plugins
分享 · DeepSeek Harness Hub
YINGCHAO-98/dsh-private-plugins

统一导入、启用与更新本地及云端私有插件

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部