跳到內容

子代理與 unit

協調者握著 loop,worker 做事,book 把每個 worker 的修改、執行與併入追回它服務的那張票。帶有協調 metadata 的 todo 是一個 unit,有自己的階段。

flowchart TD
  coord["協調者的 loop book"] -->|"帶 observe、kind、<br/>lands 或 agents 的 todo"| unit["Unit"]
  coord -->|"link 條目:session 檔、<br/>cwd、worktree、併入的 ref"| child["子代理<br/>pi-herdr-agents"]
  unit -->|"以 agents 綁定,<br/>否則以票號"| child
  unit -->|"繼承 anchor"| child
  child -->|"通過的同一 anchor 執行<br/>在 unit 持有的 tree 上"| verify["Unit 的 verify<br/>adopted"]
  child -->|"分支"| ref["整合 ref<br/>unit 要併入的"]
  ref -->|"祖先、patch id<br/>或內容相同"| land["land 條目<br/>算作 act"]
  notice["anchorloop_stage landed<br/>sha、ref、task"] -.->|"以同樣方式檢查"| land
link、host adapter 與子代理自己的 book

子代理只透過 pi-herdr-agents 關聯:子行程的 PI_SUBAGENT_ID、父 session subagent 結果的 details.id。pi 本身沒有 subagent。關聯的子代理,其改動算父 loop 的 act。其 anchor 執行記為 check,並附上它所在各 repo 的工作狀態 tree:含已追蹤與未追蹤檔案,不含 ignored 檔案與 scratch/。

對只負責協調的主 session,book 會透過 delegation host adapter 取得更多資訊。adapter 是 pi-herdr-agents、只有環境變數標記的 host,或沒有 host,由環境自動判斷。link 會記下子代理的 session 檔、cwd、worktree 與它的成果要併入的整合 ref。它為子代理的 repo 加一個 base,讓 diff 包含 worker 的改動。第一個 todo 之前派出的子代理,在 loop 開啟時補上 link。

子代理第一次編輯、commit 或執行父 loop 的 anchor 時,不需要 todo 就會開啟自己的 book。

read 與 session_start 會列出沒有回報結果的子代理,附上行程、book 與 worktree 狀態。

unit:什麼構成 unit、子代理怎麼綁定,以及 unit 的檢查比對什麼

帶有 observe、kind、lands 或 agents metadata 的 todo 是一個 unit。只有 anchor 時是該任務自己的檢查,不構成 unit。兩個以上 unit 時,read、widget 與 Jev 的任務清單各給每個 unit 一行階段。

子代理以 agents 綁定 unit,沒有的話,在恰有一個未完成 todo 含有它的名稱或 brief 裡的票號時綁定。

unit 的 tree 是它 worker 的 worktree(或 checkout),沒有的話是 loop 自己的 repo。修改算給 tree 含有它的 unit,都不含時算給每個 unit。unit 的檢查只比對自己的 tree,所以一個 unit 的修改不會讓另一個 unit 的檢查失效。

有兩個以上 unit 時:

  • 沒有 task 的 verify 會被拒絕,並列出各 unit。
  • 帶 task 的 back 與 skip 只影響那個 unit,並依那個 unit 的種類檢查。
  • 子代理繼承所屬 unit 的 anchor,它回報時通過的那個 anchor 執行會記為該 unit 的 verify。
  • 每次對常駐 reviewer 的 subagent_send 都是一次獨立派工,結論算給 brief 指名的 unit。