实践openclaw-concepts
Session controller · OpenClaw — 会话控制器如何决定哪一轮能占用会话,以及为什么取消不等于已结算
会话控制器如何决定哪一轮能占用会话,以及为什么取消不等于已结算
2026-10-30原文
本文为要点摘要,完整细节以原文为准。
- 区分六种状态而非一个布尔值:文章要求从权威事实分别推导 slot owned、admissible、execution active、injectable、abortable、settled,排队请求不能因有 run ID 就显示为执行中。含义:harness 的状态查询接口应按问题拆分,避免用单一
is_running掩盖取消与结算的差异。 - 取消请求不等于取消完成:Stop 在持久化、钩子、MCP 清理与子进程清理后才确认,但不等待原始准备返回;控制器保留该工作的 custody 并 fence 下一轮直到其 settle。含义:prompt/agent 循环中应把“已请求停止”和“已安全交接”分开建模。
- 不按 session key 重新发现后继:逻辑 key、存储 incarnation、reply operation、backend attempt 是不同身份,旧回调可能活过 reset,必须做 generation 检查。含义:harness 应持有捕获的 operation 引用,而非用 key 重查目标。