Queue mid-turn messages for the next tool call; remove all tests

This commit is contained in:
Ian Gulliver
2026-10-15 18:33:18 -07:00
parent 4f94d73b58
commit 514a2580f7
68 changed files with 364 additions and 6851 deletions
+32 -4
View File
@@ -305,6 +305,17 @@ func (m *Manager) Deliver(ctx context.Context, sessionID string) error {
m.deliverMu.Lock()
defer m.deliverMu.Unlock()
sess, err := m.store.GetSession(ctx, sessionID)
if err != nil {
return err
}
if sess.State == api.AgentSessionStateIdle {
sent, err := m.deliverQueued(ctx, sess)
if err != nil || sent {
return err
}
}
pending, err := m.store.Undelivered(ctx, sessionID)
if err != nil {
return err
@@ -314,10 +325,6 @@ func (m *Manager) Deliver(ctx context.Context, sessionID string) error {
}
ids := responseIDs(pending)
sess, err := m.store.GetSession(ctx, sessionID)
if err != nil {
return err
}
if sess.State != api.AgentSessionStateIdle {
slog.Info("deliver held: session not idle", "session", sessionID, "state", sess.State, "responses", ids)
return nil
@@ -362,9 +369,30 @@ func (m *Manager) Deliver(ctx context.Context, sessionID string) error {
}
func (m *Manager) deliverMidTurn(ctx context.Context, l *live) string {
if l.owner != "" {
msgs := m.takeLeadQueuedMidTurn(ctx, l)
if len(msgs) == 0 {
return ""
}
return m.recordQueued(ctx, l, msgs)
}
m.deliverMu.Lock()
defer m.deliverMu.Unlock()
parts := []string{}
msgs := m.takeQueuedMidTurn(ctx, l)
if len(msgs) > 0 {
parts = append(parts, m.recordQueued(ctx, l, msgs))
}
responses := m.responsesMidTurn(ctx, l)
if responses != "" {
parts = append(parts, responses)
}
return strings.Join(parts, "\n\n")
}
func (m *Manager) responsesMidTurn(ctx context.Context, l *live) string {
pending, err := m.store.Undelivered(ctx, l.id)
if err != nil {
slog.Error("list undelivered responses", "session", l.id, "err", err)