fix: 修复工作记忆隔离 BUG
🐛 问题发现: - 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 检索
This commit is contained in:
@@ -75,49 +75,44 @@ def tools_list(request):
|
|||||||
|
|
||||||
@api_view(['GET'])
|
@api_view(['GET'])
|
||||||
def lobster_memory_dates(request, lobster_id):
|
def lobster_memory_dates(request, lobster_id):
|
||||||
"""获取龙虾有日记的日期列表"""
|
"""获取龙虾有工作记忆的日期列表 - 从数据库读取"""
|
||||||
# 获取龙虾工作区
|
try:
|
||||||
lobster_map = {
|
lobster = Lobster.objects.get(id=lobster_id)
|
||||||
1: 'flying-hero',
|
except Lobster.DoesNotExist:
|
||||||
2: 'daotong',
|
|
||||||
3: 'coder',
|
|
||||||
4: 'web',
|
|
||||||
5: 'physics',
|
|
||||||
6: 'watcher',
|
|
||||||
}
|
|
||||||
|
|
||||||
lobster_name = lobster_map.get(lobster_id)
|
|
||||||
if not lobster_name:
|
|
||||||
return Response({'error': '龙虾不存在'}, status=404)
|
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 = [str(date) for date in sorted(diaries, reverse=True)]
|
||||||
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)
|
|
||||||
return Response({'dates': dates})
|
return Response({'dates': dates})
|
||||||
|
|
||||||
@api_view(['GET'])
|
@api_view(['GET'])
|
||||||
def lobster_memory_detail(request, lobster_id, date):
|
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)
|
try:
|
||||||
|
diary = LobsterDiary.objects.get(
|
||||||
content = memory_file.read_text(encoding='utf-8')
|
lobster=lobster,
|
||||||
|
date=date,
|
||||||
|
category='memory'
|
||||||
|
)
|
||||||
return Response({
|
return Response({
|
||||||
'date': date,
|
'date': str(diary.date),
|
||||||
'content': content
|
'content': diary.content,
|
||||||
|
'title': diary.title,
|
||||||
|
'tags': diary.tags,
|
||||||
})
|
})
|
||||||
|
except LobsterDiary.DoesNotExist:
|
||||||
|
return Response({'error': '该日期没有工作记忆'}, status=404)
|
||||||
|
|
||||||
@api_view(['GET'])
|
@api_view(['GET'])
|
||||||
def lobster_diary_dates(request, lobster_id):
|
def lobster_diary_dates(request, lobster_id):
|
||||||
|
|||||||
Reference in New Issue
Block a user