don't restart after interrupt
This commit is contained in:
@@ -149,6 +149,9 @@ func (m *Manager) DeliverLead(ctx context.Context, owner string) error {
|
||||
}
|
||||
|
||||
batch, actor, text, images := nextLeadTurn(inputs)
|
||||
if batch[0].Kind == store.LeadSignal && m.interrupted(sess.Id) {
|
||||
return nil
|
||||
}
|
||||
if batch[0].Kind == store.LeadSignal {
|
||||
state, err := m.leadStateText(ctx, owner)
|
||||
if err != nil {
|
||||
|
||||
@@ -1245,11 +1245,15 @@ func (m *Manager) afterTurn(ctx context.Context, l *live) {
|
||||
m.startDiscard(l.taskID)
|
||||
return
|
||||
}
|
||||
m.deliverTeam(ctx, l)
|
||||
if m.interrupted(l.id) {
|
||||
m.logUndelivered(ctx, l.id, "turn was interrupted")
|
||||
return
|
||||
}
|
||||
err = m.Deliver(ctx, l.id)
|
||||
if err != nil {
|
||||
slog.Error("deliver inbox responses", "session", l.id, "err", err)
|
||||
}
|
||||
m.deliverTeam(ctx, l)
|
||||
}
|
||||
|
||||
func commitMessage(res endResult) string {
|
||||
|
||||
@@ -47,7 +47,8 @@ func (m *Manager) Message(ctx context.Context, sessionID, actor, text, model str
|
||||
if err != nil {
|
||||
return api.AgentSession{}, false, err
|
||||
}
|
||||
if sess.State != api.AgentSessionStateRunning || sess.Role != api.Implementer {
|
||||
held := sess.State == api.AgentSessionStateIdle && sess.Role == api.Implementer && automatedActor(actor) && m.interrupted(sess.Id)
|
||||
if !held && (sess.State != api.AgentSessionStateRunning || sess.Role != api.Implementer) {
|
||||
sess, err = m.Send(ctx, sessionID, actor, text, model, images...)
|
||||
return sess, false, err
|
||||
}
|
||||
@@ -72,10 +73,21 @@ func (m *Manager) Message(ctx context.Context, sessionID, actor, text, model str
|
||||
if err != nil {
|
||||
return api.AgentSession{}, false, err
|
||||
}
|
||||
slog.Info("message queued", "session", sess.Id, "task", sess.TaskId, "actor", actor)
|
||||
slog.Info("message queued", "session", sess.Id, "task", sess.TaskId, "actor", actor, "interrupted", held)
|
||||
return sess, true, nil
|
||||
}
|
||||
|
||||
func automatedActor(actor string) bool {
|
||||
return actor == "byre" || actor == agentActor || actor == boardActor
|
||||
}
|
||||
|
||||
func (m *Manager) interrupted(sessionID string) bool {
|
||||
m.mu.Lock()
|
||||
defer m.mu.Unlock()
|
||||
l := m.live[sessionID]
|
||||
return l != nil && l.interrupted
|
||||
}
|
||||
|
||||
func (m *Manager) Withdraw(ctx context.Context, taskID string, inputID int64, actor string) error {
|
||||
task, err := m.store.GetTask(ctx, taskID)
|
||||
if err != nil {
|
||||
|
||||
@@ -81,7 +81,7 @@ func (m *Manager) tryPromptReady(ctx context.Context, taskID string, fromReview
|
||||
return nil
|
||||
}
|
||||
sess, err = m.store.GetSession(ctx, sess.Id)
|
||||
if err != nil || sess.State == api.AgentSessionStateRunning {
|
||||
if err != nil || sess.State == api.AgentSessionStateRunning || m.interrupted(sess.Id) {
|
||||
return err
|
||||
}
|
||||
latest, err := m.store.LastSnapshotNot(ctx, taskID, api.SnapshotTriggerAnswer)
|
||||
|
||||
@@ -213,7 +213,7 @@ func (m *Manager) deliverTeam(ctx context.Context, l *live) {
|
||||
return
|
||||
}
|
||||
for _, s := range teamSessions(sessions) {
|
||||
if s.Id == l.id || s.State != api.AgentSessionStateIdle {
|
||||
if s.Id == l.id || s.State != api.AgentSessionStateIdle || m.interrupted(s.Id) {
|
||||
continue
|
||||
}
|
||||
err = m.Deliver(ctx, s.Id)
|
||||
|
||||
Reference in New Issue
Block a user