Add Merge & continue and Other… to ready cards

This commit is contained in:
Ian Gulliver
2026-10-20 11:01:59 -07:00
parent 25f275e012
commit ef98b1179d
13 changed files with 363 additions and 88 deletions
+11 -3
View File
@@ -26,6 +26,7 @@ const readyPromptUnchanged = "Your turn has ended, and this task's branch has no
type readyArgs struct {
Overview string `json:"overview"`
Merge string `json:"merge"`
}
func (m *Manager) readyForMergeTool(l *live) mcp.Tool {
@@ -33,12 +34,13 @@ func (m *Manager) readyForMergeTool(l *live) mcp.Tool {
Name: "ready_for_merge",
Description: "Tell the human this task is ready to merge, with an overview of the whole task: all of the branch's work, not just what changed since your last call or the last discussion. " +
"Write it for someone jumping between tasks who hasn't followed this one: a summary of what the change does, the tradeoffs and compromises made, what was not done, and follow-up work for later. " +
"byre shows it in the task's transcript and passes it to the human's lead agent. " +
"byre shows it in the task's transcript, with buttons to merge and complete the task or merge and continue it, and passes it to the human's lead agent. " +
"Call it only once the review of your most recent changes has come back: byre reviews the work after each turn that changes files and messages you when that review finishes, so never call it in the same turn as a change, or while a review of your latest work is pending.",
InputSchema: json.RawMessage(`{
"type": "object",
"properties": {
"overview": {"type": "string", "description": "Markdown, with sections for the summary, tradeoffs and compromises, not done, and future TODOs; leave out a section with nothing in it."}
"overview": {"type": "string", "description": "Markdown, with sections for the summary, tradeoffs and compromises, not done, and future TODOs; leave out a section with nothing in it."},
"merge": {"type": "string", "enum": ["complete", "continue"], "description": "The button byre highlights: complete (the default) lands the work and closes the task; continue lands the work so far and keeps the task open, for when you or the human mean to do more on it."}
},
"required": ["overview"]
}`),
@@ -52,7 +54,13 @@ func (m *Manager) readyForMergeTool(l *live) mcp.Tool {
if overview == "" {
return "", fmt.Errorf("%w: overview must not be empty", ErrInvalid)
}
err = m.store.MarkReady(ctx, l.taskID, overview, agentActor)
if args.Merge == "" {
args.Merge = "complete"
}
if args.Merge != "complete" && args.Merge != "continue" {
return "", fmt.Errorf("%w: merge must be complete or continue", ErrInvalid)
}
err = m.store.MarkReady(ctx, l.taskID, overview, args.Merge, agentActor)
if errors.Is(err, store.ErrNotFound) {
return "", fmt.Errorf("%w: this task is closed", ErrConflict)
}