工作区即 Cell

wescode 的核心隔离模型:1 workspace = 1 Cell。


核心理念

每个 VS Code workspace 是一个独立的 wesgine Cell 隔离域。

workspace 路径 → sha256(canonicalize(root))[:4] → "ws-a1b2c3d4"

切换 workspace = 换 Cell = 整个数据面一起换。


Cell ID 派生

CellID 由 workspace 路径确定性派生:

cellID := workspaceCellID(wsAbs) // → "ws-a1b2c3d4"

数据隔离

切换 workspace 时,以下数据全部切换:

数据位置隔离级别
CKG 索引cells/ws-{hash}/index/per-Cell
Memorycells/ws-{hash}/sessions.dbper-Cell
Skillscells/ws-{hash}/skills/per-Cell
Knowledgecells/ws-{hash}/knowledge/per-Cell
Plancells/ws-{hash}/.plans/per-Cell
Observecells/ws-{hash}/state.dbper-Cell

跨 workspace 共享

以下数据跨所有 workspace 共享:

数据位置原因
登录 sessiondb/wescode_auth.db登录状态跟用户走
Hypervisor 配置hypervisor.dbCell 注册表
崩溃日志crashes/进程级

Actor

wescode 的 actor 固定为 "local"(单用户场景)。

未来接入 weisyn SSO 后改为登录 uid。


INV-WS-05

Cell ID 在 Go 进程生命周期内不可变。

Go 进程不做 Cell 切换——切换由 TypeScript 层路由到不同进程实现。


无工作区场景

无工作区 = Config Mode:


Convention vs Correction

概念持久化作用域
Conventionruntime probe-cache当前 workspace
CorrectionL4 Memory跨 workspace

Convention 是运行时探测(tab/space 等项目事实),不入 memory store。

Correction 是用户教给 Agent 的偏好,跨项目生效。


Boot 流程

eng, _ := engine.StartEngine(ctx, engine.Config{DataDir: dataDir})
cell, _ := eng.Hypervisor.Cells().GetOrCreate(ctx, wesgine.CellSpec{
    ID:       cellID, // "ws-a1b2c3d4"
    Timezone: "Asia/Shanghai",
    Locale:   "zh-CN",
    // ... specOverride 注入
})

记忆面影响

记忆物理落在当前 workspace 的 Cell 里:


相关文档