package server import ( "errors" "net/http" "strings" "g.fc.run/misc/byre/internal/api" ) func (s *Server) ListLeadSessions(w http.ResponseWriter, r *http.Request) { sessions, err := s.agents.LeadSessions(r.Context(), actor(r)) if err != nil { writeStoreError(w, err) return } writeJSON(w, http.StatusOK, sessions) } func (s *Server) MessageLead(w http.ResponseWriter, r *http.Request) { req := api.MessageCreate{} if !readJSON(w, r, &req) { return } images, ok := s.images(w, r, req.Images) if !ok { return } if strings.TrimSpace(req.Text) == "" && len(images) == 0 { writeError(w, http.StatusBadRequest, errors.New("text or images are required")) return } u, err := s.store.GetUser(r.Context(), actor(r)) if err != nil { writeStoreError(w, err) return } model := "" if req.Model != nil { model = *req.Model } sess, err := s.agents.MessageLead(r.Context(), u, req.Text, model, images) if err != nil { writeAgentError(w, err) return } writeJSON(w, http.StatusAccepted, sess) } func (s *Server) ListLeadNotes(w http.ResponseWriter, r *http.Request) { notes, err := s.store.LeadNotes(r.Context(), actor(r)) if err != nil { writeStoreError(w, err) return } writeJSON(w, http.StatusOK, notes) } func (s *Server) DeleteLeadNote(w http.ResponseWriter, r *http.Request, noteId string) { err := s.agents.DeleteLeadNote(r.Context(), actor(r), noteId) if err != nil { writeAgentError(w, err) return } w.WriteHeader(http.StatusNoContent) } func (s *Server) GetFocus(w http.ResponseWriter, r *http.Request) { f, err := s.store.GetFocus(r.Context(), actor(r)) if err != nil { writeStoreError(w, err) return } writeJSON(w, http.StatusOK, f) } func (s *Server) SetFocus(w http.ResponseWriter, r *http.Request) { f := api.Focus{} if !readJSON(w, r, &f) { return } err := s.agents.SetFocus(r.Context(), actor(r), f, actor(r)) if err != nil { writeAgentError(w, err) return } f, err = s.store.GetFocus(r.Context(), actor(r)) if err != nil { writeStoreError(w, err) return } writeJSON(w, http.StatusOK, f) } func (s *Server) GetSummaryReads(w http.ResponseWriter, r *http.Request) { reads, err := s.store.SummaryReads(r.Context(), actor(r)) if err != nil { writeStoreError(w, err) return } writeJSON(w, http.StatusOK, reads) } func (s *Server) MarkSummaryRead(w http.ResponseWriter, r *http.Request, taskId string) { body := api.SummaryRead{} if !readJSON(w, r, &body) { return } if body.Seq <= 0 { writeError(w, http.StatusBadRequest, errors.New("seq must be positive")) return } err := s.store.MarkSummaryRead(r.Context(), actor(r), taskId, body.Seq) if err != nil { writeStoreError(w, err) return } w.WriteHeader(http.StatusNoContent) } func (s *Server) SetPaneFocus(w http.ResponseWriter, r *http.Request) { p := api.PaneFocus{} if !readJSON(w, r, &p) { return } s.agents.SetPaneFocus(actor(r), p) w.WriteHeader(http.StatusNoContent) }