"""GTI Fiscal Agent installation preflight (READ-ONLY): python agent/scripts/preflight.py [--env-file FILE] [--json] Prints PREFLIGHT=PASS|FAIL and the blockers; exit code 0 on PASS, 2 on FAIL. Secrets are never printed. """ import argparse import json import os import sys from pathlib import Path AGENT_ROOT = Path(__file__).resolve().parents[1] sys.path.insert(0, str(AGENT_ROOT / "src")) from gti_fiscal_agent.preflight import run_preflight # noqa: E402 def load_env(path): if path and Path(path).exists(): for line in Path(path).read_text(encoding="utf-8").splitlines(): line = line.strip() if line and not line.startswith("#") and "=" in line: k, _, v = line.partition("=") os.environ.setdefault(k.strip(), v.strip()) def main(argv=None): ap = argparse.ArgumentParser() ap.add_argument("--env-file") ap.add_argument("--json", action="store_true") a = ap.parse_args(argv) load_env(a.env_file or os.environ.get("GTI_AGENT_ENV_FILE") or AGENT_ROOT.parent / ".env") os.environ.setdefault("AGENT_STATE_DB", str(AGENT_ROOT / "agent_state.sqlite")) os.environ.setdefault("AGENT_LOG_PATH", str(AGENT_ROOT / "logs" / "agent.log")) res = run_preflight(os.environ) if a.json: print(json.dumps(res, ensure_ascii=False, indent=1, default=str)) else: for c in res["checks"]: print(f" [{c['status']:<4}] {c['name']:<24} {c['detail']}") print(f"PREFLIGHT={res['PREFLIGHT']}") for b in res["blockers"]: print(f"BLOCKER: {b}") raise SystemExit(0 if res["PREFLIGHT"] == "PASS" else 2) if __name__ == "__main__": main()