| | |
| | | """ |
| | | memory-md-learning 学习记录脚本 |
| | | 记录陷阱、教训和解决方案到长期记忆和 MEMORY.md |
| | | 【限制:只修改"学习事件"区块,其他内容保持不变】 |
| | | """ |
| | | |
| | | import os |
| | |
| | | stripped = line.strip() |
| | | |
| | | # 检测学习事件区块 |
| | | if '学习事件' in stripped and stripped.startswith('#'): |
| | | if '## 📚 学习事件' in stripped: |
| | | in_learning = True |
| | | continue |
| | | elif stripped.startswith('#') and in_learning: |
| | | elif stripped.startswith('#') and in_learning and '学习事件' not in stripped: |
| | | in_learning = False |
| | | |
| | | # 收集学习事件 |
| | |
| | | def update_memory_md_learning(summary, keywords): |
| | | """ |
| | | 更新 MEMORY.md 的学习事件区块 |
| | | 【限制:只修改"学习事件"区块,其他内容保持不变】 |
| | | """ |
| | | content = read_memory_file() |
| | | if not content: |
| | |
| | | if any(new_event.strip() in existing.strip() for existing in existing_events): |
| | | return {'added': False, 'message': '学习事件已存在'} |
| | | |
| | | # 【关键】使用正则替换只修改学习事件区块,保留其他所有内容 |
| | | # 找到学习事件区块并插入新事件 |
| | | lines = content.split('\n') |
| | | new_lines = [] |
| | | in_learning = False |
| | | learning_inserted = False |
| | | all_events = existing_events + [new_event] |
| | | events_content = '\n'.join(all_events) |
| | | |
| | | for i, line in enumerate(lines): |
| | | stripped = line.strip() |
| | | # 替换学习事件区块内容(保留区块标题和说明) |
| | | learning_pattern = r'(## 📚 学习事件\n\n> 记录从陷阱和教训中学习的经验。\n> 所有学习记录永久保留,可使用 memory-md-archive 技能归档瘦身。\n\n)(.*?)(\n---\n\n\*文件大小:)' |
| | | learning_replacement = r'\1' + events_content + r'\3' |
| | | new_content = re.sub(learning_pattern, learning_replacement, content, flags=re.DOTALL) |
| | | |
| | | # 如果正则没有匹配到(格式可能不同),使用原来的方法 |
| | | if new_content == content: |
| | | lines = content.split('\n') |
| | | new_lines = [] |
| | | in_learning = False |
| | | learning_inserted = False |
| | | |
| | | # 检测学习事件区块开始 |
| | | if '## 📚 学习事件' in stripped: |
| | | in_learning = True |
| | | new_lines.append(line) |
| | | continue |
| | | |
| | | # 检测学习事件区块结束(遇到下一个标题或文件末尾信息) |
| | | if in_learning and stripped.startswith('#') and '学习事件' not in stripped: |
| | | if not learning_inserted: |
| | | new_lines.append(new_event) |
| | | learning_inserted = True |
| | | in_learning = False |
| | | new_lines.append(line) |
| | | continue |
| | | |
| | | # 在学习事件区块内,跳过空行后插入新事件 |
| | | if in_learning and not learning_inserted: |
| | | if stripped == '' and i > 0 and '记录从陷阱' not in lines[i-1] and '所有学习记录' not in lines[i-1]: |
| | | new_lines.append(new_event) |
| | | new_lines.append('') |
| | | learning_inserted = True |
| | | for i, line in enumerate(lines): |
| | | stripped = line.strip() |
| | | |
| | | # 检测学习事件区块开始 |
| | | if '## 📚 学习事件' in stripped: |
| | | in_learning = True |
| | | new_lines.append(line) |
| | | continue |
| | | |
| | | # 检测学习事件区块结束(遇到下一个标题或文件末尾信息) |
| | | if in_learning and stripped.startswith('#') and '学习事件' not in stripped: |
| | | if not learning_inserted: |
| | | new_lines.append(new_event) |
| | | learning_inserted = True |
| | | in_learning = False |
| | | new_lines.append(line) |
| | | continue |
| | | |
| | | # 在学习事件区块内,跳过空行后插入新事件 |
| | | if in_learning and not learning_inserted: |
| | | if stripped == '' and i > 0 and '记录从陷阱' not in lines[i-1] and '所有学习记录' not in lines[i-1]: |
| | | new_lines.append(new_event) |
| | | new_lines.append('') |
| | | learning_inserted = True |
| | | continue |
| | | |
| | | new_lines.append(line) |
| | | |
| | | new_lines.append(line) |
| | | |
| | | # 如果在文件末尾,确保插入了事件 |
| | | if in_learning and not learning_inserted: |
| | | new_lines.append(new_event) |
| | | # 如果在文件末尾,确保插入了事件 |
| | | if in_learning and not learning_inserted: |
| | | new_lines.append(new_event) |
| | | |
| | | new_content = '\n'.join(new_lines) |
| | | |
| | | # 更新文件大小信息 |
| | | new_content = '\n'.join(new_lines) |
| | | |
| | | # 更新文件大小统计 |
| | | write_memory_file(new_content) |
| | | new_size = get_file_size() |
| | | size_kb = round(new_size / 1024, 2) |
| | |
| | | |
| | | --- |
| | | |
| | | ## 📚 学习事件 |
| | | |
| | | > 记录从陷阱和教训中学习的经验。 |
| | | > 所有学习记录永久保留,可使用 memory-md-archive 技能归档瘦身。 |
| | | |
| | | --- |
| | | |
| | | *文件大小: ~0.5KB | 事件数: 0* |
| | | *维护脚本: `memory-md-hot/scripts/daily_maintenance.py`* |
| | | *归档提示: 文件较大时请使用 memory-md-archive 技能归档* |