本页内容
本页内容
开始使用
子代理产量切换
子代理产量切换
子代理注册表拥有跨 sessions_yield 的完成权。产生的执行结束;委派的任务及其完成受众仍然存在。登记处的请求者结算批次在子级结算后开始后续轮次。必要时,网关准入会将该后继者附加到暂停的子代理,从而保留其原始请求者。
这种设计同样适用于从交互式会话生成的协调器和从隔离的 cron 运行生成的协调器。 Cron 拥有计划结果的交付,而注册表拥有嵌套编排器的延续。
通过交接的所有权
| 阶段 | 所有者 | 需要交接 |
|---|---|---|
| 执行请求者 | 承认代理转 | 孩子们用 requesterTurnRunId 来识别产卵轮次。进度回调使用本回合的实时权限。 |
| 显式收益率 | 登记请求者-收益结算 | 保留收益意图,冻结子运行 ID,推进批次生成,并清除旧的请求者轮次绑定。 |
| 等待孩子们 | 注册表生命周期和 requesterSettleWake |
保留捕获的完成结果并安排欠批次。个别公告不得启动竞争性延续。 |
| 结算调度 | 请求者解决的唤醒传送 | 验证当前批次和网关所有者,分派内部延续安全以对嵌套请求者重复,并记录其结果。 |
| 继任者入场 | 网关任务跟踪和暂停运行采用 | 在新承认的运行 ID 下继续暂停的任务,保留请求者血统及其未完成的结算义务。 |
| 后继者完成 | 登记完成交付 | 将协调器的结果交付给其原始请求者。 Cron 现有的延续和交付策略拥有预定的输出。 |
实施所有者为 subagent-registry-requester-yield.ts、subagent-announce.requester-settle-wake.ts 和 agent-task-tracking.ts。 adoptPausedSubagentRunForFollowUp使用现有注册表替换操作;它不会创建第二个委派任务。收养会清除仅限儿童的暂停通知,而不是将其完成。实际请求者完成批次会保留其冻结的成员资格和生成。
在允许屈服请求者再次轮流之前,恢复所有者将其结束执行的栅栏转移到当前的持久子批次。在写入提交之前,批处理会被重新验证;缺少或采用的批次、不相关的运行围栏以及未完成的回收或交付工作仍然受到围栏限制。然后,后继者接收自己的执行栅栏,因此完成它后,后续的用户输入就可以接受,而不会丢弃待处理的子结果。
在注册机构接受等待后,显式的 waitFor: "message" 将被视为继续证据。该尝试将该事实带入终端回复呈现中,因此注册的消息等待不会产生丢失继续警告。被拒绝或未登记的等待不能提供该证据。
私人孩子的结果等待其产卵轮次确定,然后再单独宣布入场。即使兄弟姐妹仍在奔跑,每个完成的私人孩子仍会恢复正常的结算。显式yield首先分配冻结的批次,然后恢复该所有者下的子清理。迟到的公告失败不能替代该批次的交货状态;已承诺的交付证据仍然有效。重新启动激活会在恢复子完成之前协调保留的请求者轮次绑定。
对于嵌套请求者,结算在安排继续之前将其暂停的运行与子唤醒批次一起保留。这还涵盖了在请求者屈服之前完成的子级:后继者准入不得依赖于稍后的生命周期结束通知。后继者保留相同的任务,并且来自前任者的延迟通知无法重新打开它。
当请求者执行结算唤醒延续时,其自己的完成批次仍可以标记为正在调度。产量工具从较旧的待处理子项中排除该确切批次:它不得承诺对已处理的结果进行另一次唤醒。不相关的待处理批次和新产生的工作保留其现有的完成所有权。
结算调度使用 subagent_settle 输入来源。单独的公告和旧的后代唤醒路径保留 subagent_announce:后者在调度后已经拥有其运行替换,并且不得在准入时触发暂停运行采用。来源对切换进行分类;实时网关准入和注册表所有权仍然对其进行授权。
完成所有者还选择继任者是否欠另一答复。网关准入将该选择付诸执行,而无需再次从内部渠道或私人交付模式中派生。当没有更多工作或新答案时,可选的结果处理可以静默完成;出色的必需决赛仍然不能。对等方返回的 sessions_send 结果同样不需要生成确认。这些内部选择不是公共 RPC 选项,并且不相关的早期答案永远不会发出新请求。
显式产量批次必须符合任何请求者深度。普通的嵌套波排除仍然存在:没有生成批次的嵌套运行使用现有的后代解决路径。顶级 cron 排除也仍然存在;为 cron 会话启动独立的请求者-解决轮流将与其调度程序拥有的延续竞争。
不变量
注册表持久性所有者对每次运行的突变进行序列化,按排序顺序接纳多运行批次。同步计划在准入后读取当前不可变的已发布行并返回替换行或删除。首先进行异步准备;该计划在提交之前会重新检查执行、取消、请求者和队列所有权。回调保留其观察到的所有权并唤醒等待过程中的进度。他们仅从自己承认的出版物中提出这些观察结果。
SQLite 工作线程在写入之前比较行版本摘要。外部更改通过读取工作线程刷新受影响的行并重新运行计划,最多尝试三次。只有确认的提交才会发布常驻行并通知读者。未知的写入结果会隔离这些行,直到从存储中恢复为止。终端行及其符合条件的会话状态事件一起提交;等效的重复终端回调保留进行中的清理权限。这不会更改架构或更新格式。
进程本地回调所有权在元数据发布后仍然存在。替换网关下的恢复通过同一行所有者获取新的运行时化身,因此来自关闭网关的回调无法解决恢复的唤醒问题。
- 一个完成所有者。 Yield 在关闭旧执行之前转移所有权。确切的轮次和子批次的现有可见最终收据可以防止重新装备已履行的义务。批量结算成功,该代人退休;重复的回调无法再次完成它。
- 没有恢复权限。 存储的运行 ID 和出处都不会恢复关闭的执行。继任者通过正常的网关准入并获得新的执行权限。采用保留任务沿袭,而不是旧工具、批准、渠道或工作人员回调。取消、重置和业主更换保留现有的入场和清理门。
- 范围内的自动化管理。 经过身份验证的 Control UI 管理员的显式让步可以将自动化管理转移到其经过验证的请求者延续。注册中心在屈服之前捕获实时权限,在整批持续后提升它,并将新的管理授权绑定到被承认的继任者。它从不传输自动化创建、旧授权或直接用户身份。切换保持进程本地状态,并通过新的直接用户转向、取消、会话重置或存档以及网关重新启动来撤销。后继者绑定其运行范围后,该范围将拥有该权利,直到它关闭。退役已交付的子批次无法撤销仍在运行的请求者。新的直接用户轮流将停用自动化权利,而不是子批次单独保留的完成源。在原始调用者的限制下,有效结果仍然可以返回;他们从不借用新回合的身份或权限。
- 完成源托管。 注册保留实时操作员源,与执行分开。捕获权限上限的单独交付和请求者结算使用,而不是稍后安排清理的异步调用者。承诺结算、退休或source/Gateway撤销将其释放;临时写入和同任务替换不能删除它。保留的结果在发布后不会保留可用权限,并且批次不能合并不兼容的运算符源。仅取消批次保留现有取消呼叫者的准入,而不是使用已撤销的目标来授权新的轮次。混合 result/cancellation 批次要求每个原始来源保持活跃和兼容。显式传递重试会在实时状态下捕获新接纳的调用者,并仅在新一代传递提交后才转移托管权;它不会重新打开过期的源。重新启动仍然承认新的恢复所有者,而不是恢复以前的流程能力。当每个捕获的请求者会话和生命周期修订与当前父级匹配时,可见结算群组将使用仅主机绑定。私人团体保留严格的请求者身份检查。这允许来宾自己生成的会话在其现有会话写入范围内恢复,而无需授予
operator.write。陈旧、混合化身或不受约束的可见历史不会获得此范围替代方案;其现有的授权恢复路径保持不变。复制的请求字段无法提供仅主机绑定。 - 稳定的受众。 嵌套唤醒使用内部传递。针对实时
sessions_yield-paused 行的结算延续采用该行;不相关的会话间消息不采用该行。从控制父级到其暂停的本机子级的普通sessions_send通过与显式mode: "resume"相同的确切代准入所有者来恢复现有任务。任务拥有的完成仍然是唯一的结果交付路径。显式的mode: "followup"保持单独的活动跟踪,并保持子项的原始结果或待处理的产量不变。指定新请求者的显式插件后续程序将继续创建自己的交付义务。暂停发布前承认的默认交付后续在暂停发布时接收暂停行的请求者、完成托管和结算义务;受请求者约束的后续人员保留自己的交付。 - 固定批次排序。 冻结运行 ID 已排序。调查结果使用创建时间、完成时间和子会话身份作为决定因素。被取代的子行被排除在外。批次身份包括请求者身份、子 ID 和产量生成。
- 有界交付。 现有限制仍然存在:3 次尝试、3 次不明确的传输重播和 10 次过时的延迟。活跃的后代不会消耗陈旧的延期预算。在当前批次的最早子级创建之前结束的执行的交付簿记不能阻止其继续。活跃的后代和交割结算重叠的批次仍然保持着尾声;历史故障记录仍然可用。私人切换的观察超时不会取消底层网关转向。当网关报告飞行中的情况时,结算会观察到相同的请求,而不会花费失败尝试或丢弃子结果。网关准入和执行保留自己的超时;显式取消仍然会停止转弯。个别私人公告将保留其交付截止日期,直到请求者执行开始为止;然后应用网关的请求者运行时间预算。结果的上限为 4,096 个字符,个人结果的上限为 512 个字符,路线通知的上限为 1,024 个字符。不明确的重放重复使用其尝试密钥;它不会在网关重新启动时断言全局一次性传递。
良率后进度
Yield 关闭旧的执行,而不是委托的工作。当回合将保持沉默时,共享回复管道可以发送等待确认。本机子代理注册表保留完成义务并通过其接受的完成路径唤醒请求者;进度文本并不能证明孩子已完成或其结果已交付。
当结算通过自动通道传递恢复顶级父级时,OpenClaw 在继续执行时保持通道的输入指示器处于活动状态。该指示器在执行开始后启动,而不是在准入排队时启动,并在调用解决、取消或失去其所有者时停止。它遵循 typingMode: "never",使用 agents.defaults.typingIntervalSeconds 刷新节奏,并且需要通道类型支持。私有和嵌套延续不会将活动发送到外部通道。此活动信号不会更改配置的消息队列模式或恢复单个工具进度消息。
在 Telegram 和 Discord 上,已确认的 progress 草稿可以保留在让步轮中宣布子项,而不是等待确认。通道不断渲染、节流、删除;本机注册表仅转发子状态和准备好的操作名称(从不转发子散文、命令、参数或结果)。禁用详细工具日志后,公共任务状态仍然可见; streaming.progress.toolProgress 控制滚动诊断行。恢复的父级再次屈服,为其新子级保留相同的草稿。当稳定唤醒完成最后一个跟踪队列(最终、NO_REPLY 或终端故障)或停止或重置取消子项时,草稿将被删除。它是进程本地的:网关重新启动不会恢复它。其他通道保留等待确认。屈服的转弯仍然不会启动单独的任务或流程投影。
进度卡保持持久会话状态。随着工作的进展和孩子结果返回,家长会更新自己的卡。通过 子代理命令 和会话历史记录检查本机子状态或保留的消息。保存的卡片和存储的消息 ID 均不授权新的执行或传送。
Cron 在开始有界合成宽限期之前会观察注册表的后代结算边界。在最后一个工人结束和后继者进入之间,产生的任务仍然处于待处理状态;在 cron 选择最终结果之前,后继者及其完成交付必须得到解决。执行等待、结算观察和综合共享现有的后续截止日期并在 cron 取消时停止。挂起或永久失败的子传递保留了注册表的终端语义,允许 cron 的现有回退策略解决计划结果,而无需重试该传递。
有关工具行为,请参阅 Subagents;有关通道演示,请参阅 Progress Drafts。