Run Actor 传播

wesgine 中 Actor 标识在 Run 生命周期内的传播机制。


Actor 是必填一等字段

cell.Runtime().Run(ctx, AppRunRequest{
    Actor:     "alice",  // ★ 必填(空 → ErrActorRequired)
    SessionID: "s1",
    AgentID:   "agent-legal",
    Messages:  []Message{...},
})

Actor 传播链路

AppRunRequest.Actor
  → RunParams.Actor      // 引擎内部运行参数
  → Tags["actor"]        // 自动同步到审计标签
  → MemoryEntry.Actor    // 写入记忆时强制携带
  → Session.Actor        // 会话归属
  → RunTrace.Tags.actor  // 观测数据归因
  → TokenUsage.Tags.actor // 用量归因

委派子 Run 的 Actor 继承

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

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

// runner.go 子 actor 为空时从父继承
if childParams.Actor == "" {
    childParams.Actor = parentParams.Actor
}

无主 Run 的问题

Actor 漏传会导致"无主 Run":

后果说明
记忆写入失败RequireActor 拒绝空 Actor
Run 记录不可见INV-OBS-10:无主 Run 隐藏
工具执行无归属工具调用无法追溯到用户
Cron 任务冒名INV-CRON-10:以别人身份执行

Actor 与 Token 的关系

Token 类型Actor 来源
Admin Token请求可选传 ?actor=(管理视图)
Cell TokenToken 内嵌 Actor(普通用户)
无 TokenErrUnauthorized

产品侧 Actor 派生

产品Actor 值
wesclaw 桌面authSvc.OwnerID() 或 "local"
wescode"local"(单用户)
wescraft 个人版"local"
wescraft 团队版SSO user_id
teleclawJWT claim userId

Actor 不可变性

Run 内 Actor 不可变——创建后不能切换。

切换 Actor = 新建 Run。


相关不变量


相关文档