Refuse turns, discard and subtasks while a merge is finalizing
This commit is contained in:
@@ -283,6 +283,11 @@ func (m *Manager) Recover(ctx context.Context) error {
|
||||
return err
|
||||
}
|
||||
|
||||
err = m.recoverFinalizing(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
staged, err := m.recoverStages(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -365,7 +370,7 @@ func (m *Manager) failResume(ctx context.Context, sess api.AgentSession, task ap
|
||||
if derr != nil {
|
||||
return derr
|
||||
}
|
||||
next, serr := m.store.EndTurn(ctx, sess.Id, "byre", map[string]any{"error": err.Error()}, nil, false)
|
||||
next, _, serr := m.store.EndTurn(ctx, sess.Id, "byre", map[string]any{"error": err.Error()}, nil, false, false)
|
||||
if serr != nil {
|
||||
return serr
|
||||
}
|
||||
@@ -694,7 +699,7 @@ func (m *Manager) pump(l *live) {
|
||||
slog.Error("drop stage output", "session", l.id, "err", err)
|
||||
}
|
||||
}
|
||||
next, err := m.store.EndTurn(ctx, l.id, agentActor, map[string]any{"error": "agent process exited mid-turn"}, nil, false)
|
||||
next, _, err := m.store.EndTurn(ctx, l.id, agentActor, map[string]any{"error": "agent process exited mid-turn"}, nil, false, false)
|
||||
if err != nil {
|
||||
slog.Error("record session exit", "session", l.id, "err", err)
|
||||
}
|
||||
@@ -930,7 +935,7 @@ func (m *Manager) turnEnded(ctx context.Context, l *live, res endResult) error {
|
||||
}
|
||||
|
||||
turn := m.event(l, agentActor, "turn.ended", payload)
|
||||
next, err := m.store.EndTurn(ctx, l.id, agentActor, nil, &turn, review)
|
||||
next, finalizeBy, err := m.store.EndTurn(ctx, l.id, agentActor, nil, &turn, review, finished && !handoff)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -957,12 +962,13 @@ func (m *Manager) turnEnded(ctx context.Context, l *live, res endResult) error {
|
||||
go m.continueFromHandoff(l.id, res.result)
|
||||
return nil
|
||||
}
|
||||
if finalizeBy != "" {
|
||||
m.logUndelivered(ctx, l.id, "turn ended in merge")
|
||||
go m.finishMerge(l, finalizeBy)
|
||||
return nil
|
||||
}
|
||||
mergeBy := m.takeMerge(l.taskID)
|
||||
switch {
|
||||
case mergeBy != "" && finished:
|
||||
m.logUndelivered(ctx, l.id, "turn ended in merge")
|
||||
go m.finishMerge(l, mergeBy)
|
||||
return nil
|
||||
case mergeBy != "":
|
||||
go m.releaseMerge(l.projectID, l.taskID)
|
||||
if !res.isError || interrupted {
|
||||
|
||||
Reference in New Issue
Block a user