From 32737f2bab875c55b8ad4cbbf477d907674bc0d4 Mon Sep 17 00:00:00 2001
From: TevinClaw <510129976@qq.com>
Date: Tue, 17 Mar 2026 14:50:46 +0800
Subject: [PATCH] 修复:补回MEMORY.md被删除内容,限制技能只修改指定区块

---
 workspace/skills/memory-md-learning/scripts/learning.py |   93 ++++++++++++++++++++++++++++------------------
 1 files changed, 56 insertions(+), 37 deletions(-)

diff --git a/workspace/skills/memory-md-learning/scripts/learning.py b/workspace/skills/memory-md-learning/scripts/learning.py
index bdeaab9..c0de94c 100755
--- a/workspace/skills/memory-md-learning/scripts/learning.py
+++ b/workspace/skills/memory-md-learning/scripts/learning.py
@@ -2,6 +2,7 @@
 """
 memory-md-learning 学习记录脚本
 记录陷阱、教训和解决方案到长期记忆和 MEMORY.md
+【限制:只修改"学习事件"区块,其他内容保持不变】
 """
 
 import os
@@ -47,10 +48,10 @@
         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
             
         # 收集学习事件
@@ -119,6 +120,7 @@
 def update_memory_md_learning(summary, keywords):
     """
     更新 MEMORY.md 的学习事件区块
+    【限制:只修改"学习事件"区块,其他内容保持不变】
     """
     content = read_memory_file()
     if not content:
@@ -162,48 +164,58 @@
     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)
@@ -273,6 +285,13 @@
 
 ---
 
+## 📚 学习事件
+
+> 记录从陷阱和教训中学习的经验。
+> 所有学习记录永久保留,可使用 memory-md-archive 技能归档瘦身。
+
+---
+
 *文件大小: ~0.5KB | 事件数: 0*
 *维护脚本: `memory-md-hot/scripts/daily_maintenance.py`*
 *归档提示: 文件较大时请使用 memory-md-archive 技能归档*

--
Gitblit v1.9.1