// // Copyright 2026 The InfiniFlow Authors. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package handler import ( "net/http" "strconv" "strings" "github.com/gin-gonic/gin" "ragflow/internal/common" "ragflow/internal/service" ) // AgentHandler agent handler type AgentHandler struct { agentService *service.AgentService } // NewAgentHandler create agent handler func NewAgentHandler(agentService *service.AgentService) *AgentHandler { return &AgentHandler{agentService: agentService} } // ListAgents lists agent canvases for the current user. // @Summary List Agents // @Description List agent canvases accessible to the current user (Home dashboard tile) // @Tags agents // @Produce json // @Param keywords query string false "Filter by title keyword" // @Param page query int false "Page number (0 = no pagination)" // @Param page_size query int false "Items per page (0 = no pagination)" // @Param orderby query string false "Order-by field (default: create_time)" // @Param desc query bool false "Descending order (default: true)" // @Param owner_ids query string false "Comma-separated owner IDs to filter (default: all authorised tenants)" // @Param canvas_category query string false "Canvas category (default: agent_canvas)" // @Success 200 {object} service.ListAgentsResponse // @Router /api/v1/agents [get] func (h *AgentHandler) ListAgents(c *gin.Context) { user, errorCode, errorMessage := GetUser(c) if errorCode != common.CodeSuccess { jsonError(c, errorCode, errorMessage) return } keywords := c.Query("keywords") canvasCategory := c.Query("canvas_category") page := 0 if v := c.Query("page"); v != "" { if p, err := strconv.Atoi(v); err == nil && p > 0 { page = p } } pageSize := 0 if v := c.Query("page_size"); v != "" { if ps, err := strconv.Atoi(v); err == nil && ps > 0 { pageSize = ps } } orderby := c.DefaultQuery("orderby", "create_time") desc := true if v := c.Query("desc"); v != "" { desc = strings.ToLower(v) != "false" } var ownerIDs []string if raw := c.Query("owner_ids"); raw != "" { for _, id := range strings.Split(raw, ",") { id = strings.TrimSpace(id) if id != "" { ownerIDs = append(ownerIDs, id) } } } result, code, err := h.agentService.ListAgents( user.ID, keywords, page, pageSize, orderby, desc, ownerIDs, canvasCategory, ) if err != nil { c.JSON(http.StatusOK, gin.H{ "code": code, "data": false, "message": err.Error(), }) return } c.JSON(http.StatusOK, gin.H{ "code": common.CodeSuccess, "data": result, "message": "success", }) }