diff --git a/backend/users/views.py b/backend/users/views.py index 68661a9a..5ca30225 100644 --- a/backend/users/views.py +++ b/backend/users/views.py @@ -201,11 +201,24 @@ class ScanLocalAgentsView(views.APIView): """ 扫描本机龙虾列表 - GET /api/v1/user/scan-local-agents/?instance_id=xxx - 扫描指定实例 - GET /api/v1/user/scan-local-agents/ - 扫描所有实例 + GET /api/v1/user/scan-local-agents/?instance_id=xxx&username=xxx - 扫描指定实例 + GET /api/v1/user/scan-local-agents/?username=xxx - 扫描所有实例 """ def get(self, request): instance_id = request.query_params.get('instance_id') + username = request.query_params.get('username') + + # 获取用户绑定的龙虾信息(用于获取 agent_name 和 emoji) + user_agents = {} + if username: + from django.contrib.auth import get_user_model + User = get_user_model() + try: + user = User.objects.get(username=username) + for agent in user.linked_agents: + user_agents[agent['agent_id']] = agent + except User.DoesNotExist: + pass if not instance_id: # 返回所有已注册实例的 Agent @@ -214,8 +227,11 @@ class ScanLocalAgentsView(views.APIView): agents = [] for inst in instances: for agent_id in inst.agent_ids: + agent_info = user_agents.get(agent_id, {}) agents.append({ 'agent_id': agent_id, + 'agent_name': agent_info.get('agent_name', agent_id), + 'agent_emoji': agent_info.get('agent_emoji', '🤖'), 'instance_id': inst.instance_id, 'instance_name': inst.instance_name }) @@ -224,11 +240,15 @@ class ScanLocalAgentsView(views.APIView): from instances.models import Instance try: instance = Instance.objects.get(instance_id=instance_id, is_active=True) - agents = [{ - 'agent_id': agent_id, - 'instance_id': instance.instance_id, - 'instance_name': instance.instance_name - } for agent_id in instance.agent_ids] + for agent_id in instance.agent_ids: + agent_info = user_agents.get(agent_id, {}) + agents.append({ + 'agent_id': agent_id, + 'agent_name': agent_info.get('agent_name', agent_id), + 'agent_emoji': agent_info.get('agent_emoji', '🤖'), + 'instance_id': instance.instance_id, + 'instance_name': instance.instance_name + }) except Instance.DoesNotExist: return Response({'error': '实例不存在'}, status=status.HTTP_404_NOT_FOUND) diff --git a/frontend/src/App.js b/frontend/src/App.js index ef597137..a09b1599 100644 --- a/frontend/src/App.js +++ b/frontend/src/App.js @@ -21,12 +21,15 @@ function LoginPage() { // 扫描本机龙虾 useEffect(() => { - scanAgents(); - }, []); + if (username) { + scanAgents(); + } + }, [username]); const scanAgents = async () => { try { - const res = await axios.get(`${API_BASE}/user/scan-local-agents/`); + // 传递 username 参数,获取绑定的龙虾信息 + const res = await axios.get(`${API_BASE}/user/scan-local-agents/?username=${username}`); setAgents(res.data.agents || []); } catch (error) { console.error('扫描龙虾失败:', error);