Add a pause that holds an agent after its current step
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user