Stream each task's transcript over its own SSE; keep session note order
This commit is contained in:
+19
-1
@@ -19,6 +19,21 @@ func (s *Server) StreamEvents(w http.ResponseWriter, r *http.Request, params api
|
||||
if params.LastEventID != nil {
|
||||
last = *params.LastEventID
|
||||
}
|
||||
taskID := ""
|
||||
if params.TaskId != nil {
|
||||
taskID = *params.TaskId
|
||||
_, err := s.store.GetTask(r.Context(), taskID)
|
||||
if err != nil {
|
||||
writeStoreError(w, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
backfill := func(after int64) ([]api.Event, error) {
|
||||
if taskID == "" {
|
||||
return s.store.EventsAfter(r.Context(), after, backfillPage)
|
||||
}
|
||||
return s.store.TaskEvents(r.Context(), taskID, after, backfillPage)
|
||||
}
|
||||
|
||||
rc := http.NewResponseController(w)
|
||||
w.Header().Set("Content-Type", "text/event-stream")
|
||||
@@ -29,7 +44,7 @@ func (s *Server) StreamEvents(w http.ResponseWriter, r *http.Request, params api
|
||||
defer s.hub.unsubscribe(live)
|
||||
|
||||
for {
|
||||
events, err := s.store.EventsAfter(r.Context(), last, backfillPage)
|
||||
events, err := backfill(last)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
@@ -60,6 +75,9 @@ func (s *Server) StreamEvents(w http.ResponseWriter, r *http.Request, params api
|
||||
if ev.Seq != 0 && ev.Seq <= last {
|
||||
continue
|
||||
}
|
||||
if taskID != "" && (ev.TaskId == nil || *ev.TaskId != taskID) {
|
||||
continue
|
||||
}
|
||||
if !writeEvent(w, ev) {
|
||||
return
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user