换机迁移 DSH profile,连插件本身一起:把插件包选择与整个配置层打包成一个 JSON 文件,恢复时写回配置、还原本地插件源码与插件数据,并安装备份里记录、新机器缺失的插件包(优先插件管理器,失败回退 pnpm)。
安装
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:DaJiang07/dsh-plugin-backup
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
一个 DSH 插件:把「你装了哪些插件」和「你把设置调成了什么样」打包成一个 JSON 文件,换电脑后装上本插件、选中那个文件,就能一键恢复。打开打包全部,连本地插件源码和插件数据一起走。
A DSH plugin that packs the plugins you installed and the settings you tuned into one JSON file, so a new computer reaches the same state in one click. The pack everything switch also carries local plugin sources and plugin-owned data.
它保存什么
| 内容 | 来源 |
|---|---|
| 全部设置 + 插件开关 | <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,不会静默丢掉。
恢复做什么
- 先把当前配置存成
$DSH_HOME/plugin-backups/pre-restore-<时间>.json(可以再恢复回来)。 - 写回
cordis.patch.yml;备份里带settings.yaml时一并写回。 - 有
package时:先恢复本地插件源码——原目录还在就写回原处,不在就解到$DSH_HOME/plugin-sources/<包名>并link进 profile;再恢复插件数据,每个数据根目录先整块移到plugin-backups/pre-restore-data-<时间>/再写入新内容。 - 启用备份里记录、但本机还没启用的插件包。
- 备份里有、本机没装的网络插件包不在这里装(安装很慢),而是返回给页面,由页面逐个调用
pluginManager.installBundle()并显示进度。 - 不删除本机多出来的插件包,只在报告里列出来。
界面
设置(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 为本目录绝对路径
链接
同类插件
yjh051108/dsh-routing-suite★ 6991
一个仓库三件套:DSH 插件包的运行时注入器(注入、热重载、卸载、开发侧挂区一键转正、路由自愈,外带设置页插件管理:列出、卸载、拖入文件夹内化)、任务感知的思维模式路由 agent 预设(router-standard / router-spec / router-react)、以及分级两级任务协议(commit_star / lock_stage / revise_do / edit_plan / mark_task / redteam_verdict 六个工具,任务状态落盘)。注入器实现直接在库内,安装的是它自己的行为而不是一份依赖清单。
strukto-ai/mirage#dsh★ 3715
把文件系统与 bash 提供者换成 mirage 虚拟工作区:文件工具与 shell 命令作用于挂载的资源(RAM、S3、Redis、Slack、Gmail、Notion、Postgres)而非宿主磁盘,支持按挂载点设置读/写/执行模式、按命令选择沙箱(进程内 monty、pyodide、quickjs;远程 docker、e2b、daytona),并可在虚拟终端中安装 CLI(git、gh、slack、linear、ntn、gws,或自行注册的程序树)作为命令头词。
first-fluke/oh-my-agent#dsh★ 1352
在工具执行前后以及尝试结束当前轮次时运行项目 OMA 检查。随插件安装 OMA CLI 依赖,并在首次使用时初始化未配置的项目。需要 Node.js 22+;首次初始化需要网络连接和项目目录写入权限。
hust-open-atom-club/oh-dsh★ 323
社区发行版:TUI、桌面端与 Web UI 统一体验,分层安装、一步到位。
MichengAI/dsh-skills-manager★ 294
在设置里管理本地 DSH 技能,并只读查看公共 Agent 技能。
Fishquito7/dsh-skill-mcp-panel★ 223
在 DSH Web 设置中管理技能与 MCP 服务器:技能卡片热启停、工作区作用域、分组、批量迁移与拖拽导入,以及 stdio/HTTP MCP 增删改查、连接测试、密钥脱敏,并附带统一 dsh-panel 命令行。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。