超时
围绕 Codex 回合的超时预算,以及 OpenClaw 如何对已完成的回合进行结算。本文是 Codex harness 参考 的一部分;各章节迁移位置 列出了所有章节。
超时¶
客户端启动和应用服务器控制请求的预算按经过时间计时,因此系统时钟调整不会缩短或延长它们。
OpenClaw 拥有的动态工具调用独立于 appServer.requestTimeoutMs 进行约束。普通 Codex item/tool/call 请求按以下顺序使用第一个可用的超时:
- 正数的每次调用
timeoutMs参数。 - 正整数的每次调用
timeoutSeconds参数,外加 30000 毫秒用于设置和完成。 - 对于
image_generate,使用agents.defaults.mediaModels.image.timeoutMs。 - 对于未配置超时的
image_generate,使用 120 秒的图像生成默认值。 - 对于媒体理解工具
view_image,使用所选的具备图像能力的tools.media.models[]条目中的timeoutSeconds转换为毫秒后的值,或者 60 秒的媒体默认值。对于图像理解,这适用于请求本身,不会因早期的准备工作而减少。 - 对于
message工具,使用固定的 600 秒外部预算,涵盖 Gateway 投递和有界的同键对账。 - 90 秒的动态工具默认值。
该看门狗是外部动态 item/tool/call 预算。特定于提供商的请求超时在该调用内部运行,并保留其自身的超时语义。普通动态工具预算上限为 600000 毫秒。agents_wait 增加 30000 毫秒的外部完成宽限期。人机交互工具使用经过验证的问题等待时间加 30000 毫秒:ask_user 和 secrets 凭据请求遵守其问题超时,而委托的 openclaw 调用使用固定的 930000 毫秒默认值。该预算涵盖十分钟的审批窗口以及暂存和应用;模型编写的参数不能覆盖它。应用服务器请求看门狗在适用工具预算之外再留出 30000 毫秒,以便结果到达 Codex。
前台 node_exec 使用 exec 工具已解析的命令和节点传输预算,而不是普通的 90 秒默认值或 600 秒上限。省略 timeoutSeconds 时,继承 exec 工具的运行时、按代理或全局默认值(未配置时为 1800 秒)。正数的覆盖值控制命令预算。每次调用 timeoutSeconds: 0 会禁用命令计时器,同时保留基于 exec 默认值的节点传输有界等待。动态工具看门狗增加 30000 毫秒用于设置和完成;应用服务器看门狗接收相同的已解析预算,并为响应投递再增加 30000 毫秒。停止、回合截止时间、生命周期取消以及过期的审批权限仍会终止受影响的工作。
超时时,OpenClaw 会在支持的情况下中止工具信号,并向 Codex 返回失败的动态工具响应,以便回合可以继续,而不是让会话停留在 processing 状态。这些等待预算绝不会在请求方运行或工具关闭后保留审批权限。
会话目录读取¶
会话目录读取超时后,后续轮询可以在同一打开连接上共享其挂起的原生请求,前提是目录源和查询仍然匹配。较早的调用方保持失败状态;新调用方保留其自身的请求预算和当前授权检查。刷新挂起期间,缓存的过期页面仍然可用。没有当前等待者的回复将被丢弃。
连续两次本地目录源故障后,新的页面尝试在重试前使用有界退避。延迟从五秒开始,并以两倍增长至最多六十秒;成功恢复或配置重新加载会清除该状态。现有的挂起页面读取保持其结果共享生命周期,缓存的过期页面仍然可用。退避不会取消原生工作,也不会改变单个请求预算。
连接关闭会使当前等待者失败,而后续的独立轮询可以正常重连。无论是本地超时还是连接丢失,都不能证明原生工作已停止。这些预算适用于单个原生读取;一次目录操作可能读取多个页面并执行额外处理。
回合执行与结算¶
原生 Codex 负责提供商流存活性、网络恢复和原生回合完成。对于普通回合,OpenClaw 会等待 turn/completed,并带有确切的线程和回合身份,或权威的失败或取消。静默、已完成的工具输出以及看起来已完成的助手消息都不能证明回合已经结束。部分输出在失败时仍然可用,但 OpenClaw 不会将超时或客户端丢失升级为成功。
现有的 agents.defaults.timeoutSeconds 设置为每次尝试提供一个经过时间的执行预算,默认值为 48 小时。进度不会重置该预算,包括在长时间工具执行期间也是如此。将其设置为 0,或使用每次运行的超时 0,以获得无限制执行。原生连接恢复可以持续重试,因此提供商流超时并非整个回合的截止时间。无限制的原生等待仅在原生终止结果、权威失败或显式停止时结束。启动、应用服务器控制请求、审批、动态工具和取消保留其独立的截止时间。/btw 附加问题保留其单独的十分钟完成预算。
在收到确切的原生终止事件后,OpenClaw 在异步转录和媒体投影之前启动一个绝对的两分钟本地结算预算。后续通知不会重置它。演示回调按顺序启动,并在结算时汇合,而不会阻塞原生通知处理。如果原生回合成功完成并带有完整的最终答案,过期会将该答案保留为降级成功。OpenClaw 会终止未完成的投影和过期写入,然后通过现有转录所有者持久化答案,保持写入顺序和钩子不变。
恢复的回复保留原生网络结果来源,即使相应的工具投影未结算或消息写入钩子替换了消息。
turn.settlement_warning 轨迹事件会记录待处理的展示回调、转录/检查点写入或媒体投影阶段,以及已消耗时间和预算。新持久化的已恢复回复也会携带结算警告。最终持久化仍保留其尽力而为策略以及现有的五秒排空宽限期;如果写入器仍不可用,OpenClaw 会记录 turn.settlement_persistence_unavailable,并交付已完成文本,而不会留下过期写入。在没有原生已完成答案的情况下过期仍视为超时。
在单独有界的中止清理之后,排队投影获得五秒排空宽限期。这些本地边界也适用于无限制运行。
停止和执行预算过期会中断受影响的原生尝试,并在释放其通道之前限制清理。静默回合或本地结算失败并不能证明共享 app-server 客户端已死亡;健康客户端上无关的线程租约仍保持隔离。通用的过期运行恢复也尊重确切的活跃原生所有者,不会豁免过期的 OpenClaw 请求、工具、取消、终端清理或无所有者状态。
可重放安全的 stdio app-server 故障可以在新尝试中重试一次。助手、工具、活动项或副作用证据可能使重放不安全;OpenClaw 随后会报告该故障,而不是自动重新运行工作。在重试不安全的失败回合之前,请验证当前状态。
以前的 appServer.turnCompletionIdleTimeoutMs、appServer.turnAssistantCompletionIdleTimeoutMs 和 appServer.postToolRawAssistantCompletionIdleTimeoutMs 设置已弃用。运行 openclaw doctor --fix 以移除它们。Doctor 会保留无关设置,并且不会将空闲窗口转换为已消耗的运行预算。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw