from __future__ import annotations import argparse import json import sys from pathlib import Path from typing import Any ROOT = Path(__file__).resolve().parents[1] if str(ROOT) not in sys.path: sys.path.insert(0, str(ROOT)) from content_agent.integrations.walk_strategy_json import ( RULE_PACK_PATH, WALK_STRATEGY_PATH, validate_walk_strategy_config, ) def main() -> int: args = _parse_args() path = args.config_path if args.config_path.is_absolute() else _repo_root() / args.config_path strategy = json.loads(path.read_text(encoding="utf-8")) root_dir = _repo_root() findings = validate_walk_strategy_config( strategy, root_dir=root_dir, strategy_path=path.relative_to(root_dir), rule_pack_path=RULE_PACK_PATH, ) result: dict[str, Any] = { "status": "fail" if any(finding["level"] == "fail" for finding in findings) else "pass", "config_path": str(path.relative_to(root_dir)), "walk_strategy_version": strategy.get("strategy_version"), "findings": findings, } print(json.dumps(result, ensure_ascii=False, indent=2)) return 1 if result["status"] == "fail" else 0 def _parse_args() -> argparse.Namespace: parser = argparse.ArgumentParser() parser.add_argument( "config_path", nargs="?", type=Path, default=_repo_root() / WALK_STRATEGY_PATH, ) return parser.parse_args() def _repo_root() -> Path: return Path(__file__).resolve().parents[1] if __name__ == "__main__": sys.exit(main())