feat(portable): 便携模式支持迁移回本机——双向迁移闭环

migrate_to_portable 的反向:便携模式下面板设置新增「迁移回本机」。

- 语义:以 U 盘数据为准,本机已有 OpenClaw / Hermes 数据先整体改名
  备份(.backup-时间戳,rename 即时完成;空目录直接复用不备份),
  再全新复制,避免新旧数据合并出难排查的混合状态
- 覆盖:OpenClaw 数据目录(含模型渠道、创作中心数据)、Hermes 数据
  目录、面板配置(与正向迁移同理清洗指向 U 盘的绝对路径字段)
- 不迁移引擎与运行时(本机按常规方式安装),报告卡片明示备份位置
  与下一步操作;重叠路径防呆;确认弹窗列出影响清单
- Web 模式明确拒绝并提示用桌面端;i18n 简/繁/英

测试:migrate_to_local_impl 备份/复制/清洗/重叠拒绝 2 个单元测试;
cargo test --lib 316 通过,node --test 428 通过,clippy/fmt 干净。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
晴天
2026-07-05 22:20:26 -07:00
parent bfc46841fa
commit b65296a489
8 changed files with 279 additions and 1 deletions

View File

@@ -8784,7 +8784,7 @@ const ALWAYS_LOCAL = new Set([
'cancel_media_job', 'list_media_jobs', 'delete_media_job',
'reveal_media_asset', 'reveal_media_output_dir', 'load_media_asset',
// 便携模式是本进程属性,不能代理到远程实例
'get_portable_status', 'migrate_to_portable',
'get_portable_status', 'migrate_to_portable', 'migrate_to_local',
])
// === 工具函数 ===
@@ -13585,6 +13585,10 @@ const handlers = {
throw new Error('Web 模式不支持迁移为便携式,请使用桌面客户端执行')
},
migrate_to_local() {
throw new Error('Web 模式不支持便携迁移,请使用桌面客户端执行')
},
get_openclaw_dir() {
const panelConfig = readPanelConfig()
const info = applyOpenclawPathConfig(panelConfig)