Add a pause that holds an agent after its current step

This commit is contained in:
Ian Gulliver
2026-10-22 21:55:42 -07:00
parent 73519bf4dd
commit 293c21ca8c
25 changed files with 1014 additions and 472 deletions
+25
View File
@@ -304,6 +304,11 @@ func (m *Manager) Deliver(ctx context.Context, sessionID string) error {
unlock := m.lockDelivery(sessionID)
defer unlock()
if m.isPaused(sessionID) {
slog.Info("deliver held: session paused", "session", sessionID)
return nil
}
sess, err := m.store.GetSession(ctx, sessionID)
if err != nil {
return err
@@ -400,6 +405,9 @@ func (m *Manager) deliverMidTurn(ctx context.Context, l *live) midTurn {
unlock := m.lockDelivery(l.id)
defer unlock()
if m.isPaused(l.id) {
return midTurn{}
}
discard, err := m.store.GetDiscard(ctx, l.taskID)
if err != nil {
slog.Error("read discard state", "task", l.taskID, "err", err)
@@ -428,6 +436,23 @@ func (m *Manager) deliverMidTurn(ctx context.Context, l *live) midTurn {
return mt
}
func (m *Manager) midTurnWaiting(ctx context.Context, l *live) bool {
inputs, err := m.store.TaskInputs(ctx, l.taskID, l.member)
if err != nil {
slog.Error("list queued messages", "session", l.id, "err", err)
return false
}
if len(inputs) > 0 {
return true
}
pending, err := m.store.Undelivered(ctx, l.id)
if err != nil {
slog.Error("list undelivered responses", "session", l.id, "err", err)
return false
}
return len(pending) > 0
}
func (m *Manager) restoreMidTurn(ctx context.Context, l *live, mt midTurn) {
if len(mt.taskInputs) > 0 {
err := m.store.RestoreTaskInputs(ctx, mt.taskInputs)