"""清理 docs/audit/session_logs/ 下的旧会话日志文件。 保留: - _session_index.json(重置为空 entries) - _system_prompts/ 目录 删除: - full_session_*.md(v1 旧格式) - session_*.md(v1 旧格式) - 2026-02/ 目录(v2 新格式) - 2026-03/ 目录(v2 新格式) """ import json import shutil import time from pathlib import Path from _env_paths import ensure_repo_root ensure_repo_root() BASE = Path("docs/audit/session_logs") def main(): if not BASE.exists(): raise RuntimeError(f"目录不存在: {BASE}") stats = { "full_session_md": 0, "session_md": 0, "v2_dirs_removed": [], "v2_files_in_dirs": 0, } # 1. 删除 full_session_*.md for f in sorted(BASE.glob("full_session_*.md")): f.unlink() stats["full_session_md"] += 1 # 2. 删除 session_*.md for f in sorted(BASE.glob("session_*.md")): f.unlink() stats["session_md"] += 1 # 3. 删除 v2 日期目录(匹配所有 YYYY-MM 格式的目录) import re date_dirs = sorted([d for d in BASE.iterdir() if d.is_dir() and re.match(r"\d{4}-\d{2}$", d.name)]) for d in date_dirs: if d.exists() and d.is_dir(): # 先删除所有文件 files = sorted(d.rglob("*"), reverse=True) for f in files: if f.is_file(): try: f.unlink() stats["v2_files_in_dirs"] += 1 except PermissionError: print(f" ⚠ 无法删除(文件被锁定): {f}") # 再从深到浅删除空目录 time.sleep(0.2) dirs = sorted([x for x in d.rglob("*") if x.is_dir()], reverse=True) for dd in dirs: try: dd.rmdir() except OSError: print(f" ⚠ 无法删除目录(非空/锁定): {dd}") try: d.rmdir() stats["v2_dirs_removed"].append(d.name) except OSError: print(f" ⚠ 无法删除顶层目录: {d}") stats["v2_dirs_removed"].append(f"{d.name}(部分)") # 4. 重置 _session_index.json idx = BASE / "_session_index.json" if idx.exists(): idx.write_text(json.dumps({"version": 2, "entries": {}}, indent=2, ensure_ascii=False) + "\n", encoding="utf-8") print(f"✓ _session_index.json 已重置为空 entries") else: print(f"⚠ _session_index.json 不存在,跳过") # 打印统计 print(f"\n=== 清理统计 ===") print(f" full_session_*.md 删除: {stats['full_session_md']} 个") print(f" session_*.md 删除: {stats['session_md']} 个") print(f" v2 目录删除: {', '.join(stats['v2_dirs_removed']) or '无'}") print(f" v2 目录内文件: {stats['v2_files_in_dirs']} 个") total = stats["full_session_md"] + stats["session_md"] + stats["v2_files_in_dirs"] print(f" 总计删除文件: {total} 个") print(f"\n保留: _session_index.json, _system_prompts/") if __name__ == "__main__": main()