95 lines
3.1 KiB
Python
95 lines
3.1 KiB
Python
"""清理 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()
|