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

插件安装器 DogEgg-alR/dsh-plugin-installer

DeepSeek Harness
DogEgg-alR3 天前有提交已提供中文文档扫描:含敏感能力

在客户端界面内安装、更新并回滚插件

29.9/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add DogEgg-alR/dsh-plugin-installer
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

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

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

验证判据与等级说明 →

可信度证据

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

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

读写/删除本地文件发起外部网络请求
查看扫描证据(共 25 处,展示前 19 条)
  • 读取本地文件
    lib/index.js:68
    const parsed = JSON.parse(await readFile(pendingPath(profileDir), 'utf8'))
  • 写入本地文件
    lib/index.js:83
    await mkdir(join(profileDir, STATE_DIR), { recursive: true })
  • 删除本地文件
    lib/index.js:85
    await rm(file, { force: true })
  • 写入本地文件
    lib/index.js:89
    await writeFile(temp, `${JSON.stringify({ schema: 'dsh-plugin-installer/pending-cleanup/v1', entries }, null, 2)}\n`, 'utf8')
  • 写入本地文件
    lib/index.js:90
    await rename(temp, file)
  • 读取本地文件
    lib/index.js:113
    const manifest = JSON.parse(await readFile(join(profileDir, 'package.json'), 'utf8'))
  • 读取本地文件
    lib/index.js:137
    stats = await lstat(target)
  • 删除本地文件
    lib/index.js:142
    await unlink(target)
  • 删除本地文件
    lib/index.js:146
    await unlink(target)
  • 删除本地文件递归
    lib/index.js:149
    await rm(target, { recursive: true, force: true })
  • 读取本地文件
    lib/index.js:500
    const manifest = JSON.parse(await readFile(file, 'utf8'))
  • 写入本地文件
    lib/index.js:513
    await writeFile(temp, text, 'utf8')
  • 写入本地文件
    lib/index.js:514
    await rename(temp, file)
  • 发起网络请求
    client.js:385
    const response = await fetch(apiUrl(`job?id=${encodeURIComponent(jobId)}`), { cache: 'no-store' })
  • 发起网络请求
    client.js:416
    const response = await fetch(apiUrl('install'), {
  • 发起网络请求
    client.js:563
    const response = await fetch(marketUrl('capabilities'), { cache: 'no-store' })
  • 发起网络请求
    client.js:584
    const response = await fetch(marketUrl(`operations?operationId=${encodeURIComponent(operationId)}`), { cache: 'no-store' })
  • 发起网络请求
    client.js:616
    const response = await fetch(marketUrl('updates/summary'), { cache: 'no-store' })
  • 发起网络请求
    client.js:632
    fetch(marketUrl('updates'), {
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

DSH 插件:在 DeepSeek Harness 客户端界面里直接安装和更新插件

README

由 DeepSeek 最新模型翻译生成
dsh-plugin-installer 在 DeepSeek Harness 客户端界面里直接安装和更新插件的插件。 官方桌面端有个绕不开的限制:profile 由 app 独占,应用运行时 dsh plugin --profile desktop add … 这条命令改不动它(pnpm 锁 + 加载器配置都在进程手里)。于是 GUI 里唯一能装插件的入口就是官方插件页那一个——而它只负责「已安装」和官方来源。 这个插件把安装和更新搬进界面: - 安装:输入包名 / GitHub 仓库 / 本地目录 → 走 profile 自己的 pluginManager 服务安装,和官方插件页同一个实现,所以应用运行中也能装,不会撞锁。 - 更新:一次列出所有已装插件的版本对比,逐行更新,带进度、失败原因和「回滚到更新前」。 更新算法不重写——直接调 dshmarket 的公开更新接口 dsh-market/update-api/v1。
展开完整文档(README 剩余 1 节)
dsh-plugin-installer

在 DeepSeek Harness 客户端界面里直接安装和更新插件的插件。

官方桌面端有个绕不开的限制:profile 由 app 独占,应用运行时 dsh plugin --profile desktop add … 这条命令改不动它(pnpm 锁 + 加载器配置都在进程手里)。于是 GUI 里唯一能装插件的入口就是官方插件页那一个——而它只负责「已安装」和官方来源。

这个插件把安装和更新搬进界面:

- 安装:输入包名 / GitHub 仓库 / 本地目录 → 走 profile 自己的 pluginManager 服务安装,和官方插件页同一个实现,所以应用运行中也能装,不会撞锁。
- 更新:一次列出所有已装插件的版本对比,逐行更新,带进度、失败原因和「回滚到更新前」。
更新算法不重写——直接调 dshmarket 的公开更新接口 dsh-market/update-api/v1。

安装与更新

安装

方式一:普通 profile(dsh web / CLI)
dsh plugin --profile web add github:DogEgg-alR/dsh-plugin-installer

方式二:手动写进 profile
cd ~/.dsh/profiles/web
pnpm add github:DogEgg-alR/dsh-plugin-installer

方式二还需要在 package.json 的 dsh.profile.bundles 里追加 "dsh-plugin-installer" (或在 profile 的 cordis.patch.yml 里插入挂载行),两种方式不要同时用。

官方桌面端(DeepSeek Harness.exe):应用运行时 CLI 改不动 desktop profile,有两条路——

1. 让 DSH 自己装(见下一节),或
2. 完全退出应用 → 在外部终端执行上面方式一、把 web 换成 desktop → 重新打开。

装上后重启一次(新增的 bundle 只在启动时读加载器配置),然后在设置 → 插件 里会多出一个 「安装与更新」 标签页。之后装别的插件就不用再重启了。

让 DeepSeek Harness 帮我装

把下面这段直接粘给 DSH 的对话窗口:

帮我装插件 github:DogEgg-alR/dsh-plugin-installer 。
用 plugin_manager 工具的 install_bundle,target 填绝对路径或 spec;装完把 application 字段告诉我,如果是 restart-required 就提醒我重启客户端。
不要自己改 profile 的 package.json,也不要手跑 pnpm。

装完之后,以后所有插件都能在 设置 → 插件 → 安装与更新 里点出来。

使用

安装

输入任意 pnpm 认的 spec:

| 写法 | 例子 |
| npm 包名 | dsh-whale-widget |
| 指定版本 | dsh-better-sidebar@0.28.2 |
| GitHub 仓库 | github:DogEgg-alR/dsh-plugin-installer、owner/repo |
| 本地目录 | C:\Users\me\dsh-plugins\my-plugin |

点「安装」开始,装完会告诉你结果是「已生效」还是「重启后生效」。
失败时给出可操作的原因(已安装 / 不是插件包 / 依赖歧义已回滚 / 版本不兼容 / pnpm 输出)。

更新

点「检查更新」→ 看到每行的 当前版本 → 最新版本 → 点某一行的「更新」。

更新进行中

进度条跟着市场报告的 phase / percent / downloaded / detail 走:

- 有 percent 时是确定进度条(宽度 320ms 过渡),右侧是百分比;
- 还没报总数时是一条滑动的条,不会假装知道百分比;
- 下面四个阶段 解析依赖 → 下载 → 链接 → 构建 来自 pnpm 的 pnpm:stage 事件,当前阶段加粗、已完成的打勾——长时间停在「下载」时能看出是卡在哪一步,而不是一个空转的圈;
- 头部有 已用 Ns 走秒,卡片底部有一句说明:进度条不会自己跳到 100%。

轮询是 400ms(启动更新后立刻读一次),所以显示最多比真实状态慢不到半秒。真正的耗时在
pnpm 上:它要在整个 profile 里重新解析并落盘,几十秒是常态,这个插件不会、也不该缩短它——
只是把它变成看得见的过程。结束后:

更新完成

- 成功:显示新版本,提示重启,并把这一行从可更新列表里移除;
- 失败:显示稳定失败码的中文解释(版本回退被拒、版本没变、有 agent 在跑、操作忙、超时…);
- 有 agent(也就是你自己在用的对话)正在跑时,市场不让它直接替换插件文件。碰到 AGENTS_RUNNING 会自动改走市场的 busyPolicy: "drain":这次更新被排队,等你手上的对话结束、agent 空闲下来再自动执行,卡片上显示「已排队:等正在运行的对话结束后自动开始」和还在等几个对话;
- 只要市场给了恢复点,就出现「回滚到更新前」;
- RELEASE_TOO_FRESH / VERSION_UNCHANGED 两种情况额外给一个「强制更新」。

更新区需要装 dshmarket。没装时这一块只显示一句提示,不会假装能更新,也不影响上面的安装功能。

卸载

列表里每一行都能「卸载」(两步确认),不用去命令行。麻烦的是最后一类情况:

这个插件正在使用中,桌面端不允许现在移除 / the plugin is in use, and the desktop app 现在不会移除它(bundle-in-use)

这条限制来自 pluginManager.removeBundle():它会先让 HMR 卸载该组合包的条目,卸不掉就直接拒绝,因为不能把文件从正在运行的代码下面抽走。本地目录 / 链接安装的插件几乎必然命中它——代码就在你眼前跑着。

所以这里分三步走,能走通哪一步,结果里就写哪一步:

1. 直接移除;
2. 被拒(bundle-in-use / stop-profile)→ 先停用这个组合包,再移除;
3. 还被拒 → 只把它从 profile 配置里摘掉:dependencies 与 dsh.profile.bundles 各删一条,重启后不再组合。文件留在 node_modules 里不再加载,下次安装会被覆盖/清掉。

第 3 步不需要 pnpm,也不会碰正在运行的进程,随时安全。界面上会明确告诉你走的是哪一步(「已先停用再删除」还是「已从 profile 配置里摘除」),以及是不是要重启才彻底消失。

已安装的插件

走第 3 步时插件会被记进「待清理」队列(<profile>/.dsh-plugin-installer/pending-cleanup.json):

摘除后进入待清理

- 下次宿主启动约 10 秒后自动扫一遍队列,把 node_modules 里的残留删掉——此时进程里已经没有那份代码,删文件是安全的;
- 不想等重启也可以点「立即清理」,POST /dsh-plugin-installer/api/cleanup 立刻执行同一套清理;
- 清理前会再确认一次这个包没有重新出现在 profile 配置里:你要是刚把它装回来,它就自动出队、不会被动到;删失败的条目留在队列里并累加 attempts,下次启动再试。

清理完成

工作原理

- 安装:客户端半调宿主半的 HTTP 桥(POST /dsh-plugin-installer/api/install),宿主半调 ctx.get('pluginManager').installBundle(spec, { requestId })。
pnpm 要跑几十秒,所以 POST 立刻回 202 { jobId },客户端轮询
GET /dsh-plugin-installer/api/job?id= 取结果——避免长连接被代理或应用层掐断。
- 更新:客户端半先 GET /dsh-market/api/v1/capabilities 做特性探测, features.update === true 才启用任何变更按钮(市场 v1 契约要求),然后 POST /updates → 轮询 GET /operations?operationId= → 必要时 POST /rollback。
- 为什么不用命令行:桌面端 profile 归 app 所有,dsh plugin 在应用运行时会等文件锁。
进程内的 pluginManager 才是官方插件页用的那条路。
- 卸载:POST /dsh-plugin-installer/api/remove + 同一条 job 轮询。宿主半按「直接移除 → 停用后再移除 → 从 profile 配置摘除」逐级降级(见上文「卸载」),每一步的结果都回给界面,所以按钮不会卡在一句你无法处理的话上。
- 清理残留:摘除后的包名写进 <profile>/.dsh-plugin-installer/pending-cleanup.json;宿主启动 10 秒后(ctx.effect 管着定时器,插件卸载时一起清掉)扫一遍队列, GET/POST /dsh-plugin-installer/api/cleanup 让界面能看队列、也能立刻触发同一套清理。
删除前会读一遍 profile 配置,确认该包没被重新声明——避免把刚装回来的插件删掉。
- 为什么不自己实现更新:版本校验、release-age 策略、恢复点与回滚都在市场里;重写一遍只会和它打架,所以这里只做转发和展示。

兼容性

- DeepSeek Harness 桌面端 / dsh web,profile 名任意
- 更新功能需要 dshmarket 1.66+(update-api/v1,beta)
- 客户端半只依赖 react(由加载器注入),无其它前端依赖
- 主按钮用固定的蓝色 #2563eb,不跟随主题的 --dsw-alias-brand-primary——桌面端这个 token 是近黑色,用上去按钮会和截图里不一样;其余颜色(边框、成功/失败/警告、次要文字)都走主题 token(--dsw-alias-border-l1、--dsw-alias-state-*、--dsw-alias-label-secondary),亮色/暗色自动适配

目录结构

dsh-plugin-installer/
├─ lib/index.js # 宿主半:安装桥(webServer 路由 + pluginManager) ├─ client.js # 客户端半:plugins.tab 里的「安装与更新」 ├─ cordis.patch.yml # bundle patch:把插件挂进 profile ├─ package.json # dsh.bundle.patch + dsh.client └─ assets/ # README 截图

License

MIT
预览分享卡片长什么样 ↓DogEgg-alR/dsh-plugin-installer
分享 · DeepSeek Harness Hub
DogEgg-alR/dsh-plugin-installer

在客户端界面内安装、更新并回滚插件

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