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

插件热插拔引擎 AnothetLoice/dsh-hotplug-engine

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

为插件提供安装、启停、回滚与审计服务

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

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

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

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么
dsh 原生插件 · market
装得上吗
实装验证未通过(dependency_conflict),装前请到仓库确认最近更新与 issue
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 72 天前
档位由哪些信号合成

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

验证判据与等级说明 →
⚠︎ 实装验证未通过(dependency_conflict · 2026/10/11) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

可执行外部命令读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 47 处,展示前 38 条)
  • 发起网络请求
    src/client/api.ts:65
    const res = await fetch(`${API_BASE}${path}`, body === undefined
  • 写入本地文件
    src/host/audit.ts:23
    mkdirSync(this.dir, { recursive: true })
  • 写入本地文件
    src/host/audit.ts:25
    appendFileSync(join(this.dir, `${day}.jsonl`), JSON.stringify(record) + '\n', 'utf8')
  • 读取本地文件
    src/host/audit.ts:37
    if (!existsSync(this.dir)) return records
  • 读取本地文件
    src/host/audit.ts:40
    for (const line of readFileSync(file, 'utf8').split('\n')) {
  • 读取本地文件
    src/host/audit.ts:61
    return readdirSync(dir)
  • 读取本地文件
    src/host/backup.ts:33
    return hash12(readFileSync(path, 'utf8'))
  • 写入本地文件
    src/host/backup.ts:86
    mkdirSync(dir, { recursive: true })
  • 读取本地文件
    src/host/backup.ts:89
    const patchContent = existsSync(patchPath) ? readFileSync(patchPath, 'utf8') : ''
  • 读取本地文件
    src/host/backup.ts:89
    const patchContent = existsSync(patchPath) ? readFileSync(patchPath, 'utf8') : ''
  • 读取本地文件
    src/host/backup.ts:90
    const manifestContent = existsSync(manifestPath) ? readFileSync(manifestPath, 'utf8') : ''
  • 读取本地文件
    src/host/backup.ts:90
    const manifestContent = existsSync(manifestPath) ? readFileSync(manifestPath, 'utf8') : ''
  • 写入本地文件
    src/host/backup.ts:103
    writeFileSync(handle.patchBackup, patchContent, 'utf8')
  • 写入本地文件
    src/host/backup.ts:104
    writeFileSync(handle.manifestBackup, manifestContent, 'utf8')
  • 删除本地文件
    src/host/backup.ts:127
    unlinkSync(sidecarPath(backupDir(dshHomePath), operationId))
  • 读取本地文件
    src/host/backup.ts:141
    if (!existsSync(path)) return undefined
  • 写入本地文件
    src/host/backup.ts:150
    writeFileSync(sidecarPath(dir, handle.operationId), JSON.stringify(handle, null, 2) + '\n', 'utf8')
  • 读取本地文件
    src/host/installer.ts:96
    if (existsSync(candidate)) push(candidate)
  • 执行外部命令来自配置/变量
    src/host/installer.ts:139
    const child = spawn(isWinCmd ? 'cmd.exe' : commandPath, spawnArgs, spawnOptions)
  • 读取本地文件
    src/host/installer.ts:198
    const manifest = JSON.parse(readFileSync(join(pkgDir, 'package.json'), 'utf8')) as {
  • 读取本地文件
    src/host/manifest.ts:96
    if (!existsSync(path)) return {}
  • 读取本地文件
    src/host/manifest.ts:98
    return JSON.parse(readFileSync(path, 'utf8')) as ProfileManifest
  • 读取本地文件
    src/host/manifest.ts:114
    if (!existsSync(path)) return ''
  • 读取本地文件
    src/host/manifest.ts:116
    return readFileSync(path, 'utf8')
  • 写入本地文件
    src/host/manifest.ts:143
    writeFileSync(tmp, content, 'utf8')
  • 写入本地文件
    src/host/manifest.ts:145
    renameSync(tmp, path)
  • 删除本地文件
    src/host/manifest.ts:147
    rmSync(tmp, { force: true })
  • 写入本地文件
    src/host/patch.ts:661
    writeFileSync(tmp, content, 'utf8')
  • 写入本地文件
    src/host/patch.ts:665
    renameSync(tmp, patchPath)
  • 删除本地文件
    src/host/patch.ts:676
    rmSync(tmp, { force: true })
  • 读取本地文件
    src/host/patch.ts:679
    const readBack = readFileSync(patchPath, 'utf8')
  • 读取本地文件
    src/host/service.ts:953
    if (!existsSync(dir)) {
  • 读取本地文件
    src/host/service.ts:1004
    if (existsSync(backupRoot)) {
  • 读取本地文件
    src/host/service.ts:1010
    for (const file of readdirSync(backupRoot).filter(f => f.endsWith('.json'))) {
  • 读取本地文件
    src/host/service.ts:1012
    const sidecar = JSON.parse(readFileSync(join(backupRoot, file), 'utf8')) as BackupHandle
  • 读取本地文件
    src/host/service.ts:1054
    const pkg = JSON.parse(readFileSync(join(dir, 'node_modules', name, 'package.json'), 'utf8')) as { version?: unknown }
  • 读取本地文件
    src/host/service.ts:1065
    return statSync(join(dir, 'node_modules', name, 'package.json')).mtime.toISOString()
  • 读取密钥环境变量
    src/index.ts:50
    const restToken = process.env.DSH_HOTPLUG_REST_TOKEN
扫描于 2026/11/3(0 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库

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

依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery@deepseek-ai/cordis@deepseek-ai/cordis-plugin-loader@deepseek-ai/dsh-host-webserver@deepseek-ai/dsh-tools@deepseek-ai/dsh-client-runtime@deepseek-ai/dsh-client-connection@deepseek-ai/dsh-client-ui-settings@deepseek-ai/dsh-client-locale
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 插件安装
  • 插件回滚
  • 插件审计

为 DSH 提供插件安装、回滚和审计服务。

README

由 DeepSeek 最新模型翻译生成
dsh-hotplug-engine 给 DSH 做插件管理的服务插件。市场、agent、其他插件都能调用:安装、卸载、启停、回滚、审计,一条链路。 做什么 DSH 用 cordis.patch.yml 和 loader 管理插件。这个插件把这套操作包成服务:改 patch、调 pnpm、装后健康确认、失败自动回滚、全程审计。只动文件和命令,不碰内核。 不做什么 - 不是市场:没有目录、搜索、榜单、推荐。spec(装什么、从哪装)由调用方给,引擎不猜。 - 不改官方机制:HMR、loader、patch 语义都是官方的,只消费,不重写。 - 不另存状态:以官方组合树为唯一真源,引擎只投影和差分。 - 不带安装界面:UI 只有最小管理面板(查看、启停、回滚、审计),没有 spec 输入。
展开完整文档(README 剩余 1 节)
dsh-hotplug-engine

给 DSH 做插件管理的服务插件。市场、agent、其他插件都能调用:安装、卸载、启停、回滚、审计,一条链路。

做什么

DSH 用 cordis.patch.yml 和 loader 管理插件。这个插件把这套操作包成服务:改 patch、调 pnpm、装后健康确认、失败自动回滚、全程审计。只动文件和命令,不碰内核。

不做什么

- 不是市场:没有目录、搜索、榜单、推荐。spec(装什么、从哪装)由调用方给,引擎不猜。
- 不改官方机制:HMR、loader、patch 语义都是官方的,只消费,不重写。
- 不另存状态:以官方组合树为唯一真源,引擎只投影和差分。
- 不带安装界面:UI 只有最小管理面板(查看、启停、回滚、审计),没有 spec 输入。

接入方式

| 场景 | 入口 |
| 市场 / 插件管理界面 | 注入 hotplugEngine 服务,或调 REST |
| agent 会话 | hotplug_* 工具 |
| 宿主插件 | 注入 hotplugEngine |

安装

pnpm --dir <profile-dir> add dsh-hotplug-engine
或 dsh plugin add dsh-hotplug-engine

bundle 包:装/卸后重启 profile;新客户端面板刷新页面加载。

启停

- 引擎改 profile 的 cordis.patch.yml,loader 反射后即时生效(mode:'hot');未反射则提示重启。
- patch 行(用户写的或引擎写的)都能启停,流式/块式 YAML 都能改。
- DSH 默认禁用的行(在 bundle 层,没有引擎可改的 patch 行)改不了:UI 显示 🔒「默认禁用」,点击只浮提示,API 返回 HOTPLUG.PATCH.DEFAULT_DISABLED。

DSH 版本

- 目标 0.1.1-rc.2(current),带版本支持矩阵(supportReport())。
- dshPath 显式配置才走官方 dsh plugin CLI,否则 pnpm 直装。
- 0.1.0-rc.6 为 legacy,不再作为验收目标。

上手

- 宿主注入:inject: ['hotplugEngine'],调 ctx.hotplugEngine 的 install / rollback / enable 等方法,Promise resolve 即操作完成。
- REST:前缀 /api/dsh-hotplug,同源。写:install / uninstall / enable / disable / rollback;读:snapshot / status / audit / operations / events(SSE)。
- 工具:hotplug_status / hotplug_install / hotplug_uninstall / hotplug_toggle / hotplug_rollback / hotplug_audit,写工具走审批。

完整契约见 docs/01-contract.md。

Changelog

0.2.0
- 补 DSH 0.1.1-rc.2 支持。
- DshProfileAdapter:显式 dshPath 才走官方 dsh plugin,否则 pnpm 回退。
- patch 写层结构化,流式/块式行都能启停;webServer 就绪后自动挂 REST。
- 新增 DSH 默认禁用门禁:UI 🔒 徽标 + 内联提示,API 返回 HOTPLUG.PATCH.DEFAULT_DISABLED。
- 客户端面板卡片化(紧凑 + 折叠),深浅色自适应。

License

MIT
预览分享卡片长什么样 ↓AnothetLoice/dsh-hotplug-engine
分享 · DeepSeek Harness Hub
AnothetLoice/dsh-hotplug-engine

为插件提供安装、启停、回滚与审计服务

这是你的仓库?认领条目

回到顶部