数据备份与恢复
wesclaw 的所有数据存储在本地,支持完整的导出、导入和备份操作。
数据目录
目录结构
~/Library/Application Support/wesclaw/ ← macOS
~/.local/share/wesclaw/ ← Linux
├── hypervisor.db ← Cell 注册表
├── cells/main/ ← 默认 Cell 数据
│ ├── meta.db ← 元数据
│ ├── sessions.db ← 对话和记忆
│ ├── state.db ← 运行时状态
│ ├── skills/ ← 已安装技能
│ ├── knowledge/ ← 知识库索引
│ └── workspace/ ← 工作区文件
├── db/wesclaw.db ← 应用数据
├── db/wescode_auth.db ← 登录凭证
├── crashes/ ← 崩溃日志
└── logs/ ← 运行日志
Cell 导出
导出当前 Cell
导出包含:
| 数据 | 是否包含 |
|---|---|
| 对话历史 | ✅ |
| 记忆数据 | ✅ |
| Agent 配置 | ✅ |
| 技能 | ✅ |
| 知识库 | ✅ |
| 工作区文件 | ✅(可排除) |
| .scratch 临时文件 | ❌ |
导出格式
导出为 tar.gz 压缩包,可在其他设备导入。
选择性导出
可以选择排除工作区文件以减小体积:
导出选项:
☑ 对话历史
☑ 记忆数据
☑ Agent 配置
☑ 技能
☑ 知识库
☐ 工作区文件(排除以减小体积)
Cell 导入
导入 Cell
将导出的 tar.gz 导入到新设备:
- 打开设置
- 选择"导入 Cell"
- 选择 tar.gz 文件
- 确认导入
覆盖行为
| 选项 | 说明 |
|---|---|
| 新建 | 创建新 Cell,不影响现有数据 |
| 覆盖 | 替换同名 Cell 的数据 |
备份策略
定期备份
建议的备份频率:
| 数据类型 | 建议频率 | 说明 |
|---|---|---|
| 记忆数据 | 每周 | 不可重建,最重要 |
| 对话历史 | 按需 | 量大但可接受丢失 |
| Agent 配置 | 变更后 | 配置文件较小 |
| 配置文件 | 变更后 | config.yaml 等 |
自动快照
wesgine 引擎提供数据韧性:
- 三层 SQLite 架构(meta / sessions / state)
- 单层损坏不影响其他层
- 自动快照后
PRAGMA quick_check - 损坏文件归档到
corrupt/目录
三层数据韧性
数据库分层
| 层 | 文件 | 内容 | 损坏影响 |
|---|---|---|---|
| 元数据 | meta.db | Cell 配置 | 不影响对话和记忆 |
| 会话 | sessions.db | 对话、记忆 | 不影响运行时状态 |
| 状态 | state.db | 追踪、观测 | 不影响对话 |
启动恢复
Cell 启动时自动处理损坏:
Boot 检查
→ meta.db 损坏?归档,降级启动
→ sessions.db 损坏?归档,新对话可用
→ state.db 损坏?归档,追踪数据丢失
→ 结果:Boot 永远成功
进程排他锁
同一 Cell 同一时刻只有一个写入者:
flock .cell.lock保证排他- 防止多进程同时写入导致损坏
设备迁移
迁移步骤
从旧设备迁移到新设备:
- 旧设备:导出 Cell 为 tar.gz
- 传输:通过 U 盘/网盘传输文件
- 新设备:安装 wesclaw
- 新设备:导入 Cell
- 新设备:重新配置 Provider(API Key 不随导出)
API Key 处理
导出不包含明文 API Key:
- 加密的 Key 绑定原设备的
spec.key - 新设备需要重新配置 Provider
- 这是安全设计,不是缺陷
注意事项
- 导出文件可能较大(包含知识库和工作区)
- API Key 需要在新设备重新配置
- 登录凭证(tc_session)不随 Cell 导出
- 导入时可选覆盖或新建
- 定期备份记忆数据(不可重建)
- 损坏的 DB 归档在
corrupt/供诊断