dsh-conf-sync:在设备间导出与导入 DSH 及任意软件配置

前言

在 DeepSeek Harness(DSH)上调试 profile、插件和工具链时,配置往往散落在 $DSH_HOME、~/.dsh、~/.config/dsh 以及编辑器、其他软件的各自目录里。换电脑、重装系统或在局域网内给第二台机器对齐环境时,手工拷贝路径容易漏文件,也难以保留「原绝对路径」与清单对应关系。

下面介绍社区插件 dsh-conf-sync(维护者 6027-gthb):把选定路径打成标准 .tar.gz 快照,经本地文件、局域网 HTTP 或 WebDAV 在设备间迁移;导入时按清单写回原路径,并可选备份已有文件。插件当前版本为 0.1.0,协议 MIT。DSH 生态奉行「一切皆插件」;SkillHub 目录页 为社区收录站点,与 DeepSeek / 幻方无官方从属关系。

这是什么

dsh-conf-sync 是 DSH 上的配置同步插件:按你在 profile 里声明的 targets(glob 路径)收集文件,生成含 dsh-conf-sync-manifest.json 的归档,再经三种传输通道导出或导入。模型也可直接调用 dsh_conf_export、dsh_conf_import 等工具完成操作。

核心功能

三种传输通道

通道 说明 典型场景
local 写入/读取本地 .tar.gz 快照 U 盘、移动硬盘或直接拷贝
http 本机临时 HTTP 服务并输出 URL 同一局域网内两台设备传输
webdav 推送到 / 拉取自 Alist、Nextcloud 等 WebDAV 云盘中转、跨网络

三种通道仅改变快照的搬运方式,归档格式一致,可互通(例如 A 机推到 WebDAV,B 机经 HTTP 拉取后再 local 导入)。

导出与导入行为

  • 导出:按 targets 展开 glob,复制到临时目录并生成 manifest(含原绝对路径映射),再 tar + gzip 打包。
  • 导入:解包后读 manifest,将 files/<i> 写回 originalPath;默认先把已存在文件备份为 <路径>.bak-<时间戳>。tar 拒绝 .. 越界路径。
  • HTTP 管理:dsh_conf_close 可关闭由 channel=http 导出发起的临时服务;卸载插件或退出 DSH 时也会自动关闭。

可扩展的配置目标

默认会覆盖 DSH 自身配置目录;可在配置里追加 VS Code settings.json 等任意路径模式。

安装与启用

前置:Node.js ^22.19.0 || >=24,以及 pnpm(npm install -g pnpm)。从 GitHub 安装会拉源码并由 DSH 执行 prepare/build 编译 lib/;若 pnpm ≥ 10 首次安装拒绝构建脚本,需在 profile 的 pnpm-workspace.yaml 中按报错添加 allowBuilds。安全上建议锁定提交:github:你的用户名/dsh-conf-sync#<完整 commit-sha>。

# ① GitHub 仓库安装(推荐 · 多设备复用,需提交到 GitHub)
dsh plugin --profile web add github:你的用户名/dsh-conf-sync

# ② 本地 tarball 安装(免发布,单机最快)
dsh plugin --profile web add ./dsh-conf-sync-0.1.0.tgz

# ③ 作为 npm 包安装(若已发布)
dsh plugin --profile web add dsh-conf-sync

# 验证已挂载
dsh --profile web --dump-config

在 profile(或 $DSH_HOME/cordis.patch.yml)中为插件装配配置,例如:

- id: dsh-conf-sync
  config:
    targets:
      - name: DeepSeek Harness
        patterns:
          - C:\Users\you\.dsh
          - C:\Users\you\.config\dsh
      - name: VS Code
        patterns:
          - C:\Users\you\AppData\Roaming\Code\User\settings.json
          - C:\Users\you\AppData\Roaming\Code\User\keybindings.json
    outputDir: D:\backups\conf
    httpPort: 3088          # 可省略,0=随机端口
    webdav:
      url: https://alist.example.com/dav/snapshots/
      username: admin
      password: 'your-token'
    noBackup: false         # true 则导入时直接覆盖、不备份

调试时可临时叠加配置,不改动正式 profile:

dsh --profile web --patch ./overlay.yml <任务>

典型用法

导出

# 1) 写成本地文件
dsh_conf_export  channel="local"   output="D:\backups\conf\snap.tar.gz"
dsh_conf_export  channel="local"   # 省略 output,自动生成到 outputDir

# 2) 起局域网 HTTP 服务器,拿到分享 URL
dsh_conf_export  channel="http"    port=0

# 3) 推送到云盘(Alist WebDAV)
dsh_conf_export  channel="webdav"  name="my-machine"

返回结果包含 location、文件数与来源主机名;HTTP 通道会打印分享 URL。

导入

在目标设备上执行;路径由 manifest 中的 originalPath 定位,无需手改归档内路径:

dsh_conf_import  channel="local"   source="D:\backups\conf\snap.tar.gz"
dsh_conf_import  channel="http"    source="http://192.168.1.5:3088/snapshot-xxx.tar.gz"
dsh_conf_import  channel="webdav"  source="my-machine"

# 只恢复匹配的路径(正则,可选)
dsh_conf_import  channel="local"   source="...tar.gz"  pattern="settings.json"
# 覆盖式导入(不做备份)
dsh_conf_import  channel="local"   source="...tar.gz"  backup=false

关闭 HTTP 共享

dsh_conf_close

适用场景与注意

适合谁:需要在多台机器间对齐 DSH profile 与插件配置、或一并备份编辑器与其他软件配置文件的开发者;希望用局域网秒传或私有 WebDAV 中转、而不是公开网盘明文传播的用户。

路径对齐:导入写回的是导出时的绝对路径。两台机器目录布局不同时,需事先保证目标路径存在,或自行规划映射;README 未提供自动重映射。

WebDAV:目标目录须可写;Alist 需开启 WebDAV 且目录已创建。

权限与安全:插件以当前 dsh 进程权限 读写文件;安装前请阅读 GitHub 源码 与 MIT 许可证。快照为明文 .tar.gz,若含令牌应走私有 WebDAV 或局域网,勿经不可信公网。DSH 处于 Developer Preview,接口可能变更,以 dsh --dump-config 实际输出为准。

结尾

dsh-conf-sync 把「配置收集 → 标准快照 → 多通道搬运 → 按 manifest 回写」收成一组 DSH 工具,适合多设备 DSH 环境与混合软件配置的迁移与备份。

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

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

Xiaoye