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

插件备份迁移 DaJiang07/dsh-plugin-backup

DeepSeek Harness
DaJiang0714 天前有提交已提供中文文档扫描:高危

把插件与设置打包成单个文件,换机一键恢复

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

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

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

状态速览

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

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

验证判据与等级说明 →

可信度证据

🔴 安全扫描发现高危能力自动 · 静态分析源码
v2.7.0
🔴 扫描:高危尚无人工评估

静态扫描发现安装期即执行代码,或命令参数由运行时变量拼接(参数来源无法静态判定,从严处理)。

命令参数由运行时变量拼接读写/删除本地文件发起外部网络请求
查看扫描证据(共 36 处,展示前 17 条)
  • 读取本地文件
    index.js:134
    if (existsSync(join(candidate, 'package.json'))) return resolve(candidate)
  • 读取本地文件
    index.js:142
    return await readFile(path, 'utf8')
  • 写入本地文件
    index.js:169
    await mkdir(dirname(path), { recursive: true })
  • 写入本地文件
    index.js:171
    await writeFile(temporary, content)
  • 写入本地文件
    index.js:173
    await rename(temporary, path)
  • 删除本地文件
    index.js:175
    await rm(temporary, { force: true })
  • 读取本地文件
    index.js:188
    return existsSync(path) ? statSync(path).size : 0
  • 读取本地文件
    index.js:188
    return existsSync(path) ? statSync(path).size : 0
  • 读取本地文件
    index.js:240
    return existsSync(join(packageDirectory(directory, name), 'package.json'))
  • 读取本地文件
    index.js:246
    return JSON.parse(readFileSync(new URL('./package.json', import.meta.url), 'utf8'))?.name ?? null
  • 执行外部命令来自配置/变量
    index.js:299
    child = spawn(packageManager.command, [...prefix, ...args], options)
  • 执行外部命令表达式求值
    index.js:307
    child = spawn(['pnpm', ...args].join(' '), { ...options, shell: true })
  • 执行外部命令固定命令
    index.js:309
    child = spawn('pnpm', args, options)
  • 写入本地文件
    index.js:759
    await mkdir(options.safetyDir, { recursive: true })
  • 写入本地文件
    index.js:760
    await rename(target, destination)
  • 删除本地文件
    index.js:1121
    await rm(join(directory, row.name), { force: true }).catch(() => undefined)
  • 发起网络请求
    client.js:245
    const response = await fetch(BASE + path, init)
扫描于 2026/11/4(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

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

把每个 DSH 插件和所有配置档设置备份到一个可移植的 JSON 文件,再在另一台机器上一键恢复。

README

由 DeepSeek 最新模型翻译生成
插件与设置备份 一个 DSH 插件:把「你装了哪些插件」和「你把设置调成了什么样」打包成一个 JSON 文件。换电脑后装上本插件、选中那个文件,就能一键恢复。打开打包全部,连本地插件源码和插件数据一起走。 它保存什么 | 内容 | 来源 | | 全部设置 + 插件开关 | <profile>/cordis.patch.yml(配置层,原样保存) | | 插件包选择与版本 | <profile>/package.json 的 dsh.profile.bundles 与 dependencies | | 用户设置文档(可选) | $DSH_HOME/settings.yaml | | 插件清单(诊断用) | ctx.pluginManager.listPlugins() / listBundles() | 打开「打包全部」后额外带上: | 组 | 内容 | | plugin-source | package.json 里 link: / file: / 绝对路径依赖的整个目录(本地插件的源码,跳过 node_modules、.git 等) | | home-data | $DSH_HOME 下插件自己的状态:settings.yaml、dream-skin.json、dsh-market、dshm、engram、synapse、storages、data、skills |
展开完整文档(README 剩余 1 节)
插件与设置备份

一个 DSH 插件:把「你装了哪些插件」和「你把设置调成了什么样」打包成一个 JSON 文件。换电脑后装上本插件、选中那个文件,就能一键恢复。打开打包全部,连本地插件源码和插件数据一起走。

它保存什么

| 内容 | 来源 |
| 全部设置 + 插件开关 | <profile>/cordis.patch.yml(配置层,原样保存) |
| 插件包选择与版本 | <profile>/package.json 的 dsh.profile.bundles 与 dependencies |
| 用户设置文档(可选) | $DSH_HOME/settings.yaml |
| 插件清单(诊断用) | ctx.pluginManager.listPlugins() / listBundles() |

打开「打包全部」后额外带上:

| 组 | 内容 |
| plugin-source | package.json 里 link: / file: / 绝对路径依赖的整个目录(本地插件的源码,跳过 node_modules、.git 等) |
| home-data | $DSH_HOME 下插件自己的状态:settings.yaml、dream-skin.json、dsh-market、dshm、engram、synapse、storages、data、skills |
| profile-data | profile 目录里的插件状态:.dsh-market |

永不打包:.credentials.yaml、sessions、attachments、profiles、plugin-backups、node_modules、.git。

单文件上限 8 MiB,整包上限 96 MiB;超出的文件会写进报告的 skipped,不会静默丢掉。

恢复做什么

1. 先把当前配置存成 $DSH_HOME/plugin-backups/pre-restore-<时间>.json(可以再恢复回来)。
2. 写回 cordis.patch.yml;备份里带 settings.yaml 时一并写回。
3. 有 package 时:先恢复本地插件源码——原目录还在就写回原处,不在就解到 $DSH_HOME/plugin-sources/<包名> 并 link 进 profile;再恢复插件数据,每个数据根目录先整块移到 plugin-backups/pre-restore-data-<时间>/ 再写入新内容。
4. 启用备份里记录、但本机还没启用的插件包。
5. 备份里有、本机没装的网络插件包不在这里装(安装很慢),而是返回给页面,由页面逐个调用 pluginManager.installBundle() 并显示进度。
6. 不删除本机多出来的插件包,只在报告里列出来。

界面

设置(Settings)→「备份与恢复」:

- 备份(勾选「打包全部」)并下载,同时存一份到 $DSH_HOME/plugin-backups/。
- 从文件恢复(≤ 40 MiB 走浏览器上传)。
- 按路径恢复:Host 直接读硬盘上的文件,多大的全量备份都能恢复。
- 本机备份列表(标出「恢复前存档」和「全量」),点一下即可恢复。

接口

Host 端只注册一条需要登录的 Web 路由 /dsh-plugin-backup(复用 ctx.connection 的 Host/Origin 与浏览器登录校验):

| 方法 | 路径 | 作用 |
| GET | /status | 当前 profile、文件大小、插件统计、可打包根目录、本机备份列表 |
| GET | /export?full=1 | 生成快照(full=1 带 package),同时存一份到 $DSH_HOME/plugin-backups/ |
| POST | /restore | 应用快照({ snapshot },body ≤ 64 MiB) |
| POST | /restore-path | 按路径应用备份({ path },≤ 256 MiB) |
| POST | /restore-local | 应用本机备份({ file }) |
| POST | /install | 装一个缺失的网络插件包({ spec }) |

快照带 format: "dsh-plugin-backup"、version: 2;version: 1(只有配置、没有 package)的旧备份照样能恢复。

已知限制

- 备份里不含凭据(API Key、登录状态)和对话记录,换机器后需要重新登录/填 Key。
- 插件代码本身不随备份走,除非打开「打包全部」——而且只覆盖 link:/file: 的本地插件;registry 包恢复时按版本重装。
- 页面按根路径请求 /dsh-plugin-backup;如果把 DSH 挂在反向代理的子路径下,需要相应调整 client.js 里的 BASE。
- 恢复只做「加」不做「减」:本机多出来、备份里没有的插件包会保留并列在报告里。
- 需要安装脚本的包不会自动批准,要在「插件」页面手动同意。
- 数据根目录是被整块替换的:恢复完成后它们的内容就等于备份里的那一刻,恢复后新产生的状态不会合并进来(旧内容在 pre-restore-data-* 里)。

安装

在 DSH 里,把本目录作为本地 bundle 安装: plugin_manager install_bundle,target 为本目录绝对路径
预览分享卡片长什么样 ↓DaJiang07/dsh-plugin-backup
分享 · DeepSeek Harness Hub
DaJiang07/dsh-plugin-backup

把插件与设置打包成单个文件,换机一键恢复

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