Move lead delivery and the Merge & continue hold onto the coordinator
This commit is contained in:
@@ -63,7 +63,6 @@ type Manager struct {
|
||||
startRefused map[string]bool
|
||||
handoffModel map[string]string
|
||||
mergeTurns map[string]mergeTurn
|
||||
landing map[string]landing
|
||||
|
||||
deliverMu sync.Mutex
|
||||
deliverLocks map[string]*sessionLock
|
||||
@@ -168,7 +167,6 @@ func New(st *store.Store, worktreeRoot, leadRoot, handsRoot, codexHome, antigrav
|
||||
startRefused: map[string]bool{},
|
||||
handoffModel: map[string]string{},
|
||||
mergeTurns: map[string]mergeTurn{},
|
||||
landing: map[string]landing{},
|
||||
signals: make(chan []api.Event, 1024),
|
||||
snaps: map[string]*snapState{},
|
||||
pokes: make(chan struct{}, 1),
|
||||
@@ -475,8 +473,6 @@ func (m *Manager) Recover(ctx context.Context) error {
|
||||
return err
|
||||
}
|
||||
|
||||
go m.deliverAllLeads()
|
||||
go m.deliverAllQueued(context.Background())
|
||||
go m.coordinate()
|
||||
m.poke()
|
||||
m.MarkFacts(allTasks)
|
||||
@@ -582,30 +578,15 @@ func (m *Manager) Usage(ctx context.Context) (Usage, error) {
|
||||
}
|
||||
|
||||
func (m *Manager) turn(ctx context.Context, sess api.AgentSession, task api.Task, actor, text, sendID, client string, images []string) (api.AgentSession, error) {
|
||||
err := m.startRunning(ctx, sess, task.Id, actor)
|
||||
err := m.startRunning(ctx, sess, actor)
|
||||
if err != nil {
|
||||
return api.AgentSession{}, err
|
||||
}
|
||||
return m.launch(ctx, sess, task, actor, text, sendID, client, images)
|
||||
}
|
||||
|
||||
func (m *Manager) startRunning(ctx context.Context, sess api.AgentSession, taskID, actor string) error {
|
||||
held := fmt.Errorf("%w: held while this task merges and continues", ErrConflict)
|
||||
if m.heldForLanding(taskID, sess.Id) {
|
||||
return held
|
||||
}
|
||||
err := transition(ctx, m.store, sess.Id, api.AgentSessionStateIdle, api.AgentSessionStateRunning, actor)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if m.heldForLanding(taskID, sess.Id) {
|
||||
err = transition(ctx, m.store, sess.Id, api.AgentSessionStateRunning, api.AgentSessionStateIdle, actor)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return held
|
||||
}
|
||||
return nil
|
||||
func (m *Manager) startRunning(ctx context.Context, sess api.AgentSession, actor string) error {
|
||||
return transition(ctx, m.store, sess.Id, api.AgentSessionStateIdle, api.AgentSessionStateRunning, actor)
|
||||
}
|
||||
|
||||
func (m *Manager) launch(ctx context.Context, sess api.AgentSession, task api.Task, actor, text, sendID, client string, images []string) (api.AgentSession, error) {
|
||||
@@ -1187,8 +1168,6 @@ func (m *Manager) turnEnded(ctx context.Context, l *live, res endResult) error {
|
||||
return m.reviewTurnEnded(ctx, l, res)
|
||||
}
|
||||
|
||||
defer m.endLanding(l.taskID, l.id)
|
||||
|
||||
m.mu.Lock()
|
||||
interrupted := l.interrupted
|
||||
rateLimited := l.rateLimited
|
||||
@@ -1206,7 +1185,11 @@ func (m *Manager) turnEnded(ctx context.Context, l *live, res endResult) error {
|
||||
if owner {
|
||||
defer m.endMergeTurn(l.id, false)
|
||||
}
|
||||
if (owner || m.landingBy(l.taskID, l.id) != "") && !finished {
|
||||
landingBy, err := m.store.LandingBy(ctx, l.taskID, l.id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if (owner || landingBy != "") && !finished {
|
||||
err := git.AbortMerge(l.dir)
|
||||
if err != nil {
|
||||
slog.Error("abort unfinished merge", "session", l.id, "err", err)
|
||||
|
||||
Reference in New Issue
Block a user