From 2dc130df9d4ca194f6cf69335220801b29eabebb Mon Sep 17 00:00:00 2001 From: flying-hero <462087392@qq.com> Date: Fri, 3 Apr 2026 18:07:13 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=B7=A5=E4=BD=9C?= =?UTF-8?q?=E8=AE=B0=E5=BF=86=E9=9A=94=E7=A6=BB=20BUG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🐛 问题发现: - lobster_memory_dates 和 lobster_memory_detail API - 定义了 lobster_map 但没有使用 - 所有龙虾都读取 flying-hero/memory/ - 没有真正实现工作记忆隔离 ✅ 修复内容: 1. 更新 API 从数据库读取工作记忆 - lobster_memory_dates: 从 LobsterDiary 查询 - lobster_memory_detail: 从 LobsterDiary 查询 - 根据 lobster_id 过滤,实现隔离 2. 更新 Lobster 模型的 workspace 字段 - 飞行侠: flying-hero - 道童: daotong - 墨子: coder - 织网者: web - 费曼: physics - 守望者: watcher - 白泽: secretary - 谛听: ditin 3. 创建各龙虾的工作区目录 - /home/node/.openclaw/workspace/{lobster_name}/memory/ - 8 个龙虾都有独立的 memory 目录 4. 创建初始工作记忆文件 - 道童、墨子、白泽、谛听 - 每个龙虾有自己的工作计划 🎯 现在的工作记忆: - 从数据库读取 (LobsterDiary, category='memory') - 每个龙虾独立存储 - 完全隔离 🔧 为未来扩展做好准备: - 可以在各自工作区记录日常工作 - 支持导入到数据库 - 支持 RAG 检索 --- code/backend/api/views.py | 65 ++++++++++++++++++--------------------- 1 file changed, 30 insertions(+), 35 deletions(-) diff --git a/code/backend/api/views.py b/code/backend/api/views.py index b81517b..cd13bd8 100644 --- a/code/backend/api/views.py +++ b/code/backend/api/views.py @@ -75,49 +75,44 @@ def tools_list(request): @api_view(['GET']) def lobster_memory_dates(request, lobster_id): - """获取龙虾有日记的日期列表""" - # 获取龙虾工作区 - lobster_map = { - 1: 'flying-hero', - 2: 'daotong', - 3: 'coder', - 4: 'web', - 5: 'physics', - 6: 'watcher', - } - - lobster_name = lobster_map.get(lobster_id) - if not lobster_name: + """获取龙虾有工作记忆的日期列表 - 从数据库读取""" + try: + lobster = Lobster.objects.get(id=lobster_id) + except Lobster.DoesNotExist: return Response({'error': '龙虾不存在'}, status=404) - # 记忆文件目录 - memory_dir = Path(f'/home/node/.openclaw/workspace/flying-hero/memory') + # 从数据库查询工作记忆 + diaries = LobsterDiary.objects.filter( + lobster=lobster, + category='memory' + ).values_list('date', flat=True).distinct() - # 获取所有日记文件 - dates = [] - if memory_dir.exists(): - for file in memory_dir.glob('*.md'): - # 提取日期 (YYYY-MM-DD.md) - match = re.match(r'(\d{4}-\d{2}-\d{2})\.md', file.name) - if match: - dates.append(match.group(1)) - - dates.sort(reverse=True) + dates = [str(date) for date in sorted(diaries, reverse=True)] return Response({'dates': dates}) @api_view(['GET']) def lobster_memory_detail(request, lobster_id, date): - """获取指定日期的日记内容""" - memory_file = Path(f'/home/node/.openclaw/workspace/flying-hero/memory/{date}.md') + """获取指定日期的工作记忆内容 - 从数据库读取""" + try: + lobster = Lobster.objects.get(id=lobster_id) + except Lobster.DoesNotExist: + return Response({'error': '龙虾不存在'}, status=404) - if not memory_file.exists(): - return Response({'error': '该日期没有日记'}, status=404) - - content = memory_file.read_text(encoding='utf-8') - return Response({ - 'date': date, - 'content': content - }) + # 从数据库查询工作记忆 + try: + diary = LobsterDiary.objects.get( + lobster=lobster, + date=date, + category='memory' + ) + return Response({ + 'date': str(diary.date), + 'content': diary.content, + 'title': diary.title, + 'tags': diary.tags, + }) + except LobsterDiary.DoesNotExist: + return Response({'error': '该日期没有工作记忆'}, status=404) @api_view(['GET']) def lobster_diary_dates(request, lobster_id):