dsh-migrate:DSH 配置迁移工具

前言

DSH 环境里,一个 profile 通常不只包含 profile 配置,还可能包含 settings.yaml.agent-presetsvendor/ link 目录等内容。换机时如果只手工复制目录,容易遗漏 link 映射、vendor 包和 settings 配置;如果直接导入,又缺少版本校验、备份和失败回滚。

下面介绍 dsh-migrate。它把 DSH 配置迁移整理成固定流程:源机导出打包,目标机导入还原,中间做预检、备份、校验,失败时回滚。

这是什么

dsh-migrate 是一个 DSH 配置迁移工具,定位是:

DSH 配置迁移工具:导出/打包 → 换机还原 → 校验 + 回滚。

它由 ygcdsj 维护,GitHub 仓库为 ygcdsj/dsh-home-migrate,包名为 dsh-migrate,许可证为 MIT。package.json 显示版本为 0.0.11,README 标注为 experimental。

它主要解决同 OS 环境下的 DSH 配置迁移问题,覆盖 profile 配置、settings.yaml.agent-presetsvendor/ link 目录。MVP 限定同 OS;跨 OS 会在预检阶段明确拒绝。

核心功能

导出

导出阶段会扫描 ~/.dsh,范围包括:

  • profiles 配置
  • settings.yaml
  • .agent-presets
  • vendor/ link 目录

settingspresets 会做字段级凭据扫描和脱敏,处理明细会进入 manifest 的 secretReport

vendor 包配置文件内的疑似凭据会原地脱敏。迁移后的 vendor 包如果依赖被脱敏的值,例如 API token,需要在目标机重新配置。

打包

导出产物是一个单一 .dshmig 文件,本质是 zip 包。

它内置 manifest,包含:

  • 版本
  • 平台
  • 文件清单
  • sha256 校验和
  • link 映射

导入

导入阶段会先做预检,再执行还原。预检检查:

  • 同 OS
  • dsh 版本
  • 磁盘空间

导入不会直接覆盖现有 profile,而是默认新建 profile,名称形如:

<name>-migrated

如果目标机已存在同名 profile,会自动递增。

还原顺序为:

  1. link: 路径重算
  2. vendor / presets / settings 还原
  3. pnpm install
  4. 验证链
  5. 失败自动回滚

验证链包括链接解析和 dsh --dump-config

入口

dsh-migrate 提供两类入口:

  • 设置页「迁移」入口,包含导出向导和导入向导
  • host 工具 dsh_migrate_exportdsh_migrate_import,可被 agent 直接调用

安装与启用

已核实的安装示例如下,针对 web profile:

# 在 profile 目录内执行
dsh plugin --profile web add dsh-migrate

包信息显示如下:

version: 0.0.11
license: MIT
peerDependencies:
  @deepseek-ai/dsh-client-ui-slots: ^0.1.1-rc.2
  cordis: >=4.0.0-rc <5

0.0.9 起,迁移包会带 dsh-migrate 自己。历史版本 ≤0.0.8 不带,目标机需要手动安装。

典型用法

设置页导出

在源机执行:

  1. 进入设置 → 迁移
  2. 预览导出内容,包括文件清单、大小、排除项、疑似凭据
  3. 执行导出

导出产物位于:

~/dsh-migrate-exports/*.dshmig

目标机导入

在目标机执行:

  1. 进入设置 → 迁移
  2. 输入 .dshmig 路径
  3. 查看预检结果,逐项确认
  4. 确认步骤清单
  5. 执行导入
  6. 查看验证链结果与备份目录

导入完成后,迁移结果在新建的 <name>-migrated profile 中。

启动迁移后的 profile

如果迁移的是 web profile,已核实的启动示例为:

dsh --profile web-migrated

host 工具

导出预览:

dsh_migrate_export { dryRun: true }

执行打包:

dsh_migrate_export { dryRun: false, outDir }

导入预检:

dsh_migrate_import { archive, dryRun: true }

执行导入:

dsh_migrate_import { archive }

导入失败时会自动回滚。

开发与测试

已核实的本地测试命令:

npm test
npm run test:install

适用场景与注意

dsh-migrate 适合在同 OS 的 DSH 环境之间迁移 profile 配置,尤其是希望有预检、备份、校验和回滚的场景。

使用时需要注意:

  • README 标注 experimental。
  • MVP 限定同 OS;跨 OS 会在预检阶段明确拒绝。
  • 导入会执行归档中的代码,包括 pnpm install 安装脚本、bundle 插件解析,之后启动 profile 还会执行其中插件。仅导入信任来源。
  • 凭据排除和脱敏是尽力而为,不是绝对保证。导出报告会列出 unscannedFiles,传输前请核对。
  • vendor 包配置文件内的凭据会原地脱敏。迁移后的 vendor 包若依赖被脱敏的值,需要在目标机重新配置。
  • settings.yaml 为符号链接时拒绝覆盖。
  • HTTP API 仅本机回环,并有 Host 白名单、CSRF token、Origin 同源、Sec-Fetch-Site 校验。将 DSH web 暴露到局域网会扩大导入风险,因为任何可访问者可能导入归档。
  • git: 依赖不打包,目标机 pnpm install 时重新拉取,需要网络和凭据。
  • dsh-migrate 会运行在当前 dsh 进程权限下,安装前应检查源码与 MIT 许可证。

结尾

dsh-migrate 的价值不在于简单复制目录,而在于把 DSH 配置迁移整理成可预览、可校验、可回滚的流程。对于需要同 OS 换机、还原 DSH profile 配置的场景,它提供了一条相对保守的路线。

目录页:在 DSH 社区目录中检索 dsh-migrate;社区目录是独立站点,与 DeepSeek / 幻方无官方从属关系。

GitHub:https://github.com/ygcdsj/dsh-home-migrate

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜