agent-wave
使用此主機實際公開的能力,執行一批已接受的佇列項目。預算計算項目或批次的數量。可選的時數上限會停止新的批次,但不會停止正在運行的項目。長時間運行的自動化使用主機的排程功能(請參閱 README);此工作階段不保證會比它本身更長久。
前提條件與主機能力
在詢問參數之前,請閱讀儲存庫的進入點、慣例、佇列和自主提示。解析所有工件路徑,包括 _agent/,並對齊記錄的根目錄。需要一個真正的閘道以及它所遍歷的佇列。
| 記錄的模式 | 執行方式 |
|---|---|
| 單一寫入者 | 停止並引導操作員前往順序自主提示,在每個要求的寬度下。 |
| 共享檢出,直接整合 | 在該檢出中一次一個執行器,使用項目狀態和鎖定行。不需要宣告分支或整合工作目錄。 |
| 共享檢出,PR 整合 | 在宣告之前停止;PR 批次需要單獨的工作目錄。 |
| 單獨的工作目錄 | 每個執行器使用自己的作業目錄;整合遵循記錄的模型。 |
獲取/修剪記錄的遠端,並需要其整合分支。列印獲取的基本 SHA。比較本地整合引用:在繼續之前報告未推送的提交或分歧,絕不默默丟棄它們。一個落後、乾淨的檢出可以在安全時快轉;否則保持不變。批次的狀態和探測來自獲取的基本,而不是操作員檢出中的未提交檔案。如果遠端佇列為空但本地佇列不同,請解釋該差異。
判斷主機是否可以委派、隔離檢出、並行運行、使用操作員已啟用的編排設施,並需要結構化的結果。選擇可用的最高層級:
- 啟用的編排設施:僅為此批次進行一次扇出。保持批次迴圈、時鐘檢查和問題在編排器中。
- 純粹的子代理:如果可用則並行,否則順序執行。僅當主機工作目錄的起始頭部等於宣告的基本時,才使用主機工作目錄隔離;否則在該基本位置明確建立每個工作目錄。
- 編排器一次執行一個項目,在其自己的工作目錄中或根據記錄的模式在共享檢出中。
報告 執行:層級 N — 原因。操作員可以降低此選擇;絕不提高超過觀察到的能力或請求啟用。提及某個設施的技能並非操作員的選擇加入。以下相同的規範簡報用於每個層級。沒有證明的並發上限時,使用 1。
評估與宣告
重複使用已給出的適用答案,包括深度;預設值永遠不會取代明確的選擇。完全提供的規格不需要重複的選擇器或確認。僅詢問實質上缺失或有衝突的選擇;僅記錄的偏好本身並非當前執行權威。否則一次問一個問題,並附上建議答案和原因,如果可用則使用結構化選擇器。當深度未解決時,提供明確(預設值)、引導式(預算/監督)或完整深度,並預先選取記錄的深度。遵守 defaults-from-here 或 go-deeper。
- 要求的寬度:建議最小值(合格的佇列深度, 3, 主機上限)。
- 預算:項目或批次;建議一個批次。可選擇一個軟性時數上限。
- 監督:每個批次後檢查點(建議),或連續。
- 整合:使用儲存庫設定檔,除非明確覆寫。直接整合在記錄的並發護欄下是合法的;其整合是序列化的。覆寫不能使不支援的模式有效。
在執行之前宣告並確認結果規格(明確的調用參數即構成確認)。包括:
- 批次名稱、日期、遠端、整合分支和獲取的基本 SHA。
- 請求/有效寬度、層級/原因、主機上限和任何 token 限制。
- 預算、監督和軟性上限;絕不將 token 限制轉換為項目計數。
- 每個項目的金鑰、擁有的決策、依賴項、宣告變體、確切擁有的工件、保留的識別碼及其序列,以及 Continue 標記。
- 隔離和整合設定檔;實際授予的整合/合併操作。
- 授權:「出席批次:操作員於 <日期> 確認了這些參數和此項目;僅實作指定的項目,絕不選取其他項目。」
僅保留項目將建立的識別碼,以有限的不相交區塊形式。包括現有的即時保留;繼續的項目保留其原始保留區。絕不將兩個寫入者分配給同一個決策或計劃主體。INDEX 是衍生的:執行器僅更改自己的行,而整合會重新產生整個表格。耗盡的保留會停止項目;不允許竊取插槽。
確認後,為單獨工作目錄模式在主機目錄樹之外的基本位置建立一個分離的整合/探測工作目錄。僅在證明其乾淨且未被使用後,才重複使用遺留的工作目錄。在那裡僅使用追蹤的檔案和現有環境來探測確切的閘道。環境失敗時,在分派前停止,並報告命令、輸出和退出碼;不安裝缺失的依賴項,或暗示選擇層級 3 會修復閘道。報告有效的掛鉤路徑和簽署設定的來源。
在每個批次前收集
再次獲取/修剪;讀取項目狀態、宣告提示、工作目錄和 PR 狀態。使用此優先順序,在基本和宣告提示處解析每個項目:
| 類別 | 證據和行動 |
|---|---|
| 無法驗證 | 所需的遠端/PR 證據不可用或有矛盾:停止執行。 |
| 已出貨 | 整合分支上的完成條目,具有可達的頁尾提交或已確認合併的 PR。排除。 |
| 已合併但未出貨 | 工作/PR 已合併,但項目仍在基本佇列中。排除並請求協調。 |
| 已停止 | 基本或宣告提示上的 Stopped 欄位。除非明確繼續,否則排除。 |
| 進行中 | 未合併的遠端宣告或草稿/就緒 PR,或當前共享檢出的擁有者/鎖定。除非明確繼續,否則排除。 |
| 過時 | 在確認遠端引用消失後,以分支為基礎的本地所有權。報告清理;不重新分配不確定的遺留物。 |
| 合格 | 已接受的擁有權、已滿足的依賴項、無宣告/停止/過時衝突。按佇列順序選取。 |
一個就緒的 PR 可能會在其自己的分支上將項目移動到完成狀態。透過連結的 PR/歷史記錄解決該移動;它仍然是進行中,而不是孤兒。當壓縮/變基使得來源祖先無法確定時,檢查已確認的 PR 合併。共享宣告根據項目/鎖定評估,而不是遠端宣告的缺失。分離的工作目錄既不是宣告也不是過時。一個領先的本地宣告引用意味著未推送的工作:返回未知並保留它。
在引導式/完整深度下,僅為現有的進行中/已停止宣告提供 Continue 選項;預設排除它。Express 排除並列出如何繼續。呼叫中命名宣告或項目即為明確答案。繼續不會建立新的宣告或保留;報告任何遺留的工作目錄。選取後,重新檢查擁有的路徑重疊和依賴項。
規範執行器簡報
將此完整簡報與項目的規格一起傳遞,在所有層級保持不變:
- 開啟並定位。 驗證基本祖先和指定的項目。繼續的檢出必須等於獲取的宣告提示;連結的就緒 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:此初始提交僅更改所擁有項目的 Status,沒有實作輸出。在獲取前修復本機缺失的中繼資料。後續提交無法修復有缺陷的初始宣告。使用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 中記錄確切的錯誤,在授權範圍內提交/推送可恢復的工作,並返回 blocked,而不是 verified 或 shipped。遵循簽署、Rationale 和閘道完整性規則。
- 根據設定檔整合。 單獨工作目錄直接整合:推送驗證過的宣告並返回 ready;編排器呼叫 ship-item 的整合模式。共享檢出:在活動目錄樹中呼叫 ship-item。PR 模式:在實際的 PR 上呼叫 ship-item,包括變基、衝突檢查、自身編號修復、兩個閘道和完成提交。保持其主體/報告為最新;ready 需要在當前頭部進行檢查。僅在授權範圍內合併,並僅在確認落地後報告 shipped。重試移動的基本最多兩次;失敗時保留未解決的宣告。
- 停止並報告。 將日期/原因和三個報告標籤放入佇列項目的 Stopped 欄位,或如果已移動到那裡則放入 PR 主體。僅在授權範圍內提交/推送。傳回以下欄位和最終區塊。絕不建立協調快照或默默刪除骯髒的工作。
執行、整合並收集結果
使用衍生的機制分派宣告的批次。有效寬度在層級 3 和共享檢出時為 1。在層級 3,宣告開始一個項目:僅為當前項目建立本地或遠端宣告分支並填寫 Claimed by,絕不預先宣告剩餘的批次。在發出下一個項目的命令之前檢查其閘道結果。後續的預先宣告不是已經在運行的執行器。在層級 3,在開始下一個項目之前完成並整合每個項目。在推進迴圈之前,檢查最後一個執行器的閘道結果。環境阻止器會立即終止整個批次,即使下一個項目是獨立的且預算還有空間。不要開始下一個項目或另一次整合。 此規則優先於連續監督和數值失敗閾值。收集已經在運行的執行器,而不啟動新工作,然後報告系統性阻止器。保留它們可恢復的宣告。成功的基本探測不會覆蓋實作後的環境失敗。
對於並行直接工作,以佇列順序為就緒的宣告呼叫 ship-item 的整合模式,使用分離的整合工作目錄。整合機制位於 ship-item 中,而不是此處的第二個程序。PR 主機序列化授權的 PR 合併。
將每個回傳標準化為:項目金鑰;結果(shipped, ready, failed, blocked, stopped, unknown);宣告/實際分支;整合 SHA 或 PR;使用/重新編號的識別碼;阻止器;衝突檔案;最終區塊逐字。沒有回傳表示 unknown。結果獨立於 Overall 的詞彙。對於等待整合的就緒宣告,寫入 Outcome: ready 和 Overall: partially verified;ready 和 shipped 永遠不是 Overall 的值。報告每個項目和一個批次摘要,包含 Status at a glance;任何 unknown 都會將批次限制為 partially verified。包括排除/撤回的宣告、有效寬度、層級、閘道結果、掛鉤/簽署來源和剩餘工作。
在最終回應中,為每個項目保留一個 Status at a glance 區塊,然後為批次保留一個單獨的區塊。每個區塊都有 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 時鐘;如果不可用則將軟性上限報告為未強制執行。超過上限時停止啟動新的批次;絕不中斷正在進行中的項目。
停止與清理
主機/工具權限的明確拒絕會停止批次。系統會報告已完成的項目(無論結果如何),並保留任何可恢復的工作(例如,已宣告但未整合的分支)。如果批次因環境失敗而終止,將不會啟動新的項目,但已完成的項目仍會被報告。最終輸出會包含一個乾淨的摘要,列出每個項目的狀態以及整體批次的結果。