Add ready_for_merge tool and prompt agents for it after review

This commit is contained in:
Ian Gulliver
2026-10-19 08:48:20 -07:00
parent ab61287367
commit c7858e4d6a
8 changed files with 233 additions and 7 deletions
+11
View File
@@ -51,6 +51,7 @@ enum RowKind {
case turnEnd(error: String?)
case note(Note)
case review(note: Note, md: [MDBlock])
case ready(when: Date, md: [MDBlock])
case handoff
case snapshot(Snapshot)
case question
@@ -192,6 +193,7 @@ final class TranscriptBuilder {
private(set) var context: [String: Usage] = [:]
private(set) var open = false
private(set) var lastMergeAfterReview: Int?
private(set) var lastReady: Int?
@ObservationIgnored private var ctx = Ctx()
@ObservationIgnored private var sink: RowList?
@ObservationIgnored private var stream: Row?
@@ -460,6 +462,9 @@ final class TranscriptBuilder {
let snap = try! decodePayload(ev.payload, as: Snapshot.self)
let row = Row(.snapshot(snap), taskId: taskId)
ctx.reviewButtons[snap.n] = row
if snap.trigger != .answer && sink == nil {
lastReady = nil
}
put(row)
continue
}
@@ -540,6 +545,9 @@ final class TranscriptBuilder {
if ev.kind == "task.merge_after_review" && sink == nil {
lastMergeAfterReview = row.id
}
if ev.kind == "task.ready" && sink == nil {
lastReady = row.id
}
put(row, keepHeld: ev.kind == "agent.thinking")
}
return contextChanged
@@ -744,6 +752,9 @@ final class TranscriptBuilder {
case "task.summary":
return note([.text("\(ev.actor) set the task summary")])
case "task.ready":
return Row(.ready(when: when, md: parseMarkdown(jsString(p["overview"]))), taskId: taskId)
case "task.discard_started":
return note([.text("\(ev.actor) asked to discard the task; the agent writes the task summary first")])