Skip to content

支持TenBox Agent 数据迁移、备份和诊断工具(Agent急救箱)#132

Open
luoyuctl wants to merge 37 commits into
78:mainfrom
luoyuctl:codex/issue-128-agent-health
Open

支持TenBox Agent 数据迁移、备份和诊断工具(Agent急救箱)#132
luoyuctl wants to merge 37 commits into
78:mainfrom
luoyuctl:codex/issue-128-agent-health

Conversation

@luoyuctl
Copy link
Copy Markdown
Contributor

@luoyuctl luoyuctl commented May 10, 2026

Closes #126
Closes #127
Closes #128
Closes #134

变更内容

  • 新增 TenBox 桌面端 Agent 急救箱,不修改 rootfs / 镜像,也不要求镜像预置 tenbox-agent-* 脚本。
  • macOS:通过 qemu guest agent guest-exec 执行 guest 内命令;保留 console marker 历史 fallback,并修复大段 console 输入溢出问题。
  • Windows:补齐 Manager 侧 guest-exec 请求/响应通道、runtime-only shared folder 更新、AgentToolsService C++ 实现和 Win32「Agent 急救箱」对话框。
  • 支持 Hermes / OpenClaw Agent profile 迁移包导出 / 导入,包格式记录在 docs/agent-profile.md,包含 manifest、export_scope,并拒绝跨 Agent 导入。
  • 支持宿主侧 Agent 数据保护:立即备份、恢复最新备份、打开备份目录、定时自动备份、保留数量轮转。
  • 支持 Agent 一键诊断与受控修复:健康状态、重启服务、模型连接测试、重置模型配置、导出诊断包;修复前会先创建宿主侧备份。
  • 支持 OpenClaw 到 Hermes 自动迁移:先备份目标 Hermes,再导出来源 OpenClaw 完整用户状态,调用官方 hermes claw migrate dry-run 和正式迁移;不在 TenBox 内重写迁移映射。
  • OpenClaw 到 Hermes 迁移支持 --migrate-secrets、技能冲突策略(skip / overwrite / rename)、--workspace-target,并保存 dry-run / 正式迁移报告到宿主机备份目录。
  • 修复迁移到一半 TenBox 整体卡住转圈:guest-exec 和 runtime shared-folder IPC send 改为后台串行队列,UI 只做请求登记和状态更新;迁移大输出截断回传,完整内容写报告。
  • Agent 工具临时共享目录改为 runtime-only,不再写入 VM config;启动/读取配置时清理旧版本残留的 tenbox-agent-ops-* / tenbox-agent-backups-*
  • 修复 Export 点击卡住路径:文件选择面板改为异步 sheet/window panel,不再在 SwiftUI 按钮处理里同步 runModal()
  • 调整 macOS UI:工具入口改为「Agent急救箱」,默认突出一键诊断、备份和建议修复,低频/破坏性操作收进高级操作并增加确认。
  • Hermes 导出只保留用户/config/state 数据,排除可重装 app checkout、venv/bin、logs/cache、gateway pid/lock;OpenClaw 迁移导出保留密钥、身份、会话、浏览器配置等用户状态,仅排除 cache/logs。
  • OpenClaw -> Hermes 迁移后恢复 TenBox 模型代理配置,并把 OpenClaw openclaw.json 中的 Feishu / WeCom channel 配置迁移到 Hermes .env
  • 更新 docs/agent-profile.mdCLAUDE.md,记录 Agent profile 包格式、迁移范围、共享目录、Windows 路径、响应性和操作约束。

覆盖的 Issue

验证

  • git diff --check 通过。
  • clang++ -std=c++20 -fsyntax-only -I src -I build/cmake-arm64/_deps/libuv-src/include src/manager/agent_tools_service.cpp 通过;仅有仓库已有的 VmRuntimeHandle defaulted move warning。
  • swift build -c release --arch arm64 通过。
  • ./scripts/build-macos.sh --release 通过,生成 universal build/TenBox-0.8.0.app 和 ZIP。
  • 已验证 OpenClaw -> Hermes 真实迁移:48 migrated, 18 skipped,Feishu / WeCom channel 配置迁移成功,Hermes health ok
  • 之前已在四个本机镜像跑过 VM 内功能链路:
    • hermes-arm64-0.11.0
    • hermes-fcitx5-arm64-0.11.0
    • openclaw-arm64-2026.3.23-2
    • openclaw-arm64-2026.4.1
  • 覆盖 export/import、backup snapshot/restore、scheduled backup path、health、restart、reset config、diagnostics、repair pre-backup、model-test command path。
  • Hermes profile/backup 约 2.3M;OpenClaw profile/backup 约 4K-8K;排除路径检查通过。
  • review app 曾重新替换,codesign --verify --deep --strict 通过,直接启动通过。
  • 新版启动后已验证旧 VM config 中残留的 6 个 tenbox-agent-* 临时 share 被清理为 0。

说明

  • 本地没有 Windows 交叉编译器(x86_64-w64-mingw32-g++)和 ninja,所以 Windows 完整构建需要交给 Windows/CI 环境跑;本轮已做 C++ 业务层语法检查和 Win32 代码人工检查。
  • 本地没有 Sparkle EdDSA 发布私钥,build-macos.sh --release 的 ZIP 签名步骤会提示缺少 key,但脚本最终成功产出 app/zip;这是发布签名材料问题,不是代码编译失败。
  • 当前宿主未配置模型代理时,model test 返回 expected unavailable;命令链路、退出处理和 UI 结果路径已覆盖。

@luoyuctl luoyuctl changed the title Add Agent health diagnostics and repair actions 支持 Agent 健康诊断和受控修复 May 10, 2026
@luoyuctl luoyuctl marked this pull request as draft May 10, 2026 18:04
@luoyuctl
Copy link
Copy Markdown
Contributor Author

补充修复:已修复 review app 启动时 Sparkle.framework 被 hardened runtime library validation 拦截的问题。新增 com.apple.security.cs.disable-library-validation entitlement 后重新构建并覆盖本地 app;codesign --verify --deep --strict 通过,直接执行 TenBoxManager 保持运行 3 秒,未再出现 dyld Sparkle 缺库/签名崩溃。最新提交:2da2959

@luoyuctl
Copy link
Copy Markdown
Contributor Author

验证更新:已把最新修复推到 a7b4de2,并重新生成 review app。\n\n这次同步了 agent tool 的共享目录等待和 shell begin-marker 快速失败处理;repair 前置备份、diagnostics 导出、restart/reset/model-test 都走同一套更稳的命令链路。\n\n已跑四个本机镜像的 VM 内功能链路:\n- hermes-arm64-0.11.0: health、restart、reset config、diagnostics、repair pre-backup、model-test command path OK;profile/backup 约 2.3M;排除 Hermes app checkout、venv/bin、logs/cache、gateway pid/lock。\n- hermes-fcitx5-arm64-0.11.0: 同上 OK;profile/backup 约 2.3M;排除项 OK。\n- openclaw-arm64-2026.3.23-2: health、restart、reset config、diagnostics、repair pre-backup、model-test command path OK;profile/backup 约 4K;排除 cache OK。\n- openclaw-arm64-2026.4.1: 同上 OK;profile/backup 约 8K;排除 cache OK。\n\n构建校验:swift build -c debug --package-path src/manager-macos 通过;./scripts/build-macos.sh --debug 通过;review app codesign verify 通过;TenBoxManager 直接启动通过。\n\n说明:model test 在当前宿主未配置模型代理时返回 expected unavailable,但命令链路、退出处理和 UI 结果路径已覆盖。

@luoyuctl
Copy link
Copy Markdown
Contributor Author

补充修复:同步了 Export/Import 点击卡住相关修复,已推到 eea9dcd。\n\n修复点:\n- 文件选择面板从同步 runModal() 改为异步 sheet/window panel,避免阻塞 SwiftUI sheet 的按钮路径。\n- Agent 工具临时共享目录改为 runtime-only,不再持久化到 VM config。\n- 启动/读取配置时清理旧版本残留的 tenbox-agent-ops-* / tenbox-agent-backups-* share。\n\n验证:\n- swift build -c debug --package-path src/manager-macos 通过。\n- ./scripts/build-macos.sh --debug 通过,review app 已重新替换。\n- review app codesign verify 通过,直接启动通过。

@luoyuctl luoyuctl changed the title 支持 Agent 健康诊断和受控修复 支持 macOS Agent 数据迁移、备份和诊断工具 May 10, 2026
@whitefirer
Copy link
Copy Markdown
Contributor

只做了mac的么,windows的有计划做么

@78
Copy link
Copy Markdown
Owner

78 commented May 11, 2026

这个是用tty和shared folder来做的?

如果用 QMP 协议可能会更简单:https://qemu-project.gitlab.io/qemu/interop/qemu-ga-ref.html

使用 QMP 执行 guest bash 命令打包备份数据,还能得到运行的结果(包括exit code和stdout/stderr)。然后通过 guest-file-open 和 guest-file-read 来读取文件内容。

@luoyuctl
Copy link
Copy Markdown
Contributor Author

只做了mac的么,windows的有计划做么

先跑通,复制应该不难 @whitefirer

@luoyuctl
Copy link
Copy Markdown
Contributor Author

这个是用tty和shared folder来做的?

如果用 QMP 协议可能会更简单:https://qemu-project.gitlab.io/qemu/interop/qemu-ga-ref.html

使用 QMP 执行 guest bash 命令打包备份数据,还能得到运行的结果(包括exit code和stdout/stderr)。然后通过 guest-file-open 和 guest-file-read 来读取文件内容。

@78 对,我研究下

@luoyuctl luoyuctl marked this pull request as ready for review May 12, 2026 03:32
@luoyuctl
Copy link
Copy Markdown
Contributor Author

luoyuctl commented May 12, 2026

mac下已跑通,并且支持了openclaw一键迁移hermes @78
Clipboard_Screenshot_1778556758
Clipboard_Screenshot_1778556870

@luoyuctl luoyuctl changed the title 支持 macOS Agent 数据迁移、备份和诊断工具 支持TenBox Agent 数据迁移、备份和诊断工具(Agent急救箱) May 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

3 participants