Refuse lead tools that would restart an interrupted or errored agent

This commit is contained in:
Ian Gulliver
2026-10-20 09:33:36 -07:00
parent 09d6c6e023
commit 76c1c673d7
6 changed files with 108 additions and 9 deletions
+6 -2
View File
@@ -881,7 +881,7 @@ func (m *Manager) pump(l *live) {
}
}
m.endMergeTurn(l.id, true)
next, _, err := m.store.EndTurn(ctx, l.id, agentActor, map[string]any{"error": "agent process exited mid-turn"}, nil, false, false)
next, _, err := m.store.EndTurn(ctx, l.id, agentActor, map[string]any{"error": "agent process exited mid-turn", "stopped": true}, nil, false, false)
if err != nil {
slog.Error("record session exit", "session", l.id, "err", err)
}
@@ -1186,8 +1186,12 @@ func (m *Manager) turnEnded(ctx context.Context, l *live, res endResult) error {
unlock()
held := len(l.subagents) > 0 || interrupted
var state map[string]any
if interrupted || res.isError {
state = map[string]any{"stopped": true}
}
turn := m.event(l, agentActor, "turn.ended", payload)
next, finalizeBy, err := m.store.EndTurn(ctx, l.id, agentActor, nil, &turn, review && !held, finished && !handoff)
next, finalizeBy, err := m.store.EndTurn(ctx, l.id, agentActor, state, &turn, review && !held, finished && !handoff)
if err != nil {
return err
}