84 lines
1.8 KiB
Go
84 lines
1.8 KiB
Go
package server
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"g.fc.run/ai/byre/internal/api"
|
|
"g.fc.run/ai/byre/internal/store"
|
|
)
|
|
|
|
func (s *Server) ListInbox(w http.ResponseWriter, r *http.Request, params api.ListInboxParams) {
|
|
f := store.InboxFilter{State: api.Open, ProjectID: api.Deref(params.ProjectId), TaskID: api.Deref(params.TaskId)}
|
|
if params.State != nil {
|
|
f.State = *params.State
|
|
}
|
|
|
|
items, err := s.store.ListInbox(r.Context(), f)
|
|
if err != nil {
|
|
writeStoreError(w, err)
|
|
return
|
|
}
|
|
writeJSON(w, http.StatusOK, items)
|
|
}
|
|
|
|
func (s *Server) GetInboxItem(w http.ResponseWriter, r *http.Request, itemID string) {
|
|
item, err := s.store.GetInboxItem(r.Context(), itemID)
|
|
if err != nil {
|
|
writeStoreError(w, err)
|
|
return
|
|
}
|
|
writeJSON(w, http.StatusOK, item)
|
|
}
|
|
|
|
func (s *Server) DismissInbox(w http.ResponseWriter, r *http.Request, itemID string) {
|
|
item, err := s.agents.Dismiss(r.Context(), actor(r), itemID)
|
|
if err != nil {
|
|
writeAgentError(w, err)
|
|
return
|
|
}
|
|
writeJSON(w, http.StatusOK, item)
|
|
}
|
|
|
|
func (s *Server) AnswerAgain(w http.ResponseWriter, r *http.Request) {
|
|
req := api.InboxResponseCreate{}
|
|
if !readJSON(w, r, &req) {
|
|
return
|
|
}
|
|
_, ok := s.images(w, r, req.Images)
|
|
if !ok {
|
|
return
|
|
}
|
|
|
|
u, ok := s.actingUser(w, r)
|
|
if !ok {
|
|
return
|
|
}
|
|
|
|
fork, err := s.agents.AnswerAgain(r.Context(), u, req)
|
|
if err != nil {
|
|
writeAgentError(w, err)
|
|
return
|
|
}
|
|
writeJSON(w, http.StatusCreated, fork)
|
|
}
|
|
|
|
func (s *Server) RespondInbox(w http.ResponseWriter, r *http.Request) {
|
|
req := api.InboxRespond{}
|
|
if !readJSON(w, r, &req) {
|
|
return
|
|
}
|
|
for _, c := range req.Responses {
|
|
_, ok := s.images(w, r, c.Images)
|
|
if !ok {
|
|
return
|
|
}
|
|
}
|
|
|
|
items, err := s.agents.Respond(r.Context(), actor(r), req.Responses)
|
|
if err != nil {
|
|
writeAgentError(w, err)
|
|
return
|
|
}
|
|
writeJSON(w, http.StatusOK, items)
|
|
}
|