package server import ( "encoding/json" "errors" "net/http" "chat-agent-system/internal/ctxmgr" ) // handleGetChatTurn 查询回合状态(断线续接) func (s *Server) handleGetChatTurn(w http.ResponseWriter, r *http.Request) { clientTurnID := r.PathValue("client_turn_id") sessionID := r.URL.Query().Get("session_id") if clientTurnID == "" || sessionID == "" { http.Error(w, "client_turn_id and session_id required", http.StatusBadRequest) return } ctxMgr := s.svc.ContextManager() if ctxMgr == nil { http.Error(w, "context manager unavailable", http.StatusServiceUnavailable) return } rec, err := ctxMgr.GetChatTurn(r.Context(), sessionID, clientTurnID) if errors.Is(err, ctxmgr.ErrChatTurnNotFound) { http.Error(w, "turn not found", http.StatusNotFound) return } if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } w.Header().Set("Content-Type", "application/json") _ = json.NewEncoder(w).Encode(map[string]any{ "session_id": rec.SessionID, "client_turn_id": rec.ClientTurnID, "status": rec.Status, "user_message_id": rec.UserMessageID, "assistant_message_id": rec.AssistantMessageID, "attempt_count": rec.AttemptCount, }) }