环境记忆层
wesgine 环境记忆(L1 environment)的感知、注入与刷新机制。
定位
环境记忆是记忆七层中的第一层(L1),记录宿主机器和运行时环境的事实信息。
| 属性 | 值 |
|---|---|
| 层名 | environment |
| Scope | ScopeSystem |
| 可写性 | 不可写(ErrLayerNotWritable) |
| 数据来源 | 宿主环境感知器自动产出 |
| Actor | 无(L1 是共享资产) |
感知器架构
进程级共享(INV-ENV-01)
memenv.SharedSnapshot(ctx) / capenv.SharedSurface(ctx) 是唯一入口:
- 进程级 single-flight + 5min TTL
- 每包只有
shared.go一个构造点 - 包外任何 alias 都不得构造(含测试)
感知内容
| 类别 | 示例 |
|---|---|
| 操作系统 | OS 类型、版本、架构 |
| 运行时 | Go 版本、Node 版本、Python 版本 |
| 工具链 | Git、Docker、编译器等是否在 PATH |
| 硬件 | CPU 核数、内存大小 |
工具探测
"在不在 PATH 上"用 exec.LookPath 回答,不 fork 子进程(INV-ENV-03)。
租户无关(INV-ENV-02)
internal/memory/env 与 internal/govern/capability/env 不得出现 CellID / Actor / Tenant。
Per-Cell 事实层叠在消费者上(Loader.WithRuntimeOverrides),不下沉进感知器。
刷新机制
RefreshEnvironment
RefreshEnvironment 使用「全部」读写分页至清空策略(INV-MEM-34):
- 带
progressed判定 - 删除失败时不空转
- 写入走标准
saveCore路径
超时控制
envSeedBudget: 15scapabilitySurfaceBudget: 25sproviderProbeBudget: 10s
探测预算取 min(自身预算, 父 ctx 剩余);ctx 已死则不缓存。
深拷贝保护(INV-ENV-03)
EnvSnapshot.clone() 逐字段深拷——共享缓存的唯一防线是调用方拿到副本。
使用反射校验(TestEnvSnapshot_CloneDeepCopiesEveryReferenceField,带 vacuity guard)。
与用户记忆的关系
| 层 | 来源 | 归属 |
|---|---|---|
| L1 environment | 感知器自动产出 | 无 actor,共享 |
| L2 consensus | admin 写入 | 无 actor,Cell 级共享 |
| L3 about_me | 用户/AI 交互产出 | 有 actor,个人 |
| L4 agent_memory | Agent 运行时产出 | 有 actor,per-agent |
L1 不可人工写入——POST /memory 带 layer=environment 会返回 ErrLayerNotWritable。