| | |
| | | def update_memory_file(new_daily_events=None, important_event=None): |
| | | """ |
| | | 更新 memory.md 文件 |
| | | 【限制:只修改"重要事件"和"最近7天事件流水"区块,其他内容保持不变】 |
| | | |
| | | Args: |
| | | new_daily_events: 新的每日事件列表 [(date, time, summary, keywords), ...] |
| | |
| | | result['added_important'] = True |
| | | result['messages'].append(f"重要事件已记录: {summary}") |
| | | |
| | | # 重新构建文件内容 |
| | | # 重新构建文件内容 - 只修改指定区块,保留其他内容 |
| | | today = datetime.now().strftime('%Y-%m-%d') |
| | | |
| | | # 按日期分组日常事件 |
| | |
| | | daily_by_date[date_str] = [] |
| | | daily_by_date[date_str].append(line) |
| | | |
| | | # 构建日常事件区块 |
| | | # 构建日常事件区块内容 |
| | | daily_sections = [] |
| | | for date_str in sorted(daily_by_date.keys(), reverse=True): |
| | | daily_sections.append(f"\n### {date_str}\n") |
| | |
| | | |
| | | daily_content = ''.join(daily_sections) if daily_sections else f"\n### {today}\n\n- {today} --:-- | 暂无记录 | --\n" |
| | | |
| | | # 构建重要事件区块 |
| | | # 构建重要事件区块内容 |
| | | important_content = '\n'.join(new_important) if new_important else "<!-- 重要事件在此添加 -->" |
| | | |
| | | # 计算统计 |
| | | total_events = len(all_daily) + len(new_important) |
| | | result['total_events'] = total_events |
| | | |
| | | # 组装最终内容 |
| | | current_size = get_file_size() |
| | | result['current_size_kb'] = round(current_size / 1024, 2) |
| | | # 【关键】使用正则替换只修改指定区块,保留其他所有内容 |
| | | new_content = content |
| | | |
| | | new_content = f"""# MEMORY.md - 热记忆 / 活跃记忆 |
| | | |
| | | > 本文件记录近期发生的重要事情,详细信息可通过记忆检索获取。 |
| | | |
| | | --- |
| | | |
| | | ## 🔔 重要事件 |
| | | |
| | | > 记录具有全局长期性影响的重要决策和事件。 |
| | | > 添加重要事件时会告知用户。 |
| | | |
| | | {important_content} |
| | | |
| | | --- |
| | | |
| | | ## 📅 事件流水 |
| | | |
| | | > 按天分组,每天主要事情的概要。 |
| | | > 所有记录永久保留,可使用 memory-md-archive 技能归档瘦身。 |
| | | {daily_content} |
| | | --- |
| | | |
| | | *文件大小: ~{result['current_size_kb']:.1f}KB | 事件数: {total_events}* |
| | | *维护脚本: `memory-md-hot/scripts/daily_maintenance.py`* |
| | | *归档提示: 文件较大时请使用 memory-md-archive 技能归档* |
| | | """ |
| | | # 替换重要事件区块(## 🔔 重要事件 和 ## 📅 事件流水 之间) |
| | | important_pattern = r'(## 🔔 重要事件\n\n> 记录具有全局长期性影响的重要决策和事件。\n> 添加重要事件时会告知用户。\n\n)(.*?)(\n---\n\n## 📅 事件流水)' |
| | | important_replacement = r'\1' + important_content + r'\3' |
| | | new_content = re.sub(important_pattern, important_replacement, new_content, flags=re.DOTALL) |
| | | |
| | | # 替换事件流水区块(## 📅 事件流水 和下一个 ## 或文件末尾之间) |
| | | # 找到事件流水区块的结束位置(下一个 ## 标题或文件末尾的 ---) |
| | | daily_pattern = r'(## 📅 最近7天事件流水\n\n> 按天分组,每天主要事情的概要。\n> 自动维护,8天前的记录会被移除。)(.*?)(\n---\n\n## 📚 学习事件|\n---\n\n\*文件大小:)' |
| | | |
| | | # 检查是否有学习事件区块 |
| | | if '## 📚 学习事件' in new_content: |
| | | daily_replacement = r'\1' + daily_content + r'\3' |
| | | new_content = re.sub(daily_pattern, daily_replacement, new_content, flags=re.DOTALL) |
| | | else: |
| | | # 没有学习事件区块,替换到文件末尾 |
| | | daily_pattern_simple = r'(## 📅 最近7天事件流水\n\n> 按天分组,每天主要事情的概要。\n> 自动维护,8天前的记录会被移除。)(.*?)(\n---\n\n\*文件大小:)' |
| | | daily_replacement = r'\1' + daily_content + r'\3' |
| | | new_content = re.sub(daily_pattern_simple, daily_replacement, new_content, flags=re.DOTALL) |
| | | |
| | | # 写入文件 |
| | | write_memory_file(new_content) |