agent-wave
使用此主机实际暴露的能力运行一批已接受的队列项。预算计数项或波。可选的小时限制会停止新波,但不会停止正在运行的项。长期运行的自动化使用主机的调度功能(参见 README);此会话不保证自身持续存在。
前置条件和主机能力
在询问参数之前,读取仓库的入口点、约定、队列和自主提示。将所有工件路径(包括 _agent/)解析为记录在案的根目录。需要一个真实的门及其所遍历的队列。
| 记录模式 | 执行方式 |
|---|---|
| 单写入者 | 在每个请求的宽度上停止并引导操作员至顺序自主提示。 |
| 共享检出,直接集成 | 在该检出中一次一个执行器,使用项状态和锁定行。无需声明分支或集成工作树。 |
| 共享检出,PR 集成 | 在声明前停止;需要单独的工作树用于 PR 波。 |
| 单独工作树 | 每个执行器使用自己的工作树;集成遵循记录的模型。 |
获取/修剪记录的远程并要求其集成分支。打印获取的基础 SHA。比较本地集成引用:在继续前报告未推送的提交或分歧,绝不能静默丢弃它们。落后且干净的检出可以在安全快进时进行快进;否则保持原样。波的状态和探测来自获取的基础,而非操作员检出中的未提交文件。如果远程队列为空但本地队列不同,请解释差异。
推导主机是否能够委托、隔离检出、并发运行、使用操作员已启用的编排设施,并要求结构化结果。选择最高可用等级:
- 已启用编排设施:仅为此波进行一次扇出。将波循环、时钟检查和问题保留在编排器中。
- 普通子代理:如果可用则并行,否则顺序执行。仅当主机的工作树隔离的起始头部等于声明的基础时才使用;否则在每个工作树中显式创建该基础。
- 编排器一次执行一个项,在其自己的工作树或共享检出中,按记录模式允许的方式。
报告 执行:等级 N — 原因。操作员可以降低此选择;绝不能将其提高到超出观察到的能力或寻求启用。提及某个设施的技能不是操作员选择。在所有等级上使用相同的规范简报。如果没有证明的并发上限,则使用一。
评估和声明
重用已给出的适用答案,包括深度;默认值绝不替换显式选择。完整提供的规范无需重复选择器或确认。仅针对缺失或冲突的选择提问;单独记录的首选项本身不是当前执行权限。否则一次问一个问题,并附上推荐答案和原因,如果可用则使用结构化选择器。当深度未解决时,提供显式(默认)、引导(预算/监督)或完整深度,并预选记录的深度。尊重 defaults-from-here 或 go-deeper。
- 请求的宽度:推荐 min(符合条件的队列深度, 3, 主机上限)。
- 预算:项或波数;推荐一波。可选择软小时限制。
- 监督:每波检查点(推荐)或连续。
- 集成:使用仓库配置文件,除非显式覆盖。直接集成在记录的并发护栏下是合法的;其集成是串行的。覆盖不能使不支持的模式有效。
在声明和确认规范后执行(显式调用参数已经构成确认)。包括:
- 波名称、日期、远程、集成分支和获取的基础 SHA。
- 请求/有效宽度、等级/原因、主机上限和任何令牌限制。
- 预算、监督和软限制;绝不能将令牌限制转换为项数。
- 每个项的键、拥有决策、依赖项、声明变体、确切拥有的工件、保留的标识符及其序列以及继续标志。
- 隔离和集成配置;实际授予的集成/合并操作。
- 授权:“出席波:操作员在 确认了这些参数和此项;仅实现命名的项,绝不选择另一个。”
仅保留项将要创建的标识符,且为有限不相交的块。包括现有的活跃保留;继续的项保留其原始保留。绝不能将相同的决策或计划正文分配给两个写入者。INDEX 是派生的:执行器仅更改自己的行,集成重新生成整个表。耗尽的保留将停止项;不得抢夺槽位。
确认后,在单独工作树模式下,在基础处创建一个分离的集成/探测工作树,位于操作员树之外。仅在证明其干净且属于自己后重用剩余物。在那里使用跟踪文件和现有环境精确探测门。环境失败时,在分派前停止并报告命令、输出和退出;不要安装缺失的依赖项或暗示选择等级三修复了门。报告有效的钩子路径和签名设置的来源。
每一波前收集
再次获取/修剪;读取项状态、声明提示、工作树和 PR 状态。使用此优先级,在基础处和声明提示处解决每个项:
| 类别 | 证据和操作 |
|---|---|
| 不可验证 | 所需的远程/PR 证据不可用或矛盾:停止运行。 |
| 已交付 | 集成分支上的完成条目,带有可到达的页脚提交或已确认合并的 PR。排除。 |
| 已合并但未交付 | 工作/PR 已合并但项仍排队在基础上。排除并请求协调。 |
| 已停止 | 基础或声明提示上的停止字段。排除,除非显式继续。 |
| 活跃 | 未合并的远程声明或草案/就绪 PR,或当前共享检出所有者/锁定。排除,除非显式继续。 |
| 过时 | 在确认远程引用消失后由分支支持的本地所有权。报告清理;不要重新分配不确定的剩余物。 |
| 符合条件 | 已接受的拥有权、满足的依赖项、无声明/停止/过时冲突。按队列顺序选择。 |
就绪的 PR 可能已在其自己的分支上将其项移动到已完成。通过链接的 PR/历史解决该移动;它仍然是活跃的,不是孤立的。在压缩/变基使得源祖先不确定时检查已确认的 PR 合并。共享声明从项/锁定评估,而非远程声明缺失。分离的工作树既不是声明也不是过时。提前的本地声明引用意味着未推送的工作:返回未知并保留它。
在引导/完整深度下,仅对已有的活跃/已停止声明提供继续选项;默认排除它。显式列出原因以及如何继续。指定声明或项名称的调用是显式答案。继续不会创建新声明或保留;报告任何剩余的工作树。选择后,重新检查拥有的路径重叠和依赖项。
规范的执行者简报
将此完整简报与项规范一起传递,在所有等级上不变:
- 打开并定位。 验证基础祖先和命名的项。继续的检出必须等于获取的声明提示;链接的已就绪 PR 的完成移动是有效上下文。读取入口点和自主提示。不匹配则被阻塞,绝不授权处理其他项。
- 声明。 再次获取。对于新的单独工作树项,从基础创建
claim/<item-key>;提交 Claimed by + 操作者/日期/分支,并将实际的声明分支、波、保留和拥有的工件放在其第一个提交消息中。 在发布前,读回git show -s --format=%B HEAD和git show HEAD:<owned-plan-path>。检查消息和 Claimed by 中的实际声明分支、波名称、保留(包括无)和确切的拥有路径。检查git diff-tree --no-commit-id --name-only -r HEAD:此初始提交仅更改所拥有项的状态,没有实现输出。在获取前本地修复缺失元数据。后续提交无法修复有缺陷的初始声明。 使用git check-ref-format --branch验证键;绝不能使用文字占位符。使用git push --porcelain --force-with-lease=refs/heads/claim/<item-key>: origin HEAD:refs/heads/claim/<item-key>获取。要求退出码为零且 Porcelain 输出中该目标的*新引用结果。现有的引用,包括相同提示/最新结果,不授予所有权。等待该推送完成并在发出任何实现写入之前检查其成功的 new-ref 接收。不要将获取和实现批处理到同一工具调用中。 签名/推送失败将在实现前停止;保留未知结果。绝不能覆盖其他声明。获取后设置上游。 对于 PR 模式,立即打开/重用带有项、操作者、分支、保留、拥有路径和关闭块的草稿 PR;失败将阻止实现。 通过从现有远程提示分离继续,保留保留并更新第一个提交中的 Claimed by,然后推回该引用。 共享检出:在每次编辑前通过项状态和锁定行声明,包括新记录;绝不创建或切换声明分支。 - 实现。 遵循此一个项的自主提示。不接受/取代决策,不插入或重新编号现有队列项,不超出保留,不版本升级、不打标签、不发布或询问操作员。当无法遵守简报时返回阻塞。
- 验证并提交。 精确运行记录的门。修复已理解的实现失败并重新运行。如果门无法运行,不安装它自身未安装的任何东西:记录确切错误到 Blockers,在授权内提交/推送可恢复的工作并返回已阻塞,绝不返回已验证或已交付。遵循签名、Rationale 和门完整性规则。
- 按配置文件集成。 单独工作树直接集成:推送已验证的声明并返回就绪;编排器调用 ship-item 的集成模式。共享检出:在活动树中调用 ship-item。PR 模式:调用 ship-item 在实际 PR 上,包括变基、冲突检查、自身编号修复、两个门和完成提交。保持其正文/报告最新;就绪需要当前头部通过检查。仅当在授权内合并,并在确认落地后报告已交付。最多重试移动的基础两次;失败时保留未解决的声明。
- 停止并报告。 将日期/原因和三个报告标签放入队列项的 Stopped 字段,或如果已移动到那里则放入 PR 正文。仅在授权内提交/推送。返回以下字段和最终块。绝不创建协调快照或静默删除脏工作。
执行、集成和收集结果
使用派生的机制分派声明的波。在等级三和共享检出中,有效宽度为一。在等级三,声明开始一项:仅为当前项创建本地或远程声明分支并填写 Claimed by,绝不预先声明剩余批次。在发出下一项命令之前检查其门结果。后续的预先声明不是已在运行的执行器。在等级三,在开始下一个项之前完成并集成每个项。在推进循环之前,检查最后一个执行器的门结果。环境阻塞器立即终止整个波,即使下一个项是独立的且预算有空间。不启动下一个项或另一个集成。 此规则优先于连续监督和数值失败阈值。收集已经在运行的执行器而不启动新工作,然后报告系统阻塞器。保留它们的可恢复声明。成功的基础探测不会覆盖实现后的环境失败。
对于并行直接工作,按队列顺序使用分离的集成工作树为就绪声明调用 ship-item 的集成模式。集成机制在 ship-item 中,不在本过程的第二个程序中。PR 主机序列化授权的 PR 合并。
将每个返回规范化为:项键;结果(已交付、就绪、失败、阻塞、已停止、未知);声明/实际分支;集成 SHA 或 PR;使用/重新编号的标识符;阻塞器;冲突文件;最终块逐字。无返回表示未知。结果与 Overall 的词汇不同。对于等待集成就绪的声明,写入 Outcome: ready 和 Overall: partially verified;就绪和已交付永远不是 Overall 值。报告每个项和波摘要,包含状态概览;任何未知项将波上限设为部分验证。包括排除/撤回的声明、有效宽度、等级、门结果、钩子/签名来源和剩余工作。
在最终响应中,为每个项保留一个状态概览块,然后为波保留一个单独的块。每个都有 This run、Overall 和 Yet to do。每个项的结果表可以伴随这些块,但绝不替换它们,包括在顺序等级。在返回前检查它们的数量。将项键或“Wave”放在其块上方的单独标题中。保持块标题精确为 Status at a glance,无项后缀或波前缀。将 Wave 放在其自己的作用域标题中,就像对待项一样。例如:
## Item <key>
### Status at a glance
- **This run:** <observed actions and gate output/exit>
- **Overall:** <allowed vocabulary>
- **Yet to do:** <remaining work or None>
检查点要求在另一波之前提问。连续模式从 git 重新收集并在已确认的预算内继续。在首次分派和每波后读取 shell 时钟;如果不可用则将软限制报告为未强制。停止在超出限制后启动新波;绝不切断正在进行的项。
停止和清理
显式的主机/工具权限拒绝会停止处理。