Load the lead's scrollback 50 turns at a time

This commit is contained in:
Ian Gulliver
2026-10-16 18:11:00 -07:00
parent 5dddc15ab9
commit 859aa2dd8b
20 changed files with 625 additions and 238 deletions
+27
View File
@@ -1297,6 +1297,33 @@ func (s *Store) LeadEvents(ctx context.Context, owner string, after int64, limit
return scanEvents(rows)
}
func (s *Store) LeadEventsPage(ctx context.Context, owner string, before int64, turns int) (api.EventPage, error) {
from := int64(0)
more := true
err := s.db.QueryRowContext(ctx, `
SELECT seq FROM events WHERE owner = ? AND agent_session_id IS NOT NULL AND kind = 'turn.ended' AND seq < ?
ORDER BY seq DESC LIMIT 1 OFFSET ?
`, owner, before, turns).Scan(&from)
if errors.Is(err, sql.ErrNoRows) {
more = false
} else if err != nil {
return api.EventPage{}, err
}
rows, err := s.db.QueryContext(ctx, `
SELECT `+eventColumns+`
FROM events WHERE owner = ? AND agent_session_id IS NOT NULL AND seq > ? AND seq < ? ORDER BY seq
`, owner, from, before)
if err != nil {
return api.EventPage{}, err
}
events, err := scanEvents(rows)
if err != nil {
return api.EventPage{}, err
}
return api.EventPage{Events: events, More: more}, nil
}
func scanEvents(rows *sql.Rows) ([]api.Event, error) {
defer rows.Close()