数据隔离模型

wesclaw 的数据隔离分为两层:引擎层的 Cell 物理隔离和应用层的 Actor 逻辑隔离。了解这个模型有助于理解你的数据如何被保护。


两层隔离架构

┌─────────────────────────────────────────┐
│ 应用层(wesclaw)                        │
│  Actor 逻辑隔离:用户身份 → 数据可见性    │
└────────────────────┬────────────────────┘
                     │
┌────────────────────▼────────────────────┐
│ 引擎层(wesgine)                        │
│  Cell 物理隔离:独立数据库、独立文件系统    │
└─────────────────────────────────────────┘

Cell 物理隔离(引擎层)

Cell 是 wesgine 引擎的最小隔离单元。每个 Cell 拥有:

资源隔离方式
数据库独立的 SQLite 文件(meta.db / sessions.db / state.db)
记忆物理存储在 Cell 目录下
知识库独立的文件和索引
技能独立的 Skill 包目录
工作区文件workspace/{actor}/ 按用户分区

Cell 之间没有数据面通信(AX-1 公理)。一个 Cell 的数据对另一个 Cell 在物理上不可及。


Actor 逻辑隔离(应用层)

在同一个 Cell 内,Actor(用户身份)决定数据的可见性:


桌面个人版的简化模型

wesclaw 桌面版是 N=1 场景:


多 Profile 时的数据分离

wesclaw 支持多 Profile(可选功能),每个 Profile 对应一个独立的 Cell:

引擎数据(per-Cell 物理隔离)

每个 Profile 的以下数据完全独立:

应用数据(逻辑隔离)

应用层数据存储在共享的 wesclaw.db 中,通过 cell_id 列隔离:

跨 Profile 共享

以下数据跨 Profile 共享(有意设计):


切换账号的含义

当前桌面版中,切换账号 = Go 进程重启,不是在前端切换 Cell。这意味着:


导出与迁移

Cell 的数据可以整体导出和导入:


安全边界

边界执行位置说明
Cell 隔离引擎层物理文件系统隔离
Actor 可见性引擎层记忆/会话/观测面的查询过滤
进程排他锁引擎层同一 Cell 同时只有一个写入者
Token 鉴权应用层Cell Token / Admin Token 控制访问

相关文档