""" API views for Agent Diary monitoring. """ from rest_framework.decorators import api_view from rest_framework.response import Response from datetime import datetime from agents.models import Agent, AgentDiary @api_view(['GET']) def agent_list(request): """获取所有 Agent 状态""" agents = Agent.objects.all() result = [] for agent in agents: result.append({ 'id': agent.id, 'name': agent.name, 'emoji': agent.emoji, 'port': agent.port, 'specialty': agent.specialty, 'container': agent.container, 'app_name': agent.app_name, 'app_id': agent.app_id, 'status': 'healthy', 'last_check': datetime.now().isoformat() }) return Response(result) @api_view(['GET']) def agent_detail(request, agent_id): """获取单个 Agent 详情""" try: agent = Agent.objects.get(id=agent_id) return Response({ 'id': agent.id, 'name': agent.name, 'emoji': agent.emoji, 'port': agent.port, 'specialty': agent.specialty, 'container': agent.container, 'app_name': agent.app_name, 'app_id': agent.app_id, 'status': 'healthy', 'workspace': f'/home/node/.openclaw/workspace/{agent.workspace}', 'last_check': datetime.now().isoformat() }) except Agent.DoesNotExist: return Response({'error': 'Agent 不存在'}, status=404) @api_view(['GET']) def tools_list(request): """获取工具列表""" tools = [ { 'name': 'Git 版本控制', 'status': 'running', 'description': '代码版本管理服务', 'url': 'https://xjp.datalibstar.com/flying-hero/openclaw-monitor.git' } ] return Response(tools) @api_view(['GET']) def agent_memory_dates(request, agent_id): """获取 Agent 有工作记忆的日期列表 - 从数据库读取""" try: agent = Agent.objects.get(id=agent_id) except Agent.DoesNotExist: return Response({'error': 'Agent 不存在'}, status=404) # 从数据库查询工作记忆 diaries = AgentDiary.objects.filter( agent=agent, category='memory' ).values_list('date', flat=True).distinct().order_by('-date') dates = [str(date) for date in sorted(diaries, reverse=True)] return Response({'dates': dates}) @api_view(['GET']) def agent_memory_detail(request, agent_id, date): """获取指定日期的工作记忆内容 - 从数据库读取""" try: agent = Agent.objects.get(id=agent_id) except Agent.DoesNotExist: return Response({'error': 'Agent 不存在'}, status=404) # 从数据库查询工作记忆 try: diary = AgentDiary.objects.get( agent=agent, date=date, category='memory' ) return Response({ 'date': str(diary.date), 'content': diary.content, 'title': diary.title, 'tags': diary.tags, }) except AgentDiary.DoesNotExist: return Response({'error': '该日期没有工作记忆'}, status=404) @api_view(['GET']) def agent_diary_dates(request, agent_id): """获取 Agent 有日记(成长之路)的日期列表 - 从数据库读取""" try: agent = Agent.objects.get(id=agent_id) except Agent.DoesNotExist: return Response({'error': 'Agent 不存在'}, status=404) # 从数据库查询日记日期 diaries = AgentDiary.objects.filter( agent=agent, category='chengcai' ).values_list('date', flat=True).distinct().order_by('-date') dates = [str(date) for date in sorted(diaries, reverse=True)] return Response({'dates': dates}) @api_view(['GET']) def agent_diary_detail(request, agent_id, date): """获取指定日期的日记内容(成长之路) - 从数据库读取""" try: agent = Agent.objects.get(id=agent_id) except Agent.DoesNotExist: return Response({'error': 'Agent 不存在'}, status=404) # 从数据库查询日记 try: diary = AgentDiary.objects.get( agent=agent, date=date, category='chengcai' ) return Response({ 'date': str(diary.date), 'content': diary.content, 'title': diary.title, 'tags': diary.tags, }) except AgentDiary.DoesNotExist: return Response({'error': '该日期没有日记'}, status=404)