Actor 模型

wesgine 的 Actor 是运行时一等标识符,引擎基于 Actor 做记忆隔离、资源调度、认知路由和行为归因。


Tenant + Actor 两层模型

Tenant(Cell)     物理隔离域
  └── Actor        运行时行为主体
层隔离方式引擎 enforce
Tenant(Cell)物理隔离(独立 DB 文件,表内无 cell_id)✅ 完全
Actor运行时行为过滤✅ 记忆/Session/HITL/Token 归属

Actor 是什么


结构资源 vs 运行时行为

类别例子Actor 维度?
结构资源Agent/Skill/MCP/Knowledge/Cron/Channel❌ 归 Cell
运行时行为Memory/Session/HITL/Token Usage✅ 按 Actor 隔离

Actor 边界四面

引擎内 Actor 边界有四个面,每面各自收敛判据:

面单点不变量
MemoryActorVisible / RequireActorINV-MEM-38~47
SessionAssertActorINV-SESS-01~03
ObserveactorClause / RunVisibleINV-OBS-08~10
CronjobVisible / ownedJobINV-CRON-10

各产品 Actor 派生

产品Actor 来源
wesclaw 桌面authSvc.OwnerID() 或 "local"
wescode固定 "local"
wescraft 个人固定 "local"
wescraft 团队SSO user_id
teleclawJWT claim userId

AX-2 身份无关

wesgine 不定义用户身份体系(认证/授权/组织架构归应用层):


委派 Actor 传播

delegate_task 的子 Run 必须继承父 Run 的 Actor:

// tool.go 把 tc.Actor 同时写进
pp.Actor = tc.Actor          // 一等字段
pp.Tags["actor"] = tc.Actor  // 审计标签

反模式

禁止正确做法
Run 不传 Actor必填一等字段,空 → ErrActorRequired
只传 Tags["actor"]Actor 一等字段 + Tags 同步
在引擎层做 Agent 的 per-actor 过滤结构资源归 Cell,应用层过滤
委派子 Run 不传 actor从父 Run 继承