Stream each task's transcript over its own SSE; keep session note order

This commit is contained in:
Ian Gulliver
2026-10-14 23:53:17 -07:00
parent eabfc10c8d
commit 2b4d92e7d5
18 changed files with 304 additions and 191 deletions
+19 -1
View File
@@ -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
}