package api import ( "net/http" "strconv" "github.com/thepeterstone/claudomator/internal/event" ) // handleListTaskEvents returns a task's observability event stream in seq order. // Pass ?since_seq=N to fetch only events newer than seq N (incremental polling). func (s *Server) handleListTaskEvents(w http.ResponseWriter, r *http.Request) { id := r.PathValue("id") if _, err := s.store.GetTask(id); err != nil { writeJSON(w, http.StatusNotFound, map[string]string{"error": "task not found"}) return } var sinceSeq int64 if v := r.URL.Query().Get("since_seq"); v != "" { n, err := strconv.ParseInt(v, 10, 64) if err != nil || n < 0 { writeJSON(w, http.StatusBadRequest, map[string]string{"error": "invalid since_seq"}) return } sinceSeq = n } events, err := s.store.ListEvents(id, sinceSeq) if err != nil { writeJSON(w, http.StatusInternalServerError, map[string]string{"error": err.Error()}) return } if events == nil { events = []*event.Event{} } writeJSON(w, http.StatusOK, events) }