记忆层模型(INV-MEM-49)

wesgine 的记忆系统使用七值闭域层模型组织所有记忆条目。层是引擎的封闭域,消费方(前端/产品)不推导也不裁剪。


七层闭域

AllMemoryLayers() = [
    "environment",     // L1 环境信息
    "consensus",       // L2 部门共识
    "about_me",        // L3 关于我
    "agent_memory",    // L4 角色记忆
    "session",         // 会话记忆
    "working",         // 工作缓存
    "unknown",         // 未识别
]

L1 环境信息(environment)

L2 部门共识(consensus)

L3 关于我(about_me)

L4 角色记忆(agent_memory)

会话记忆(session)

工作缓存(working)

未识别(unknown)


层判定单点 LayerOf(INV-MEM-49)

此前五个消费方各自从 scope + metadata 推导层,只有 Teleclaw 判对——其余都把 consensus 和 about_me 合并(两者共用 ScopeGlobal)。

现在收敛成 memory.LayerOf(e) 单点:

func LayerOf(e MemoryEntry) MemoryLayer {
    // 基于 scope, namespace, actor 综合判断
    // 返回七值之一,不猜测
}

DTO 下发 layer 字段,消费方一律消费不推导。


层谓词 LayerClauses

LayerOf 答「这一行是哪层」,LayerClauses(layer) 答「哪些行是这层」。

两者必须由同一份定义生成——前者是读方向,后者是 SQL 下推方向。

Layer 与 Scope 互斥

Layer 与 Scope 同时给出返回 ErrMemoryLayerScopeConflict(400),不做交集。


三个动词按层提问(INV-MEM-53)

写入:SaveToLayer

POST /cells/{id}/memory  { layer: "about_me", content: "..." }

LayerTarget(layer) 一张表答三件事:落哪个 scope / 要不要 actor / namespace 谁给。

错误码:

错误含义
ErrLayerNotWritableenvironment / session / working 不可人工写入
ErrUnknownLayer层名不存在
ErrLayerSharedconsensus 带了 actor(共享层不能私有化)
ErrLayerNamespaceRequiredagent_memory 没给 namespace

清空:ClearLayer

DELETE /cells/{id}/memory/layer?layer=about_me&actor=alice

收结构体 ClearLayerRequest,不收三个位置参数(避免 (layer, actor, ns) 与 (layer, ns, actor) 混淆)。

计数:CountByLayer

GET /cells/{id}/memory/counts?actor=alice

返回 Record<MemoryLayer, number>,键覆盖全部层含 0。


可写层

只有三个层可以人工写入:

对应 wesui 的 WRITABLE_MEMORY_LAYERS。


耐久性由 Kind 决定(INV-MEM-54)

跨会话可见性由 Kind 的 kindDurability 判定——不是 Formation。

Formation 是溯源(哪个机制铸出这行),耐久性是寿命。两者真的不一致:

Kind 必填

// 空 kind → ErrKindRequired
saveCore(entry) // entry.Kind 不能为空

Episodic Kind 必须带 SessionID

// episodic 缺 SessionID → ErrSessionRequired
// 否则 201 比 400 坏——写成功但永不召回

Actor 提列(INV-MEM-48)

actor 从 Metadata["actor"] JSON 键提升为 wes_memories.actor 独立列。

影响:


各产品场景

产品特点
wescode1 workspace = 1 Cell,actor 恒为 "local";L2/L3 同人但分开渲染
wesclaw个人助手 N=1,L2 恒空(无 admin 写入)
wescraft团队版多 actor,四层同时非空
企业版部门 Cell 多员工,L2 有部门共识,L3/L4 按员工隔离

前端约束