Files
Neo-ZQYY/scripts/ops/import_session_summaries.py

94 lines
2.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""将外部生成的摘要导入到双索引文件。
精简索引 (_session_index.json):仅主对话
完整索引 (_session_index_full.json):主对话 + 子代理
输入文件格式 (_summaries.json):
{
"exec_id_short": "摘要文本",
"447a8e20": "完成了 Kiro 日志存储结构的逆向工程...",
...
}
用法:
python -B scripts/ops/import_session_summaries.py export/session_summaries/_summaries.json
python -B scripts/ops/import_session_summaries.py --dry-run export/session_summaries/_summaries.json
"""
import json
import sys
from pathlib import Path
from _env_paths import ensure_repo_root
ensure_repo_root()
INDEX_DIR = Path("docs/audit/session_logs")
INDEX_PATH = INDEX_DIR / "_session_index.json"
INDEX_FULL_PATH = INDEX_DIR / "_session_index_full.json"
def load_json(path: Path) -> dict:
if not path.exists():
return {"version": 2, "entries": {}}
return json.loads(path.read_text(encoding="utf-8"))
def save_json(path: Path, data: dict):
path.write_text(
json.dumps(data, indent=2, ensure_ascii=False) + "\n",
encoding="utf-8",
)
def import_to_index(entries: dict, summaries: dict, dry_run: bool) -> tuple[int, int]:
"""将摘要写入索引 entries返回 (matched, not_found)"""
matched = 0
not_found = 0
for short_id, desc in summaries.items():
found = False
for full_id in entries:
if full_id.startswith(short_id):
if not dry_run:
entries[full_id]["description"] = desc
matched += 1
found = True
break
if not found:
not_found += 1
return matched, not_found
def main():
import argparse
parser = argparse.ArgumentParser(description="导入摘要到 session 双索引")
parser.add_argument("summaries_file", help="_summaries.json 文件路径")
parser.add_argument("--dry-run", action="store_true", help="只预览不写入")
args = parser.parse_args()
summaries = json.loads(Path(args.summaries_file).read_text(encoding="utf-8"))
print(f"读取 {len(summaries)} 条摘要")
# 精简索引
index = load_json(INDEX_PATH)
entries = index.get("entries", {})
m1, nf1 = import_to_index(entries, summaries, args.dry_run)
print(f"精简索引: {m1} 条匹配, {nf1} 条未找到")
# 完整索引
full_index = load_json(INDEX_FULL_PATH)
full_entries = full_index.get("entries", {})
m2, nf2 = import_to_index(full_entries, summaries, args.dry_run)
print(f"完整索引: {m2} 条匹配, {nf2} 条未找到")
if not args.dry_run:
save_json(INDEX_PATH, index)
save_json(INDEX_FULL_PATH, full_index)
print("写入完成")
else:
print("(dry-run 模式,未写入)")
if __name__ == "__main__":
main()