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'])
|
||||
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')
|
||||
# 从数据库查询工作记忆
|
||||
try:
|
||||
diary = LobsterDiary.objects.get(
|
||||
lobster=lobster,
|
||||
date=date,
|
||||
category='memory'
|
||||
)
|
||||
return Response({
|
||||
'date': date,
|
||||
'content': content
|
||||
'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):
|
||||
|
||||
Reference in New Issue
Block a user