跳转至

Cloud session 生命周期和持久性

sessions.dispatch 做什么,已完成的回合如何对账回 Gateway,移动、停止和回收如何表现,以及哪些状态在机器之后仍然保留。

Gateway 工作区预检有十分钟预算,覆盖 Git 枚举和文件检查。Stop 会在分配工作进程之前取消该准备;已启动的文件系统操作会先完成,然后才移除临时清单文件。

工作区清单检查、原始清单解析与比较,以及批量文件哈希,在 Gateway 和节点上的有界计算池中运行。对已解码清单的比较会同步针对其类型化条目运行,避免对大型清单再复制一份。独立工作区可以在主线程处理请求时继续推进。主机保留会话权限、工作区变更、Git 子进程和持久化接受;取消操作会等待其未完成工作结束后再清理。

节点工作区复用该池进行清单捕获,而不是为每次验证启动新进程。Git 清单命令仍由节点主机负责。当节点工作区和 Gateway 工作区仍与已接受基线匹配时,对账会跳过应用步骤及其额外检查。它仍会在最终静默更新前后验证两个工作区,重新检查实时所有者,并为重启恢复保留持久化结果引用。任一侧发生变化都会使用完整对账路径,包括冲突处理。

sessions.dispatch 会关闭本地回合准入,排空活动工作,验证工作区源,为所选执行模式预配租约,并执行设置。启用项目热镜像时,它会准备已提交检出和节点运行时,并在注册前捕获任何所需镜像。然后它会注册节点,安装所需的固定版本 Gateway 包,应用会话工作区,并在放置达到 active 所有权时返回。Gateway 源清单验证发生在提供商分配之前。仅仓库清单会在获取固定源后于已注册节点上捕获;任一路径都会报告可处理的大小或条目限制。首次云调度需预留几分钟,包括必要时捕获;后续调度可复用镜像、项目种子和运行时安装。之后,像往常一样与会话交互。OpenClaw 回合会路由到工作进程;Codex 原生操作运行在已授权的云节点、配对设备或受支持的 SSH 后端提供商上。

在 Control UI 中启动云会话会立即显示你提交的 prompt,并在工作进程启动期间保持其可见。预配和工作区准备会显示在聊天中的其下方。prompt 仅在放置处于活动状态后发送;打开一个正在预配的会话也会在对话中显示其进度。

Gateway 更新会保留已附加的云机器,并就地安装新的工作进程包。Gateway 在准入新构建之前会停止旧工作进程并吊销其凭据。机器的工作区、已安装包和桌面仍可用。安装失败会保留租约用于恢复,而不是分配替换机器。节点必须支持当前包安装程序并重新连接,恢复才能完成。

Gateway 更新后,后台对账开始在重新连接的配对主机上安装新运行时,这些主机保留会话,通常在重新连接后约一分钟内。Gateway 日志会记录开始、每 30 秒的进度、带原因的中断以及完成;使用它们跟踪此后台安装,因为诸如 sessions.describe 和 sessions.list 的会话 RPC 可能会等待对账轮次完成。当首次调度或已提交回合执行安装时,其进度也会以 workerRuntimeInstall 形式出现在预配和活跃会话放置中,以及 Control UI 聊天通知中。在首次调度执行安装期间,卡住会话诊断会在字节流动时报告 worker:runtime_install。

如果已提交回合在执行开始前遇到旧构建,OpenClaw 会释放该未启动的声明,刷新运行时,并使用新权限重试一次准入。这也会重试之前失败的更新,因此重新连接的工作进程可以处理提交,而无需等待周期性恢复。会话和原始提交保持完整。已交给工作进程的工作绝不会通过此准入重试重放。

如果 Gateway 重启或更新后节点仍在重新连接,同一提交会等待其当前节点连接,然后再重试准入。当前工作进程构建重新连接时无需刷新运行时。等待使用现有的两分钟工作进程准入窗口,并以回合配置的超时为上限。Stop、被替换的会话或放置,以及另一次 Gateway 重启会取消等待。不兼容的节点运行时仍会报告需要更新。

在 Gateway 正在其机器上安装更新的工作进程运行时期间到达的消息,会等待该安装完成后再准入,而不是中断它。仍在传输到节点的字节会保持回合存活;Stop、回合超时或 Gateway 重启会取消等待。安装完成后,回合在更新后的运行时上运行;失败的更新遵循现有的待更新恢复。

Gateway 的优雅停止和重启会在排空一开始就中断 OpenClaw 工作进程回合,因为关闭期间工作进程协议准入已关闭。Gateway 会保留每个被中断回合的声明和待处理工作区结果,用于启动恢复,而不是等待工作进程准入重试或使放置失败。本地嵌入式回合保持正常的排空行为。

对于因重启而中断的节点支持会话,恢复会确认旧工作进程已停止,完成待处理工作区结果,并退役被中断的回合,同时保留机器。没有完成确认的被中断声明会进入相同的结果恢复流程,因此已在保留机器上做出的编辑会在下一回合之前被接受。下一条消息获得新权限;它不会自动重放被中断的工具调用。显式 Stop、Move 和失败提供商清理保留正常的拆除行为。

工作区清单下载在节点支持时使用 gzip,并保持与未压缩传输的兼容性。压缩响应及其解码后的清单均保持在 64 MiB 安全限制内;节点在更改工作区之前会验证解码后的清单。

对于 Gateway 源 worktree,同步不是连续的:OpenClaw 在派发时发送一份新的合格清单,而不是在现有 worker 的每个回合之前都发送。仅在派发之后在 Gateway 上创建的文件仍保留在本地,并且不在已接受的清单中。要发送这些新输入,请完成当前回合,停止云 worker,然后再次派发。

Remote-exec 技能包是执行工作区内的私有、只读回合输入。传输会将它们的文件分组为有界批次,以避免为每个小文件进行单独的网络往返。它们会被普通 Git 暂存忽略,并被排除在工作区同步和协调之外。正常回合清理会删除它们;清理失败会被报告。在准备下一个回合之前,OpenClaw 会从该工作区中删除遗留的私有技能副本,包括初始化响应丢失的副本。当新回合未选择任何技能时,此操作也会运行。恢复会保留附件和无关目录,清理失败会停止准备并提供重试指导。

技能目录和显式技能引用指向当前回合的 worker 副本。指令和相对脚本使用同一位置;对 Gateway 源的编辑适用于后续回合。

基于文件的技能可以使用文件符号链接,例如 CLAUDE.md 指向 AGENTS.md。Worker 交付会将目标的精确字节和执行标志复制到别名路径处的常规文件中。目标必须保持在同一技能内部,并属于其包含的文件;指向被排除的 Git 或依赖树的链接、目录链接、损坏的链接、循环和硬链接都会被拒绝。受管理的技能库导入和已发布修订版保持无链接。

断开的 worker 没有清理期限。当权威保留快照释放其工作区代际时,节点也会回收副本,包括重启后;SSH 支持的副本遵循工作区/提供程序拆除。仅重启节点不会删除已保留的代际。技能副本路径仅在其回合内有效,因此后台命令不得依赖它们之后仍然可用。

已完成的云回合在回合占用释放之前会保留合格的、大小受限的工作区文件。仅仓库会话接受 Gateway 裸制品仓库中的累积不可变检查点。Gateway 源会话会将这些更改应用到其受管理的 worktree。Worker-turn 使用其终端 worker 事件创建持久的待处理结果围栏。Remote-exec 等待工作区静默,并在本地 Codex 尝试后进入相同的协调流程。在应用结果之前,Gateway 会将完整的已认证基础/当前清单以及每个更改后的结果 blob 作为 Git 引用暂存到 refs/openclaw/worker-results/ 下;删除由清单表示,无需 blob。即使 Gateway 在应用期间停止,这也能保持云差异可恢复,而不会重复未更改的基线内容。工作区结果使用 Git 文件语义:常规文件、可执行位、符号链接、添加、更改和删除会被保留,而空目录和其他目录模式则不会。Gateway 源更改保留在受管理的 worktree 中,用于正常审查和提交;仅仓库更改保留在节点上以及已接受的检查点中。

OpenClaw worker-turn 会话最多可让一个已稳定的 worker 进程空闲 两分钟,每个节点最多有两个空闲 worker。后续回合会复用 已加载的运行时并带有新的回合权限;放置激活不会启动 worker。空闲 worker 继承现有的后台保留协调 契约:该进程在进程模式和容器模式下都保持存活,并且 捕获/验证/续期/验证清单围栏会检测并发工作区更改。 回合连接和临时配置文件会在空闲就绪之前被释放。 空闲 worker 可因容量、更新和断开清理而被驱逐; 后台命令则不会。参见 节点会话托管 了解兼容性和内存成本。

工作区静默会在一个 30 秒预算内重试缓慢的进程探测。恢复看门狗最多跨四次遍历保留未完成的进程,遍历之间最多有七秒退避,因此恢复具有 127 秒的总探测和退避预算。缓慢的探测不能反复恢复相同的 worker 并饿死其他 worker。每个探测从两秒宽限开始,超时后会获得更多时间。耗尽时,租约中会保留未完成的 PID/启动引用和原因,供 Gateway 的下一次恢复尝试使用;请检查主机负载和 ps 可用性,然后重试工作区恢复。失败的协调会保留可恢复的工作区结果,并通过正常恢复流程报告原因。

在受支持的 Linux 节点主机上,Gateway 会通过重连范围的节点清单一起协商工作区静默和前台进程所有权。节点主机工作区运行时独立于单个命令和环境拥有的预览进程,拥有静默看门狗。其精确的进程标识和租约 nonce 在传输和最终协调期间保持绑定。租约释放或成功的过期恢复会在释放其工作区保护之前并入看门狗退役。仅刷新便携式 worker 捆绑包不会更新此原生主机功能。

在分阶段更新期间,较旧的 Gateway 和节点主机会保留现有的脚本和命令路由。Windows、macOS 和 Bun 不会通告新能力;Windows 继续使用其共享主机 SQLite 租约,而不使用分离的看门狗。能力选择是自动的,不是操作员设置。租约会保持其选定的方言直到释放,并且支持丢失会在派发之前拒绝原生操作,而不是静默更改所有权。此兼容性路径保留现有的平台限制;受限的 Linux 主机仍然需要匹配的原生主机/worker 支持,以进行进程所有权修复。

结果暂存和回滚会保留受支持文件名的精确形式以及文件字节,独立于 Git 属性和检出编码。

如果工作区传输所有权在上传期间关闭,Gateway 会立即断开上传方连接,包括在发送完所有字节后等待校验期间。已取消的上传不会成为已接受的工作区结果。

替换和 Gateway Move 会针对固定基线恢复文件;它们不会恢复 worker 提交历史、合并阶段或部分暂存。在已记录的云发布之后,Gateway Move 会从该已验证的已推送提交继续本地分支,同时保留后续已接受的文件更改以供审查。继续之前,请审查恢复的冲突标记文件。当可发布检查点可用时,恢复会将其新增文件标记为 intent-to-add,并让新增和编辑的内容保持未暂存以供审查。已接受的发布删除会作为已暂存的索引删除恢复;任何恢复的文件字节仍可用。仅用于恢复的被忽略文件和附件不会纳入发布。如果发布捕获不可用,恢复的被忽略文件在发布前需要显式执行 git add -f。

对于每个 OpenClaw worker-turn,Gateway 会将其生效的共享 GitHub 身份绑定到 worker 的 exec 启动中,使用与普通 Gateway 主机 exec 相同的 tools.github 选择。当该身份可用时,gh 已认证,HTTPS git push 使用 gh auth git-credential 助手。worker 检出携带会话拥有的分支名称,并且对于 GitHub 仓库,携带一个 HTTPS origin。代理直接从 worker 提交并推送。协调保留文件内容,而不是 worker 的提交历史,因此从 worker 推送的工作会先落到 GitHub。在每个回合开始时,如果本地分支落后,worker 会将其检出快进到 origin 上的会话分支,从而引入先前 worker 推送的历史;分叉的本地分支保持不动。

Codex remote-exec 会话和 Control UI 的 发布 PR 操作使用 Gateway 发布代理;remote-exec 代理使用 github_publish 请求发布。仅仓库发布使用已接受的 Git 规范化检查点,而不创建 Gateway 检出。共享或明确选择的个人发布可以在 Stop 之后使用该检查点;个人凭据仍保留在 Gateway 上。参见 使用你的账户发布。

对于 Gateway 源工作树,应用使用最新已接受清单作为合并基线,在分发时初始化,并在每次已接受的协调后推进。仅云更改会被应用,仅本地更改保持原位,两侧都更改的路径使用三方保留本地策略。冲突回合仍会完成:会话记录会报告有界路径摘要和已暂存结果引用,放置会向 Control UI 暴露相同冲突,无冲突的云更改保持已应用。通知包含 git show <ref>:<path>,用于检查存在的云文件,以及一个顶层字面路径规范 git checkout <ref> -- <path> 命令,用于从任何工作区目录获取它。在 Bash 或 zsh 中运行这些命令(Windows 上使用 Git Bash)。如果检查显示路径不存在,则云结果已删除它;请手动验证并删除保留的本地路径。如果检出报告文件/目录阻塞,请移动或删除阻塞的本地路径并重试。如果已暂存引用本身已消失,请将该通知视为过期,不要更改本地路径。冲突的已暂存引用在正常回合围栏释放后仍可用;后续干净结果会清除通知并退役旧引用,而显式围栏移除是最终清理边界。

当有围栏的结果仍在协调时,Control UI 会将后续输入接收为持久保管,并显示其正在等待工作区同步。Gateway 会在先前声明释放后自动启动后续输入;请勿重新发送。如果协调失败,放置会报告恢复错误,并保留排队输入以供恢复流程使用。重启时,恢复会在过期声明清理之前发现待处理和已暂存的结果,完成检查点接受或本地应用,并仅在保留结果之后回收已死亡的环境。已接受的 Stop 结果可以在重启后完成清理,即使其云环境已被销毁;这不会恢复旧回合的实时权限。对于 Gateway 源工作树,有界的 SQLite 回滚日志使中断的文件系统应用可恢复,而无需重放已接受的变更。

每次恢复尝试都会一次性绑定当前规范会话存储,并在其冲突报告和结果结算中保留该源。在恢复期间更改会话存储路由无法将这些写入重定向到另一个存储,即使两个存储包含相同的会话 ID。缺失或被替换的源、会话代或恢复所有者会使待处理结果、已暂存引用和未完成日志保留给后续授权恢复尝试。已归档会话可以完成保留结果恢复,而无需再次变为活动状态。

要在其他地方继续同一会话,打开 在云端运行 标签并选择 移动会话…。具有 operator.write 的操作员可以选择 Gateway 或符合条件的配对设备;选择已配置的云配置文件需要 operator.admin。配置文件还可以提供操作系统和机器类别,机器列表会根据所选系统进行过滤。移动到当前配置文件但使用不同的生效操作系统或类别会替换其 worker;这不是就地调整大小,原生大小覆盖可能优先于类别。Gateway 会关闭新准入,中断任何活动回合,协调源工作区,销毁旧环境,然后激活目标。被中断的回合永远不会重放:部分输出可能消失,移动后你需要重新发送下一个回合。精确目标(包括操作系统和机器覆盖)以及有界错误是持久的,因此重新连接后,Control UI 会显示 正在移动到… 或恢复错误。如果 Gateway 在目标变为活动之前重启,请求绑定权限会丢失:恢复会完成安全的源清理,将放置标记为失败并附带重试消息,并且不会配置目标。重新连接,然后再次选择 移动会话…。

活动的配对设备放置在 runner 断开连接时仍保持 active。 Control UI 显示 设备离线 和 等待设备重新连接;设备返回后重试。等待是默认行为,并保持远程所有者和工作区完整。任何进行中的 Codex remote-exec 尝试都会明显失败,其节点 exec-server 和子进程会被终止,重新连接同一配对设备只允许发起一次全新尝试;已断开的 stdio 会话永远不会恢复。在 Gateway 上继续… 是明确具有破坏性的:在数据丢失确认后,它会放弃确切的离线设备所有者,并从最后一次 Gateway 同步的工作区恢复,而不重放。未同步的设备文件和进行中的工作可能丢失。这种明确放弃还会对活动的本地 Codex 回合声明进行隔离,而无需等待离线节点的确认。Gateway 会在将会话交还本地所有权之前,撤销被放弃工作进程的凭据、工具和结果权限。它会保留确切的旧设备清理范围,直到重连确认物理工作进程已关闭;此清理无法停止或撤销后续会话所有者,包括在 Gateway 重启后。在 Gateway 上继续并不声称离线进程已经停止。如果设备已经可用,请改用普通的先协调再迁移操作。

要在 Control UI 中停止正在运行的回合,请先使用聊天中的 停止 或 /stop。当没有回合在运行时,从放置芯片中选择 停止云端工作进程…。Gateway 在销毁环境之前会执行最后一次工作区协调。已处于 draining 或 reconciling 的放置正在完成拆除;在重置或删除会话之前,请等待其徽章变为 reclaimed。处于 draining 或 destroying 的环境尚未确认释放:拆除错误仍会可见,并且可以重试停止。在回收后开始另一个回合,只有在其原始云端配置文件仍为同一提供商配置时,才会配置替代工作进程;删除该配置文件可防止新的云端分配。

停止和空闲挂起会在 Gateway 重启后保留此最终保存义务,即使在工作区结果暂存之前捕获失败也是如此。启动会在释放机器之前恢复协调。如果 Gateway 更新更改了工作进程捆绑包,恢复会停止旧进程,在该确切的正在排空的放置上安装当前捆绑包,并在不重启回合的情况下完成保存和拆除。捕获或安装失败会保留机器以进行另一次恢复尝试。如果机器已消失,只有最后接受的工作区会保留,并且会话会记录失败,如下所述。

在准备替代工作进程期间,回合会保持排队等待准入,并使用设置操作的现有超时。它不会被视为停滞的模型回合。聊天 停止 也会取消替代设置;Gateway 会等待任何已启动的配置工作稳定并清理完毕,然后再释放其所有权。已停止或被取代的回合无法在设置等待结束后稍后启动替代工作进程。

失败的放置并不总是意味着其工作进程已停止。侧边栏、会话列表和放置芯片会在仍需要清理时保持 停止云端工作进程… 可用。一旦确认先前活动的工作进程已消失,请发送另一条消息以在同一对话中继续。Gateway 会在原始设备或云端配置文件上恢复其最后保存的工作区,并附带新的执行权限。待处理的工作区结果、未完成的恢复以及放置迁移必须在替代工作进程启动之前完成。停止或会话变更会取消待处理的恢复;被中断的回合不会被重放。

放置芯片还提供 重启会话…,用于选择 Gateway · 本地、符合条件的配对设备或已配置的云端配置文件。当初始设置从未完成或原始目标不可用时,需要此选择。本地恢复会在启用本地回合之前恢复最后接受的工作区检查点,包括为仅仓库会话创建受管理的 worktree。来自丢失工作进程的未同步更改可能不可用。先前失败会在重启开始时清除;失败的重启会报告其新错误。归档的会话必须先取消归档才能继续。

归档会立即在 Control UI 中隐藏会话,同时 Gateway 记录归档。活动会话工作仍必须停止,正在运行或配置中的工作进程保留正常的停止和工作区协调流程。已失败且没有活动回合的工作进程不会阻止归档:Gateway 会保留其放置、环境、worktree 和恢复产物,同时现有清理所有者重试拆除。提供商清理失败不需要为了归档该失败会话而修复。

当保留的 checkout 无需重建时,撤销可以在失败工作进程清理仍待处理时恢复可见性。这不会重启工作进程或丢弃其清理状态。实际的 checkout 恢复和会话删除保留其更强的清理要求。归档记录后,worktree 清理失败会被延迟并记录日志;它不会将已保存的归档变为失败请求。垃圾回收会保留具有未解决工作进程所有权的 worktree,并稍后重试符合条件的清理。

删除非主云端工作进程会话仍会在移除会话或恢复状态之前停止并回收其工作进程。活动工作进程会接受最终工作区协调,待处理的配置或失败工作进程清理必须在删除成功之前完成。恢复已回收的会话会保留放置元数据,以便下一个回合可以分派一个具有相同工作区配置文件的新工作进程。

当单个会话的删除或归档被离线设备上的未同步工作阻止时,Control UI 会提供单独的数据丢失确认。重新连接设备以保留其更改,或明确丢弃未同步的设备文件和进行中的工作。在确认恢复到 Gateway 后,UI 会重试所请求的移除一次。取消会保持待处理结果完整。批量操作永远不会为整个选择确认丢失;在重试选择之前,请分别恢复每个受影响的会话。

对于损坏或失控的云环境,管理员可以将 { "force": true } 作为最后手段,调用仅限管理员的 environments.destroy 方法。强制拆除会持久化地将 placement 标记为失败,并在销毁环境之前放弃任何未协调的远程结果。对于无法访问的配对设备,强制销毁会在不等待重新连接的情况下成功,并丢弃未同步的设备更改。

等效的写作用户会话 RPC 为:

openclaw gateway call sessions.reclaim \
  --timeout 600000 \
  --params '{"key":"agent:main:big-refactor"}'

在 turn 处于活动状态时调用 sessions.reclaim 会取消正在运行和待处理的工作,并在工作区协调和拆除之前记录活动 turn 的已停止结果。已经等待的输入,或在 reclaim 进行期间提交的输入,不会在 reclaim 完成时重启 worker。请在 reclaim 完成后发送新消息以开始新工作。

sessions.reclaim 还会取消仍在准备或 provisioning 的 dispatch,包括入列前的项目快照和传输工作。一旦请求或 provisioning 的 placement 出现,UI 会显示 停止云 worker…。Crabbox 会停止活动的获取/设置命令、就绪等待或入列等待,然后 Gateway 在报告成功之前完成权威的 lease 清理。初始 prompt 保持为 未发送;只有显式重试才会稍后发送它。无法中断操作的 provider 仍保留其清理所有权,直到该操作结束。取消操作绝不会将调用方超时报告为释放证明。

取消和 drain 准备会立即开始,且在 placement 队列之外,因此定向恢复可以完成一个终态工作区结果并释放其 turn 声明。只有已进入的清理会加入 session 队列。最终工作区协调和机器释放会等待同一 session 的较早 placement 操作,包括已准入的恢复及其 environment 的强制销毁。该 session 稍后的 dispatch 或 move 会等待整个 Stop 完成,因此不能在 Stop 完成之前替换 worker。

Dispatch、Move、Stop 和 provisioning 恢复按 session 排序。另一个 session 的缓慢 provider 检查、拆除或 provisioning 不会延迟它们。共享同一 environment 的操作仍使用该 environment 的 provider 和工作区顺序。强制销毁会在加载持久化 owner 之前预留已附加的 session 和活动的 placement 操作,并等待它们较早排队的任务,因此稍后的 dispatch 或 Move 无法在该读取期间超越销毁。只有空闲时才会预留额外的持久化 owner;繁忙的 owner 保留 environment 和工作区顺序,而不会引入可能导致重叠销毁死锁的第二队列等待。owner 读取失败会释放这些预留并报告失败。

Dispatch 和 reconcile-first Move 会在中断活动工作之前验证并记录其持久化决策。在中断已准入的 session 工作并等待其 turn 声明释放时,它们会将 session 准入借给同一 session 的定向恢复,包括已经排在该操作后面的恢复。该恢复只会结束待处理的工作区结果;它不能恢复已准入的 Move,也不能运行后续的 placement 修复。该操作会等待所有借出的恢复结束后再继续,包括任一释放等待失败或声明等待被取消的情况。完整恢复扫描仍会跳过繁忙的 session,而 Stop 清理、强制销毁、provisioning 恢复和后续 placement 操作保留其正常队列顺序。

在活动 worker 被安全停止后,结果 placement 为 reclaimed。Reclaim 还会等待进行中的 dispatch,并在返回 local 之前重试失败 placement 的待处理拆除。没有其他 placement 状态是成功的 reclaim 结果。

Crabbox lease 拆除会为 CLI 的完整有界释放尝试、重试、清理观察和进程结束预留时间。检查保留其较短的超时。失败的节点入列也会在拆除前为诊断预留时间;可选的图像捕获拥有其自身的额外预算。

如果在 stop 或 move 期间 provider 拆除失败或超时,即使恢复随后完成清理,请求也会报告有界的、已脱敏的 provider 原因。在失败的 placement 上重试 Stop 会报告该清理尝试的原因,该原因可能与原始 session 失败不同。请遵循报告的恢复指导,并在重试前检查当前 placement。专用云 worker 可以在销毁不确定时仍被记录为已附加,但其已关闭的权限无法恢复远程工作区进程。

在清理仍待处理时,placement 会保留原始失败和最新的清理原因。重复的恢复检查不会追加同一错误的另一份副本,且长诊断会保留最终的 provider 原因。

已结束或不可用的 provider lease 并不能证明其机器已被删除。OpenClaw 会隔离该 worker,停止续租 lease,并请求显式的 provider 拆除。失败的拆除仍可重试;缺失的本地声明或较早的“未找到”警告不会将失败的 stop 变为成功。

对于自动化,请从 sessions.describe 读取活动 placement 的 generation、environmentId 和 activeOwnerEpoch,然后将这些确切的源事实提供给 sessions.move:

openclaw gateway call sessions.move \
  --timeout 1500000 \
  --params '{"key":"agent:main:big-refactor","expected":{"generation":5,"environmentId":"worker:source","ownerEpoch":2},"target":{"kind":"gateway"}}'

Worker 目标使用 {"kind":"profile","profileId":"aws","os":"linux","machineClass":"tiny"} 或 {"kind":"device","deviceId":"paired-device-id"}。省略 os 或 machineClass 以使用相应 profile 的默认值。移动到具有不同操作系统或类别的同一 profile 会替换 worker。过期的源会被拒绝,而不是移动更新的 placement。成功结果对于 Gateway 目标以 local 结束,对于 worker 目标以 active 结束。

对仅仓库会话的显式 Gateway 迁移或本地恢复,会将其固定来源获取到受管项目中,创建受管 worktree,并在启用本地轮次之前恢复其已接受的检查点。普通创建、Stop、工作节点上的重启以及发布不会物化此检出。本地恢复需要能够访问固定提交的上游、任何已记录的发布提交,以及足以支持常规受管 worktree 流程的 Gateway 磁盘空间。它要求进行中的发布完成,并拒绝与已记录推送不同的远程分支;它绝不会采用无关的远程尖端。获取使用共享仓库身份,因此先前的个人发布不需要重新连接该个人账户即可进行本地迁移或恢复。

自动化可以通过在上述精确来源 Gateway 请求中添加 "abandonSource":true 来显式放弃离线配对设备来源。对于配置文件或设备目标,以及当来源运行器可用或无法证明其为精确设备绑定时,该字段会被拒绝。此路径具有与 Control UI 确认相同的未同步文件和进行中工作丢失边界。

放置通过持久状态机(local → requested → provisioning → syncing → starting → active)移动,因此在调度中途的 Gateway 重启会进行协调而不是泄漏机器;被中断的待处理 provisioning 会保留其固定的提供商操作以供启动时重放。失败的模型轮次会保留活动放置以便重试。在 Gateway 来源的 worktree 中,工作区路径冲突会保留本地版本,应用其余云端结果,并保留已暂存的云端 ref 以供检查;其他协调或生命周期失败会保留其持久恢复围栏和诊断尾部,直到恢复可以安全重试或回收环境。

针对单个工作节点请求的恢复会检查该环境,并仅恢复其关联的工作区结果和移动,等待这些会话上更早的操作。常规后台扫描会协调所有环境,然后逐个恢复会话。它们会跳过具有未完成放置操作的会话,并在下一次扫描时重试。孤立工作区清理也会等待直到共享该工作区的每个会话都处于空闲状态。定向恢复不会等待无关的后台扫描。这些队列仅存在于正在运行的 Gateway 中;更新不会更改持久化放置状态或配置。

如果某个轮次报告 Cloud worker finished, but its workspace result could not be reconciled,请检查冒号后的原因。失败的工作节点清单捕获会包含其有界且已脱敏的 stderr,或在 stderr 为空时包含其终止状态。工作节点清理会保留上传和验证之间所需的清单,包括其他工作节点同时完成的情况;增加传输超时时间无法修复缺失的清单。

协调会将文件与上次同步的工作区进行比较,而不是与工作节点当前的 Git HEAD 比较。因此,即使 git status 是干净的,rebase 也可能返回许多上游更改。结果支持跨两个 250,000 条清单的至多 500,000 条更改前/后记录、每个更改文件 64 MiB,以及 768 MiB 的更改内容或生成的补丁。压缩的 SQLite 回滚快照仍限制为 256 MiB。Git 导入准备使用临时文件,因此不会将整个结果缓冲两次。这些结果限制独立于 4 GiB 调度清单和附件限制。

死机后哪些内容会保留

活动的工作节点轮次会保留 Gateway 接受它时所选的会话存储。更改会话路由不会将该轮次的转录、实时诊断或 auth-profile 更新重定向到另一个存储。被替换的会话或已关闭的轮次会失去写入权限;重新连接工作节点不会为旧轮次选择新的存储。

在两种模式下,Gateway 都拥有规范的会话转录。工作节点轮次会在工作节点的会话写入落定之前,提交每条完整的用户、助手和工具结果消息;remote-exec 使用常规本地 harness 转录路径,因为 Codex app-server 仍位于 Gateway 上。如果机器在消息中途消失,持久历史将结束于最后一条已提交消息。实时流已经显示的部分文本或工具进度可能会消失;失败的轮次仍会保持可见,并且失败的放置会在 composer 上方记录一个有界的终止原因。

工作节点轮次的实时预览是当前助手消息的快照。更正、较短的预览和空替换会更新该消息,而不会重放或擦除该轮次中更早的消息。显式注释会被排除在答案文本之外,包括其阶段到达消息完成时。实时预览是有界的,并在流降级后可能被丢弃;已提交的转录仍保持权威。

工作区状态具有更宽的丢失窗口。已完成的轮次会在释放其声明之前协调云端文件,而 Stop cloud worker…、归档或删除会话会在销毁活动工作节点之前执行最终协调。在两次协调之间所做的更改仅存在于该机器上,如果该机器消失,这些更改可能会丢失。只有在安全回收成功后才会继续删除。对于 Gateway 来源的会话,它会在移除受管 worktree 之前将其快照保存到 refs/openclaw/snapshots/ 下;对于仅仓库会话,它会删除来源所有者和保留的检查点工件。安全回收失败会保留会话和未同步恢复状态,并报告错误。

对于仅仓库会话,Gateway 会在不可变检查点中保留完整的 base/current 文件清单和更改的文件内容。它不会保留上游 Git 历史的完整副本或未更改的 base 文件。因此,替换工作节点需要固定的上游提交可获取,或已存在于节点的已验证种子缓存中。显式 Gateway 迁移需要该提交对其项目克隆可用。移动或删除远程分支不会更改固定提交,但失去对该提交的访问可能会阻止恢复。

检查点历史会保留,直到会话删除;托管 worktree 的七天空闲清理和三十天快照过期策略不适用。请同时备份状态数据库和仓库产物。这会节省 Gateway 检出空间,而非会话已接受更改所使用的全部存储。

当工作进程处于活动状态时,Files、文件编辑和差异会通过已认证的节点连接检查其实际检出。停止后,保留的已更改文件预览和更改路径仍可用,但未更改的上游文件、编辑和完整差异需要运行中的工作进程。差异面板会说明工作区已停止。打开这些视图绝不会替代代理的 Gateway 工作区。

在回收的部署或先前活动但失败的部署之后,一旦清理和工作区恢复完成,下一条消息会在原始目标上启动替换。如果初始设置从未完成,或原始目标不可用,请使用 Restart session… 选择继续的位置。下一轮会从 Gateway 转录重建模型上下文,因此会从跨越持久性边界的消息继续。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw