from __future__ import annotations import argparse import sys from pathlib import Path REPO_ROOT = Path(__file__).resolve().parents[1] SRC_ROOT = REPO_ROOT / "src" if str(SRC_ROOT) not in sys.path: sys.path.insert(0, str(SRC_ROOT)) from summary_mcp.core.keyword_index import persist_keyword_indexes from summary_mcp.models.openclaw_delivery import OpenClawDeliveryPayload def _load_payload(path: Path) -> OpenClawDeliveryPayload: return OpenClawDeliveryPayload.model_validate_json(path.read_text(encoding="utf-8-sig")) def main() -> None: parser = argparse.ArgumentParser( description="Build the daily keyword index and global keyword stats from an OpenClaw delivery payload." ) parser.add_argument( "--input", type=Path, required=True, help="OpenClaw delivery payload JSON file", ) parser.add_argument( "--daily-dir", type=Path, default=REPO_ROOT / "data" / "term_index" / "daily", help="Directory for daily keyword index files", ) parser.add_argument( "--stats-output", type=Path, default=REPO_ROOT / "data" / "term_index" / "term_stats.json", help="Global keyword stats output path", ) parser.add_argument( "--aliases", type=Path, default=REPO_ROOT / "configs" / "term_aliases.json", help="Keyword alias config JSON file", ) parser.add_argument( "--stopwords", type=Path, default=REPO_ROOT / "configs" / "term_stopwords.json", help="Keyword stopwords config JSON file", ) args = parser.parse_args() payload = _load_payload(args.input) result = persist_keyword_indexes( payload.candidates, for_date=payload.date, digest_id=payload.run_id, source="openclaw_delivery_payload", daily_dir=args.daily_dir, stats_path=args.stats_output, aliases_path=args.aliases, stopwords_path=args.stopwords, ) print(f"Saved daily keyword index to {result['daily_output']}") print(f"Saved keyword stats to {result['stats_output']}") print(f"Indexed {result['candidate_count']} candidates and {result['term_count']} keywords") if __name__ == "__main__": main()