Add task summaries, closed-task search and a summary turn before discard
This commit is contained in:
@@ -3,6 +3,7 @@ package agents
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"log/slog"
|
||||
"strings"
|
||||
@@ -149,10 +150,7 @@ func (m *Manager) advanceStage(l *live) {
|
||||
slog.Error("advance workflow stage", "session", l.id, "err", err)
|
||||
m.fileError(l, fmt.Sprintf("The workflow didn't move on from this stage: %v. byre tries again when it next starts.", err))
|
||||
}
|
||||
err = m.Deliver(ctx, l.id)
|
||||
if err != nil {
|
||||
slog.Error("deliver inbox responses", "session", l.id, "err", err)
|
||||
}
|
||||
m.afterTurn(ctx, l)
|
||||
}
|
||||
|
||||
func (m *Manager) recoverStages(ctx context.Context) (map[string]bool, error) {
|
||||
@@ -184,7 +182,11 @@ func (m *Manager) nextStage(ctx context.Context, sessionID string) ([]string, er
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if task.Status != api.TaskStatusActive {
|
||||
discard, err := m.store.GetDiscard(ctx, task.Id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if task.Status != api.TaskStatusActive || discard.State == store.DiscardClosing {
|
||||
return nil, m.store.ClearStage(ctx, sess.Id)
|
||||
}
|
||||
frozen, err := m.store.TaskWorkflow(ctx, task.Id)
|
||||
@@ -259,7 +261,7 @@ func (m *Manager) advanceTo(ctx context.Context, from api.Task, frozen store.Fro
|
||||
|
||||
existing, found := latestStage(tasks, stage)
|
||||
if found {
|
||||
if existing.Status != api.TaskStatusActive {
|
||||
if existing.Status != api.TaskStatusActive || existing.Discarding {
|
||||
return "", nil
|
||||
}
|
||||
return m.resumeStage(ctx, existing, project, creator, frozen, parents)
|
||||
@@ -334,15 +336,15 @@ func (m *Manager) discardStages(ctx context.Context, final api.Task) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
project, err := m.store.GetProject(ctx, final.ProjectId)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for _, t := range tasks {
|
||||
if t.Id == final.Id || t.Status != api.TaskStatusActive {
|
||||
continue
|
||||
}
|
||||
_, err = m.Discard(ctx, t, project, "byre")
|
||||
_, err = m.Discard(ctx, t, "byre")
|
||||
if errors.Is(err, ErrConflict) {
|
||||
slog.Info("stage task not discarded", "task", t.Id, "err", err)
|
||||
continue
|
||||
}
|
||||
if err != nil {
|
||||
return fmt.Errorf("discard stage task %s: %w", t.Id, err)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user