Cell 数据目录
wesgine Cell 的物理存储目录结构与文件布局。
目录推导
Cell 数据目录由引擎从 (DataDir, CellID) 推导:
{DataDir}/cells/{CellID}/
推导逻辑在 internal/cell/boot.go::cellDir,不由 CellSpec 声明。
目录结构
{DataDir}/
├── hypervisor.db # Hypervisor 级 Cell 注册表
├── secrets/
│ └── spec.key # AES-256-GCM 封套密钥(0600)
├── logs/
│ └── wesgine-stderr.log # 崩溃日志(fd 2 dup2)
└── cells/
└── {CellID}/
├── .cell.lock # 进程排他锁(flock)
├── meta.db # 元数据层
├── state.db # 运行时状态层
├── sessions.db # 会话层
├── skills/ # Tier C 技能包
├── knowledge/ # 知识库文件
├── workspace/ # 持久产出
│ └── {actor}/ # 按 Actor 隔离
├── .scratch/ # 临时计算(Run 结束后 GC)
└── .plans/ # Plan artifact
三层数据库
| 数据库 | 内容 | 损坏影响 |
|---|---|---|
meta.db | Cell 元数据、Agent 配置 | 元数据丢失 |
state.db | 运行时状态、Traces、Observe | 观测数据丢失 |
sessions.db | 会话历史、消息、记忆 | 会话丢失 |
单层损坏不扩散(INV-RESIL-03)。
进程排他锁
.cell.lock 使用 flock 确保同一 Cell 同一时刻只有一个写入者。
INV-RESIL-04:同一 Cell 同一时刻只有一个写入者
workspace 目录
持久化的文件产出按 Actor 隔离:
workspace/
├── alice/ # Alice 的产出文件
└── bob/ # Bob 的产出文件
物理在 Cell 目录下,满足 AX-1 隔离 + Export 可移植(INV-IO-04)。
.scratch 目录
临时计算域,Run 结束后由引擎 GC(INV-IO-06):
os.RemoveAll(scratchDir) // Run 结束时
数据目录约束
| 约束 | 说明 |
|---|---|
无 CellSpec.Storage | 路径由引擎推导,曾有此字段已删除 |
| 不含 cell_id 列 | 表内无 cell_id,物理隔离替代逻辑隔离 |
| Export 包含 workspace | 默认包含,SkipWorkspace: true 可排除 |
| Export 不含 .scratch | 永不包含 |
各产品的 DataDir
| 产品 | DataDir | 说明 |
|---|---|---|
| wesclaw 桌面 | ~/.local/share/wesclaw/ | XDG 规范 |
| wescode | ~/Library/Application Support/wescode/ | macOS |
| wescraft | ~/Library/Application Support/wescraft/ | macOS |
| teleclaw | 配置指定 | 服务端部署 |
相关文档
- 三层存储韧性 →
resilience-layers.md - Cell 导出格式 →
cell-export-format.md - File I/O 模型 →
file-io.md(如存在)