58 lines
1.2 KiB
Go
58 lines
1.2 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}
|
|
if params.ProjectId != nil {
|
|
f.ProjectID = *params.ProjectId
|
|
}
|
|
if params.TaskId != nil {
|
|
f.TaskID = *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) 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)
|
|
}
|