dsh-profile-sync:插件迁移工具

在 DeepSeek Harness(DSH)中,不同 profile(如网页版 web 和桌面版 desktop)的插件配置往往不一致。手动复制文件容易出错,比如漏掉 allowBuilds 导致原生构建静默失败,或者发生端口冲突。dsh-profile-sync 是一个插件迁移工具,默认将网页版的插件集安全牵引到桌面版。

它自己不装任何东西,只做四件事:算差异、预检、写一个「退出后执行的脚本」、下次启动后核对是否真的落地。真正的安装交给官方通道(桌面端走应用内管理器,其它 profile 走 dsh plugin)。

核心功能

  • 算差异:对比源和目标的插件列表,识别新增、变更、仅钉法不同等情况。
  • 预检:在安装前检查潜在的阻碍项,包括 entry-id 撞车、可加载入口、声明完整性、引擎范围、git 源条件等。
  • 生成脚本与核对:生成退出后执行的脚本,并在重启后核对实际落地情况。
  • 面板交互:左侧栏增加「插件迁移」面板,支持勾选要迁移的插件,生成执行脚本或当场应用。
  • Agent 工具:提供 profile_sync 工具给 agent 使用,支持 plan / write / status 等操作。

安装与启用

安装过程不依赖 Node.js 运行插件本身,而是通过 install.cmd 将插件注册到 DSH 中。

  1. 打开 DeepSeek Harness(正在运行就对了)。
  2. 双击 install.cmd。
  3. 刷新页面 —— 左侧栏出现「插件迁移」面板。

install.cmd 会先执行自检(清单不变式 + 真加载),确认官方的 /api/plugin-manager 端点可用后,再把本插件装进 profile。桌面端必须保持运行,因为它要调用应用内的官方管理器。

使用方式

双击操作

  • install.cmd:执行装前自检 + 把本插件装进 profile。
  • sync-plan.cmd:算差异并生成计划 + 生成 apply.cmd。

命令行

需要 Node.js 20+ 在 PATH 上。

# 算差异并落成产物(plans/<时间>/plan.json + plan.txt + apply.cmd)
node bin/plan-cli.mjs plan --source web --target desktop --write

# 只看报告
node bin/plan-cli.mjs plan

# 核对上一次迁移是否真的落地
node bin/plan-cli.mjs status

# 应用计划(会先查目标端是否还在运行)
node bin/apply.mjs --plan "<plans/.../plan.json>"

# 只算不写,看看会改什么
node bin/apply.mjs --plan "<...>" --dry-run

# 退回最近一次快照
node bin/apply.mjs --rollback

# 装前自检(清单不变式 + 真加载)
node bin/check.mjs

面板操作

在左侧栏「插件迁移」面板中:
1. 选择源/目标。
2. 算差异,勾选要迁的插件。
3. 点击「生成执行脚本」或「应用」。
4. 核对上次迁移结果。

预检机制

装之前会查六件事。官方 dsh plugin add 不查第 2、3 条,所以必须由本插件拦截:

  1. 本机路径型 spec:link: / file: 指的路径是否存在。
  2. cordis entry id 撞车:两个 bundle 插入同一个 loader entry id 时,cordis 会拒绝启动整棵树。只统计 insert: 块里的 id。
  3. 没有可加载入口的包:源码签出没有 lib/ 的包被提升进 bundle 层,会导致启动失败。
  4. 声明了 dsh.bundle.patch 吗:进了 bundles 列表却没声明的包,官方只会当普通依赖装,不会成为 profile 层。
  5. 引擎范围:正确处理预发布号(如 0.2.0-rc.2)。
  6. git 源条件:只提醒,不阻断。git ls-remote 成功不代表 pnpm 能连,机制不同,给出 tarball 替代写法。

注意事项

  • 桌面端 profile 禁止用 CLI 改:这是硬拦,@deepseek-ai/dsh/lib/bin.js 里有一条按名字拦住一切 CLI 调用的守卫。本插件在桌面端只调用官方管理器。
  • cordis.patch.yml 不同步:里面装的是实例配置(端口、坐标、Tailscale 地址),不同步是为了避免端口冲突。
  • 钉法不同 ≠ 版本变更:有些 profile 钉成精确号,有些用范围号。本插件单独归一类 repin,只报告、默认不动。
  • 版本倒退只提醒:计划里出现 version-downgrade 提醒,官方管理器会拒绝并回滚,插件提前说出来是为了避免无效操作。
  • allowBuilds 语义保留:显式写 false 是有意关掉构建脚本。同步时沿用源侧的值,不会一律写 true,也不会把 false 翻成 true。
  • 不装插件也能先看效果:bin/plan-cli.mjs 完全独立,不依赖 DSH 在跑。

总结

dsh-profile-sync 通过差异计算、严格的预检和脚本生成,解决了 DSH profile 间插件迁移容易出错的问题。它依赖官方通道执行安装,并确保 cordis.patch.yml 等实例配置不被错误同步,适合需要在 web 和 desktop profile 间同步插件集的开发者使用。

GitHub | 目录页

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

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

小夜