---
doc-schema-version: 1
summary: "调度、工作空间协调、移动、停止和回收、恢复以及死机的幸存内容"
title: "云会话生命周期和持久性"
read_when: "您正在移动、停止或恢复已放置的会话,或者您需要知道丢失的计算机中哪些内容可以幸存。"
---
将会话分派给工作人员、同步其工作区以及移动、停止或恢复它。即使工作计算机丢失,网关也会保留对话和接受的工作区结果。
## 调度会话
`sessions.dispatch` 拒绝繁忙会话而不中断其活动工作。等待当前回合完成,然后重试。对于空闲会话,调度会关闭本地轮流准入,验证工作区源,为所选执行模式提供租约,并运行设置。启用项目热图像后,它会准备提交的结帐和节点运行时,并在注册之前捕获任何所需的图像。然后,它会注册节点,安装所需的固定网关捆绑包,应用会话工作区,并在放置达到 `active` 所有权后返回。网关源库存验证发生在提供商分配之前。获取固定源后,在注册节点上捕获仅存储库的库存;任一路径报告可操作的大小或条目限制。为第一次云调度预留几分钟时间,包括在需要时进行捕获;以后的调度可以重用图像、项目种子和运行时安装。之后,像往常一样与会话交谈。 OpenClaw 将路由转向worker进程; Codex 本机操作在授权云节点、配对设备或受支持的 SSH- 支持的提供商上运行。
网关工作区预检有十分钟的预算,涵盖 Git 枚举和文件检查。 Stop 在分配工人之前取消该准备工作;在临时清单文件被删除之前,已启动的文件系统操作已解决。
在 Control UI 中启动云会话会立即显示您提交的提示,并在工作线程启动时保持可见。配置和工作区准备显示在聊天中的下方。仅在放置处于活动状态后才会发送提示;打开已配置的会话也可以显示其在对话中的进度。
如果另一个会话的工作人员位置在准备期间发生更改,会话生命周期准入会刷新其维护清单一次。对准入会话的放置进行更改,或在重试期间进行其他库存更改,仍会拒绝准入。这仅需要网关更新并且不更改存储的数据或工作协议。
## 更新网关和工作线程运行时
网关更新保留附加的云计算机并安装新的工作程序包。在接纳新构建之前,网关会停止旧工作人员并撤销其凭证。计算机的工作区、已安装的软件包和桌面仍然可用。失败的安装保留租约以进行恢复,而不是分配替换设备。节点必须支持当前的捆绑包安装程序并重新连接才能完成恢复。 Node 捆绑包清理会保留网关的当前构建,直到该节点上的每个实时环境都记录了它,因此在配置或就地更新完成时运行的清理无法在下一轮启动时删除捆绑包。
Node 清理在数据库工作线程中准备放置库存。调度和结果授权重用所选会话准备的安置事实;放置更改会立即撤销这些事实,因此过时的清理会等待下一个保留发布。这仅需要网关更新并且不更改存储的数据或工作协议。
工作空间保留对当前节点连接和目标捆绑包重复使用已安装的工作捆绑包状态。重新连接、更改目标或丢失捆绑状态需要再次检查。这可以避免在清理期间重新遍历未更改的内容寻址包;显式捆绑检查和安装仍会验证其内容。工作空间验证仍然是接受和下一轮的大门。
仅容量更新不会启动工作区或工作包清理。当节点可用时、放置激活后以及正常定期协调期间,清理仍会运行。
当 OpenClaw 因运行时刷新或网关关闭而停止工作线程执行时,其本机工作区命令必须在新命令重用保留的工作区之前完成清理。失败的清理将导致准入关闭,直到恢复成功;已停止执行的排队命令无法用新命令恢复。
网关更新后,后台协调开始在重新连接的配对主机上安装新的运行时并保留会话,通常在重新连接后大约一分钟内。网关日志记录开始、每 30 秒的进度、有原因的中断和完成;使用它们来遵循此后台安装,因为 `sessions.describe` 和 `sessions.list` 等会话 RPC 可以等待协调过程完成。当首次调度或提交的回合执行安装时,其进度也会在配置和活动会话放置以及 Control UI 聊天通知中显示为 `workerRuntimeInstall`。当第一次调度执行安装时,卡住会话诊断会将 `worker:runtime_install` 报告为字节流。
如果提交的回合在执行开始之前遇到旧版本,则 OpenClaw 会释放该未启动的声明,刷新运行时,并使用新权限重试一次准入。这还会重试之前失败的更新,因此重新连接的工作线程可以处理提交,而无需等待定期恢复。会话和原始提交保持不变。已经交给工作人员的工作永远不会通过此准入重试来重播。
如果网关重新启动或更新后节点仍在重新连接,则同一提交会在重试准入之前等待其当前节点连接。当前工作线程构建无需运行时刷新即可重新连接。等待使用现有的两分钟工作人员准入窗口,并以轮次配置的超时为上限。停止、替换会话或放置以及另一个网关重新启动会取消等待。不兼容的节点运行时仍然报告它需要更新。
当网关在其计算机上安装更新的工作运行时时到达的消息会在准入之前等待该安装,而不是中断它。仍在传输到节点的字节保持轮流活动;停止、回合超时或网关重新启动会取消等待。安装后,回合在更新后的运行时运行;失败的更新遵循现有的挂起更新恢复。
优雅网关停止和重新启动中断 OpenClaw 一旦开始排空,工作线程就会转动,因为工作线程协议准入在关闭期间关闭。网关保留每个中断轮次的声明和待处理的工作空间结果以用于启动恢复,而不是等待工作人员准入重试或放置失败。本地嵌入式匝保持其正常的漏电行为。
对于因重新启动而中断的节点支持会话,恢复会确认旧工作线程已停止,解决待处理的工作空间结果,并在保留机器的同时退出中断的轮次。没有完成确认的中断索赔会进入相同的结果恢复流程,因此在下一轮之前已在保留的机器上进行的编辑将被接受。下一条消息获得新的权威;它不会自动重播中断的工具调用。显式停止、移动和失败提供者清理保留其正常的拆卸行为。
## 同步工作区文件
工作区检查和散列在主线程之外运行;主机保留工作空间突变和接受权限。取消等待清理前的未完成工作。有关实施和基准测试的详细信息,请参阅 [ 工作空间计算](/reference/test/performance#workspace-computation)。
当节点支持 gzip 并保持与未压缩传输兼容时,工作区清单下载会使用 gzip。压缩响应及其解码清单均保持在 64 MiB 安全限制内;节点在更改工作空间之前验证解码的清单。
对于网关源工作树,同步不是连续的:OpenClaw 在调度时发送新的合格库存,而不是在每次启动现有工作人员之前发送。仅在调度后在网关上创建的文件保留在本地,直到使用 `git add` 显式暂存。分阶段路径会在下一次完成的工作人员协调时加入已接受的清单。未暂存的新输入需要重新调度。
### 向工人提供技能
远程执行技能包是执行工作区中私有的、只读的轮流输入。 Transfer 将其文件分组为有界批次,以避免每个小文件单独的网络往返。它们会被普通的 Git 暂存忽略,并被排除在工作区同步和协调之外。正常回合清理会移除它们;报告清理失败。在准备下一轮之前,OpenClaw 会从该工作区中删除剩余的私有技能副本,包括初始化响应丢失的副本。当新回合不选择任何技能时,也会运行此操作。恢复会保留附件和不相关的目录,清理失败会停止准备工作并提供重试指导。
技能目录和明确的技能参考指向当前回合的工人副本。指令和相关脚本使用相同的位置;对网关源的编辑适用于以后的回合。
文件支持的技能可以使用文件符号链接,例如指向 `AGENTS.md` 的 `CLAUDE.md`。工作线程交付将目标的确切字节和可执行标志复制到别名路径处的常规文件中。目标必须位于同一技能内并属于其包含的文件;链接到排除的 Git 或依赖关系树、目录链接、损坏的链接、循环和硬链接都会被拒绝。托管技能库导入和发布的修订保持无链接。
断开连接的工人没有清理期限。当权威保留快照释放其工作空间生成时(包括重新启动后),节点还会回收副本; SSH- 支持的副本遵循 workspace/provider 拆解。单独重新启动节点不会删除保留代。技能复制路径仅在其回合内持续,因此后台命令不得依赖于它们在之后仍然可用。
### 接受已完成的转弯
一旦工作人员终端并且其最终辅助消息在网关上持久存在,工作人员轮流回复就会被传递。聊天结束事件和`agent.wait`完成表示回复完成;在现有的待定结果围栏和轮流索赔下,工作空间核对仍在后台继续进行。下一个回合仍然等待和解。使用现有的会话放置状态来跟踪工作区结算。
对于节点上的网关源工作区,本地日志恢复与远程快照上传一起运行。两者均仍受当前结果声明的约束,并在上传的暂存被消耗或清理之前解决。最终验证仍然首先检查远程工作区,然后检查本地工作区,因此在接受之前会检测到远程检查期间所做的本地编辑。
当节点和网关工作区仍然与接受的基础匹配时,协调会跳过应用文件。它会在最终静止更新后验证两者,在接受之前重新检查活动所有者,并保留结果引用以供重新启动恢复。任何一方的更改都使用完整的协调路径,包括冲突处理。
在发布轮换声明之前,已完成的云轮换会保留符合条件的、有大小限制的工作区文件。仅存储库会话接受网关裸工件存储库中的累积不可变检查点。网关源会话将这些更改应用到其托管工作树。 Worker-turn 使用其终端工作事件来创建持久的待处理结果栅栏。 Remote-exec 等待工作区静止并在本地 Codex 尝试后进入相同的协调流程。在应用结果之前,网关会暂存完整的经过身份验证的 base/current 清单,以及每个更改后的结果 blob 作为 `refs/openclaw/worker-results/` 下的 Git 引用;删除由清单表示,不需要 blob。即使网关在应用期间停止,这也可以使云增量保持可恢复,而不会复制未更改的基线内容。工作区结果使用 Git 文件语义:保留常规文件、可执行位、符号链接、添加、更改和删除,而不保留空目录和其他目录模式。网关源更改保留在托管工作树中以进行正常审查和提交;仅存储库的更改保留在节点上和接受的检查点中。
### 保留闲置工人
OpenClaw 工作程序轮流会话可以使已确定的工作程序进程保持空闲状态长达两分钟,每个节点最多有两个空闲工作程序。后续回合以新的回合权限重用已加载的运行时;放置激活不会启动工作程序。空闲工作线程继承现有的后台保留协调契约:进程在进程和容器模式下都保持活动状态,并且 capture/renew/verify 清单围栏检测并发工作区更改。转弯连接和临时型材在空闲准备之前被处理。闲置的工作人员可以因容量、更新和断开连接清理而被驱逐;后台命令不是。有关兼容性和内存成本,请参阅 [ 节点会话托管 ](/nodes/session-hosting)。
### 静止和平台兼容性
工作空间静止会在 30 秒的预算内重试缓慢的进程检查。恢复看门狗最多将未完成的进程保留四次,之间最多有 7 秒的退避时间,因此恢复的总检查和退避预算为 127 秒。缓慢的检查不能重复恢复相同的工作人员并导致其他工作人员挨饿。每次检查开始时有两秒的时间,超时后会获得更多时间。耗尽保留租约中未完成的 PID/start 引用和原因,以供网关下一次恢复尝试;检查主机负载和 `ps` 可用性,然后重试工作区恢复。失败的协调会保留可恢复的工作空间结果,并通过正常的恢复流程报告原因。
在受支持的 Linux 和 Windows 节点主机上,网关通过重新连接范围的节点清单一起协商工作区静止和前台进程所有权。节点主机工作区运行时拥有独立于各个命令和环境拥有的预览进程的静止助手。获取、续订、释放都使用其保留连接。在释放工作区保护之前进行精确随机数清理;失败的清理保留保管权。最多有一个闲置助手与其工作空间所有者保持绑定以供以后轮流使用,每个助手都有一个新的租赁随机数。不同的工作区所有者或节点主机关闭会加入空闲助手的退休状态。仅刷新可移植工作程序包不会更新此本机主机功能。
本机 Linux 帮助程序支持 root 拥有的容器会话,包括 RunPod 工作线程。它的共享主机租约使用具有空进程范围的清单围栏;它永远不会冻结或恢复其他根进程。较旧的分离脚本仍然拒绝 root 拥有的会话,因为它的恢复可以恢复记录的进程。更新节点主机和网关以接收本机帮助程序修复。
较旧的网关和节点主机在交错更新期间保留现有脚本和命令路由。 macOS和Bun不通告该能力。 Windows 保留其共享主机 SQLite 租约并显示围栏,而不冻结进程;其保留的助手避免为每个控制操作启动单独的命令。更新并重新启动 Windows 节点主机以实现此改进。功能选择是自动的,而不是操作员设置。租约保留其选定的方言直到发布,并且失去支持会在调度之前拒绝本机操作,而不是默默地更改所有权。这种兼容性路径保留了现有的平台限制;限制性 Linux 主机仍需要匹配的本机 host/worker 支持来进行进程所有权修复。
结果暂存和回滚保留精确支持的文件名和文件字节,独立于 Git 属性和签出编码。
如果工作区转移所有权在上传期间关闭,网关会立即断开上传者的连接,包括在发送所有字节后等待验证时。取消的上传无法成为可接受的工作区结果。
替换和网关移动将文件恢复到固定底座上;它们不会恢复工作人员提交历史记录、合并阶段或部分暂存。在记录的云发布之后,Gateway Move 会继续从已验证的推送提交开始本地分支,同时保留后来接受的文件更改以供审核。在继续之前查看恢复的冲突标记文件。当可发布的检查点可用时,恢复会将其添加的文件标记为意图添加,从而使添加和编辑的内容保持未暂存状态以供审阅。接受的发布删除将作为分阶段索引删除进行恢复;任何恢复的文件字节仍然可用。忽略的仅恢复文件和附件不会注册发布。如果发布捕获不可用,则恢复的忽略文件在发布之前需要显式 `git add -f`。
### 发布工作人员更改
对于每个 OpenClaw `worker-turn`,网关将其有效共享 GitHub 身份绑定到工作线程的 `exec` 启动中,使用与普通网关主机执行相同的 [`tools.github`](/gateway/config-tools#tools-github) 选择。当该身份可用时,`gh` 经过身份验证,并且 HTTPS `git push` 使用 `gh auth git-credential` 帮助程序。工作结账携带会话拥有的分支名称,对于 GitHub 存储库,携带 HTTPS `origin`。代理直接从工作人员那里提交和推送。协调会保留文件内容,而不是工作人员的提交历史记录,因此从工作人员推送的工作首先落在 GitHub 上。每次启动时,当本地分支落后时,工作人员都会将其结帐快进到 `origin` 上的会话分支,从而引入较早工作人员推送的历史记录;一个分歧的本地分支保持不变。
Codex `remote-exec` 会话和 Control UI **Publish PR** 操作使用网关发布代理;远程执行代理请求发布 `github_publish`。仅存储库发布使用接受的 Git 规范化检查点,而不创建网关签出。共享或明确选择的个人出版物可以在停止后使用该检查点;个人凭证保留在网关上。请参阅 [ 使用您的帐户 ](/concepts/user-model#publish-with-your-account) 发布。
### 解决冲突并排队跟进
使用 `git add` 暂存新的网关文件,以将其包含在下一次工作人员协调中。未暂存的仅限本地文件保留在工作人员工作区之外,包括工作人员更改选择以忽略规则的文件。
恢复已接受的结果会在检查局部冲突时保留其已接受的工作区基线。稍后工作人员删除先前同步的网关文件在恢复后仍然适用;暂存另一个网关文件不会追溯地将其包含在已接受的结果中。
对于网关源工作树,apply 使用最新接受的清单作为合并基础,在调度时初始化,并在每次接受的协调后高级。仅应用云更改,仅本地更改保持不变,并且两侧更改的路径使用三向保持本地策略。当协调因冲突而结束时,最终答复后会出现一个单独的文字记录通知,其中包含有界路径摘要和暂存结果参考。此通知并非新代理轮流。对于 Control UI,该放置暴露了相同的冲突,并且仍然应用不冲突的云更改。该通知包括用于检查当前云文件的 `git show [:` 和用于从任何工作区目录获取该文件的顶级文字路径规范 `git checkout ][ -- ` 命令。在 Bash 或 zsh(Windows 上的 Git Bash)中运行命令。如果检查说该路径不存在,则云端结果将其删除;手动验证并删除保留的本地路径。如果结帐报告 file/directory 阻塞,请移动或删除阻塞的本地路径,然后重试。如果暂存的引用本身消失了,则将通知视为陈旧,并且不要更改本地路径。正常转弯栅栏释放后,冲突的阶段裁判仍然可用;稍后的清理结果会清除通知并退休旧的引用,而显式栅栏移除是最终的清理边界。
虽然隔离结果仍在协调中,但 Control UI 接受持久托管的后续操作,并显示它正在等待工作区同步。先前的索赔解除后,网关自动开始后续处理;不要重新发送。如果回复后协调失败,则单独的成绩单通知和放置会报告恢复错误。排队的输入仍然可用于现有的恢复流。重新启动时,恢复会在陈旧声明清理之前发现挂起和暂存的结果,完成检查点接受或本地应用,并仅在保留结果后回收失效环境。接受的Stop结果即使云环境已经被破坏,重启后也能完成清理工作;这不会恢复旧回合的实时权限。对于网关源工作树,有界的 SQLite 回滚日志使中断的文件系统应用可恢复,而无需重播已接受的突变。
每次恢复尝试都会绑定当前会话存储一次,并保留该源用于其冲突报告和结果解决。在恢复期间更改会话存储路由无法将这些写入重定向到另一个存储,即使两个存储包含相同的会话 ID。丢失或替换的源、会话生成或恢复所有者会留下待处理的结果、暂存的参考和未完成的日志,以供以后授权的恢复尝试使用。存档会话可以完成保留结果恢复,而无需再次激活。
## 移动会话
右键单击侧边栏或会话页面中符合条件的会话,或打开其聊天标题菜单。选择 **Move to cloud…** 用于空闲的本地工作空间,或选择 **Move session…** 用于活跃的工作人员。当已完成的工作人员回复仍在保存其工作空间时,普通移动将暂时禁用,并显示 **Finalizing Worker Workspace**;结算后即可使用。下面描述的显式的、破坏性的离线设备恢复仍然是独立的。
要在其他地方继续相同的会话,请打开 Cloud**芯片上的**Runs 并选择 **Move 会话…**。拥有`operator.write`的运营商可以选择网关或符合条件的配对设备;选择已配置的云配置文件需要 `operator.admin`。配置文件还可以提供操作系统和机器类别,并将机器列表过滤到所选系统。使用不同的有效操作系统或类迁移到当前配置文件会替换其工作人员;它不是就地调整大小,并且本机大小覆盖可能优先于类。网关关闭新的准入,中断任何活动的轮次,协调源工作空间,销毁旧环境,然后激活目标。被中断的回合永远不会重播:部分输出可能会消失,并且您在移动后再次发送下一个回合。确切的目标(包括操作系统和机器覆盖)以及有限错误是持久的,因此 Control UI 显示 **Moving to…** 或重新连接后的恢复错误。如果网关在目标变为活动状态之前重新启动,则请求绑定的权限将丢失:恢复完成安全源清理,使用重试消息标记放置失败,并且不配置目标。重新连接,然后再次选择 **Move 会话…**。
当其运行程序断开连接时,活动配对设备放置将保持 `active`。 Control UI显示**设备离线**和**等待设备重新连接;返回**后重试。等待是默认设置,可以保持远程所有者和工作区完好无损。任何正在进行的 Codex `remote-exec` 尝试都会明显失败,其节点执行服务器和子进程将被终止,并且重新连接同一配对设备仅允许重新尝试;断开连接的 stdio 会话永远不会恢复。 **在网关上继续…** 具有明显的破坏性:在确认数据丢失后,它会放弃确切的离线设备所有者,并从上一个网关同步的工作区恢复,而无需重播。未同步的设备文件和正在进行的工作可能会丢失。这种显式放弃还可以隔离活动的本地 Codex 轮次声明,而无需等待离线节点的确认。在将会话返回到本地所有权之前,网关会撤销被放弃的工作人员的凭证、工具和结果权限。它保留确切的旧设备清理范围,直到重新连接确认物理工作人员关闭;此清理无法停止或撤销后来的会话所有者,包括在网关重新启动之后。在网关上继续并不声称离线进程已停止。如果设备已可用,请改用普通的协调优先移动。
## 停止、回收或删除会话
要停止 Control UI 中的运行转弯,请先使用聊天 **Stop** 或 `/stop`。一旦没有轮次运行,从放置芯片中选择**Stop云工作者…**。网关在破坏环境之前执行最后一次工作区协调。 `draining` 或 `reconciling` 中已有的布局正在完成拆卸;等待其徽章变为 `reclaimed`,然后再重置或删除会话。 `draining` 或 `destroying` 中的环境尚未确认发布:拆卸错误仍然可见,并且可以重试停止。回收后开始另一回合仅在其原始云配置文件保持为同一提供商配置的情况下配置替代工作人员;删除该配置文件会阻止新的云分配。
即使在工作区结果暂存之前捕获失败,停止和空闲暂停也会在网关重新启动时保留此最终保存义务。启动在释放机器之前恢复协调。如果网关更新更改了工作程序捆绑包,则恢复会停止旧进程,将当前捆绑包安装在确切的排出位置上,并完成保存和拆卸,而无需重新启动轮次。失败的捕获或安装会保留计算机以进行另一次恢复尝试。如果计算机消失,则只有最后接受的工作空间会幸存,并且会话会记录故障,如下所述。
当准备替换工作人员时,该轮流仍排队等待准入,并使用设置操作的现有超时。它不被视为停顿的模型转弯。聊天**Stop**也取消更换设置;网关等待任何开始的配置工作完成并清理,然后再释放其所有权。当设置等待完成后,停止或被取代的转弯无法稍后启动替换。
### 恢复失败的放置
失败的放置并不总是意味着其工作人员已停止。当仍然需要清理时,侧边栏、会话列表和放置芯片使 **Stop 云工作人员…** 可用。一旦确认先前活跃的工作人员已离开,请发送另一条消息以继续同一对话。网关使用新的执行权限恢复其在原始设备或云配置文件上上次保存的工作区。待处理的工作区结果、未完成的恢复和放置移动必须在替换开始之前解决。停止或更改会话会取消挂起的恢复;被中断的回合不会重播。
放置芯片还提供 **Restart 会话…**,用于选择 **Gateway · local**、符合条件的配对设备或配置的云配置文件。当初始设置从未完成或原始目标不可用时,需要进行此选择。本地恢复在启用本地转向之前恢复最后接受的工作区检查点,包括为仅存储库会话创建托管工作树。丢失的工作人员的未同步更改可能不可用。当重新启动开始时,先前的故障将被清除;重新启动失败会报告新错误。在继续之前必须取消存档会话。
### 存档或删除会话
当网关记录存档时,存档会立即将会话隐藏在 Control UI 中。活动会话工作仍必须停止,并且运行或配置工作线程保留正常的停止和工作区协调流程。没有实时转向的已经失败的工作线程不会阻止归档:网关保留其放置、环境、工作树和恢复工件,而现有的清理所有者重试拆卸。无需修复提供程序清理失败即可存档失败的会话。
当保留的签出不需要重建时,撤消可以恢复可见性,而失败的工作线程清理仍处于待处理状态。这不会重新启动工作程序或丢弃其清理状态。实际的结帐恢复和会话删除保持了更强的清理要求。记录存档后,工作树清理失败将被推迟并记录;它不会将保存的存档变成失败的请求。垃圾收集会保留具有未解决的工作人员所有权的工作树,并稍后重试符合条件的清理。
在删除会话或恢复状态之前,删除非主云工作线程会话仍会停止并回收其工作线程。活动工作线程会收到最终的工作区协调,并且必须在删除成功之前解决挂起的配置或失败工作线程的清理问题。恢复回收的会话会保留放置元数据,以便下一回合可以调度具有相同工作区配置文件的新工作人员。
当单会话删除或存档被离线设备上的未同步工作阻止时,Control UI 会提供单独的丢失确认。重新连接设备以保留其更改,或显式丢弃未同步的设备文件和正在进行的工作。确认恢复到网关后,UI 重试请求的删除一次。取消会使待处理的结果保持不变。批量操作永远不会确认整个选择的损失;在重试选择之前分别恢复每个受影响的会话。
### 通过 API 回收
对于损坏或失控的云环境,管理员可以调用仅用于管理的 `environments.destroy` 方法,并将 `{ "force": true }` 作为最后的手段。强制拆卸会永久标记放置失败,并在破坏环境之前放弃任何不一致的远程结果。对于无法访问的配对设备,强制销毁无需等待重新连接即可成功,并丢弃未同步的设备更改。
等效的写范围会话 RPC 是:
```bash
openclaw gateway call sessions.reclaim \
--timeout 600000 \
--params '{"key":"agent:main:big-refactor"}'
```
在轮次处于活动状态时调用 `sessions.reclaim` 会取消正在运行和挂起的工作,并在工作区协调和拆卸之前记录活动轮次的停止结果。已在等待的输入或在回收正在进行时已提交的输入,在回收完成时不会重新启动工作线程。回收完成后发送新消息以开始新工作。
`sessions.reclaim` 还会取消仍在准备或配置的调度,包括注册前的项目快照和传输工作。一旦出现请求或配置位置,UI 就会公开 **Stop 云工作人员…**。 Crabbox 停止活动的 acquisition/setup 命令、准备等待或注册等待,然后网关在报告成功之前完成权威租约清理。初始提示仍为**未发送**;只有显式重试才能稍后发送。无法中断操作的提供者仍保留其清理所有权,直到该操作解决为止。取消永远不会报告调用者超时作为释放的证据。
取消和排出准备立即在放置队列之外开始,因此有针对性的恢复可以完成终端工作区结果并释放其轮次声明。被当前所需工作人员配置文件拒绝的网关移动的待决结果可以解决其接受的检查点并释放其轮次声明,而无需实现网关结帐或拆除其耗尽的源。在策略允许或 Stop 安全地回收源之前,Move 保持可检查状态。如果恢复发现源销毁已提交,或者所需工作人员策略在销毁或最终放置准入期间激活,则其接受的结果将作为回收的结果进行处理,而无需授权拒绝的目标。在策略允许移动时准备的网关结账仍然可用,但结算不会在策略撤销后启用本地转向。成功停止仅废弃该源的过时移动。只有进入清理才会加入会话队列。最终工作区协调和机器释放等待同一会话的早期放置操作,包括承认的恢复和强制破坏其环境。该会话的后续调度或移动会等待整个 Stop,因此它无法在 Stop 完成之前替换工作线程。
调度、移动、停止和配置恢复按会话进行排序。缓慢的提供者检查、拆卸或配置另一个会话不会延迟它们。共享环境的操作仍然使用该环境的提供者和工作区排序。强制销毁在加载持久所有者之前保留附加会话和实时放置操作,并等待其先前排队的工作,因此稍后的调度或移动无法在该读取期间超越销毁。仅在闲置时才保留额外的耐用所有者;忙碌的所有者保留环境和工作空间顺序,而不会引入可能导致死锁重叠破坏的第二个队列等待。失败的所有者读取会释放这些保留并报告失败。
调度和协调优先在中断当前工作之前,Move 会验证并记录其持久决策。在中断已承认的会话工作并等待其轮次声明释放时,它们将会话准入借给同一会话的目标恢复,包括已在操作后面排队的恢复。该恢复仅解决待处理的工作空间结果;它无法恢复已承认的移动或运行后续布局修复。该操作等待每个借出的恢复解决后再继续,包括释放等待失败或声明等待被取消时。完全恢复扫描仍然会跳过繁忙的会话,并且停止清理、强制销毁、配置恢复和稍后的放置操作将保留其正常的队列顺序。
活动工作线程安全停止后,结果放置为 `reclaimed`。回收还会等待正在进行的调度,并在返回 `local` 之前重试失败放置的挂起拆卸。没有其他放置状态成功回收结果。
Crabbox 租赁拆解为 CLI 的完全有界释放尝试、重试、清理观察和流程结算预留了时间。检查保持较短的超时。失败的节点注册也为拆卸前的诊断预留了时间;可选的图像捕获有其自己的额外预算。
如果在停止或移动期间提供程序拆卸失败或超时,则即使恢复随后完成清理,请求也会报告有界的、经过编辑的提供程序原因。在失败的放置上重试停止会报告清理尝试的原因,这可能与原始会话失败不同。请遵循报告的恢复指南并在重试之前检查当前位置。当销毁不确定时,专用云工作人员可以保持连接状态,但其封闭权限无法恢复远程工作空间进程。
当清理仍待处理时,放置会保留原始故障和最新的清理原因。重复的恢复检查不会附加同一错误的另一个副本,并且长时间的诊断会保留最终的提供程序原因。
终止或无法使用的提供商租约并不能证明其机器已被删除。 OpenClaw 隔离该工作人员,停止续订租约,并请求明确的提供程序拆除。失败的拆卸仍可重试;丢失的本地索赔或较早的“未找到”警告不会将失败的停留变成成功。
## 穿过API
对于自动化,请从 `sessions.describe` 读取有效布局的 `generation`、`environmentId` 和 `activeOwnerEpoch`,然后将这些确切的源事实提供给 `sessions.move`:
```bash
openclaw gateway call sessions.move \
--timeout 1500000 \
--params '{"key":"agent:main:big-refactor","expected":{"generation":5,"environmentId":"worker:source","ownerEpoch":2},"target":{"kind":"gateway"}}'
```
当原始决策放弃其源时,失败的 Move 将其原始请求事实投射到 `placementMove.retry`:`expected`、`target` 和 `abandonSource: true` 中。对于仍在 `draining` 中的失败移动,请通过将会话 `key` 和可选 `agentId` 添加到该描述符来重试。不要替换掉消耗位置的新一代或为未完成的移动选择不同的目标。描述符不授予任何权限:网关仍然验证会话访问、确切的来源和当前策略。恢复可能会在重试到来之前完成;拒绝后刷新展示位置。
工作线程目标使用 `{"kind":"profile","profileId":"aws","os":"linux","machineClass":"tiny"}` 或 `{"kind":"device","deviceId":"paired-device-id"}`。省略 `os` 或 `machineClass` 以使用相应的配置文件默认值。迁移到具有不同操作系统或类别的相同配置文件会取代工作人员。过时的来源会被拒绝,而不是移动新的展示位置。对于网关目标,成功结果以 `local` 结尾;对于工作线程目标,成功结果以 `active` 结尾。
仅存储库会话的显式网关移动或本地恢复将其固定源提取到托管项目中,创建托管工作树,并在启用本地转向之前恢复其接受的检查点。普通创建、停止、在工作线程上重新启动以及发布不会实现此签出。配置的GitHub主机必须与记录的存储库主机匹配;在切换主机后重试移动之前恢复该配置。本地恢复需要上游访问固定提交、任何记录的发布提交,以及足够的网关磁盘空间用于正常的托管工作树流。它需要进行中的发布来解决并拒绝与记录的推送不同的远程分支;它从不采用不相关的远程提示。获取使用共享存储库身份,因此先前的个人出版物不需要重新连接该个人帐户即可在本地移动或恢复。
自动化可以通过将 `"abandonSource":true` 添加到上面的确切源网关请求来明确放弃离线配对设备源。对于配置文件或设备目标,以及当源运行器可用或无法证明是确切的设备绑定时,该字段将被拒绝。此路径具有与 Control UI 确认相同的未同步文件和进行中工作丢失边界。
## 中断后恢复
布局通过持久状态机 (`local → requested → provisioning → syncing → starting → active`) 移动,因此网关在调度中重新启动可进行协调,而不是泄漏机器;中断的挂起配置保留其固定的提供程序操作以进行启动重放。失败的模型转动会保留活动布局以供重试。在网关源工作树中,工作区路径冲突保留本地版本,应用其余的云结果,并保留暂存的云引用以供检查;其他协调或生命周期故障保留其持久的恢复围栏和诊断尾部,直到恢复可以安全地重试或回收环境。
为一名工作人员请求的恢复会检查该环境,并仅恢复其关联的工作区结果和移动,等待这些会话的早期操作。定期后台扫描会协调所有环境,然后一次恢复一个会话。他们会跳过未完成的放置操作的会话,并在下一次扫描时重试。孤立工作区清理也会等到共享该工作区的每个会话都空闲为止。有针对性的恢复不会等待不相关的背景扫描。这些队列只存在于正在运行的Gateway中;更新不会更改持久放置状态或配置。
如果轮次报告 `Cloud worker finished, but its workspace result could not be reconciled`,请检查冒号后面的原因。失败的节点清单捕获包括其有界的、经过编辑的 stderr 或 stderr 为空时的终止状态。 Node 清理保留上传和验证之间所需的清单,包括其他工作人员同时完成时的清单;增加传输超时并不能修复丢失的清单。
协调会将文件与上次同步的工作区进行比较,而不是与工作人员当前的 Git `HEAD` 进行比较。因此,即使 `git status` 是干净的,变基也可以返回许多上游更改。结果支持两个 250,000 个条目清单中最多 500,000 条 before/after 记录,每个更改文件 64 个 MiB,以及更改内容或生成补丁的 768 个 MiB。压缩的 SQLite 回滚快照仍限于 256 个 MiB。 Git 导入准备使用临时文件,因此它不会两次缓冲整个结果。这些结果限制独立于 4 GiB 调度库存和附件限制。
## 机器故障后仍保留的内容
当网关承认会话存储时,活动工作轮将保持会话存储的选择状态。更改会话路由不会将该回合的记录、实时诊断或身份验证配置文件更新重定向到另一个商店。被替换的会话或关闭的轮次将失去写入权限;重新连接工作人员不会为旧轮次选择新商店。
网关在两种模式下都拥有存储的会话记录。在工作人员的会话写入稳定之前,工作人员轮流提交每个完整的用户、助手和工具结果消息; Remote-exec 使用正常的本地harness转录路径,因为 Codex 应用程序服务器保留在网关上。如果本地工作人员在消息中消失而网关仍在运行,则网关会在释放轮流之前将其未提交的辅助文本保存为中断的回复。网关尚未收到的文本和工具进度仍然可能会丢失。
对于使用 OpenClaw 工作轮换模式的聊天轮换,网关还会在节点丢失时记录每个未完成的工具调用的错误结果:节点断开连接,其结果未知,并且模型必须在重试具有副作用的操作之前验证状态。 OpenClaw 从不重放中断的工具调用。非幂等命令可能在节点死亡之前已经完成;模型必须检查文件、进程或其他受影响的状态,就像人类操作员一样。
网关记录中断的工作区恢复并在正常的两分钟工作人员准入窗口内等待节点。一旦工作人员可用且工作空间恢复稳定下来,已保存记录的已承认的聊天轮次将通过其自己的回复所有者进行自动后续跟进。在更新的排队输入之前,它会从该记录继续相同的会话。在此后续过程中第二个节点丢失不会安排另一次延续。如果工作线程仍然不可用、保存失败、恢复无法安全完成,或者此执行没有匹配的延续所有者,则错误表明此轮不会自动继续。在正常放置恢复后,会话仍可用于另一条消息。
工作线程轮转录提交会验证现有数据库工作线程中的会话,从而避免在每次提交之前读取单独的会话条目。在写入之前再次检查捕获的会话修订并通过发布保留。最终答复在持久的笔录完成后进行;工作区协调及其单独的冲突或恢复通知在后台完成。此优化只需要更新Gateway即可;转录本存储和工作协议保持不变。
工作人员实时预览是当前助理消息的快照。更正、较短的预览和空的替换会更新该消息,而不会依次重播或删除较早的消息。明确的评论不会出现在答案文本中,包括当其阶段到达消息完成时。实时预览是有限的,并且可以在流降级后删除;承诺的成绩单仍然具有权威性。
工作空间状态具有更宽的损失窗口。已完成的轮次会在释放其声明之前协调云文件,并且 **Stop 云工作线程…**、存档或删除会话会在销毁活动工作线程之前执行最终协调。调节之间所做的更改仅存在于该框上,如果该框消失,则可能会丢失。仅在安全回收成功后才会继续删除。对于网关源会话,它会在删除 `refs/openclaw/snapshots/` 下的托管工作树之前对其进行快照;对于仅存储库会话,它会删除源所有者并保留检查点工件。失败的安全回收会保留会话和未同步的恢复状态并报告错误。
对于仅限存储库的会话,网关会在不可变的检查点中保留完整的 base/current 文件清单和更改的文件内容。它不保留上游 Git 历史记录或未更改的基本文件的完整副本。因此,替换工作人员需要固定的上游提交可获取或已存在于节点的已验证种子缓存中。显式网关移动需要提交可用于其项目克隆的内容。移动或删除的远程分支不会更改固定的提交,但失去对该提交的访问权限可能会阻止恢复。
检查点历史记录保留到会话删除为止;托管工作树 7 天空闲清理和 30 天快照到期不适用。一起备份 [ 状态数据库和存储库工件 ](/reference/database-schemas#cloud-repository-workspaces)。这节省了网关签出空间,而不是会话接受的更改使用的所有存储空间。
当工作线程处于活动状态时,**Files**、文件编辑和差异通过经过身份验证的节点连接检查其实际结账。停止后,保留的更改文件预览和更改路径仍然可用,但未更改的上游文件、编辑和完整差异需要正在运行的工作程序。差异面板说明工作区已停止。打开这些视图永远不会替代代理的网关工作区。
在回收的放置或先前活动的失败放置之后,一旦清理和工作区恢复完成,下一条消息将在原始目标上启动替换。如果初始设置从未完成或原始目标不可用,请使用 **Restart session…** 选择继续的位置。下一回合从网关记录重建模型上下文,因此它从跨越持久性边界的消息继续。
]