from __future__ import annotations import argparse import functools import http.server import socketserver from pathlib import Path from .record import record_episode, write_record def main() -> None: parser = argparse.ArgumentParser(description="Mahjong RL web viewer") parser.add_argument("--port", type=int, default=8000) parser.add_argument("--seed", type=int, default=None) parser.add_argument("--max-steps", type=int, default=200) args = parser.parse_args() static_dir = Path(__file__).parent / "static" static_dir.mkdir(parents=True, exist_ok=True) record_path = static_dir / "steps.json" events = record_episode(seed=args.seed, max_steps=args.max_steps) write_record(record_path, events) handler = functools.partial(http.server.SimpleHTTPRequestHandler, directory=str(static_dir)) with socketserver.TCPServer(("", args.port), handler) as httpd: print(f"Serving UI at http://localhost:{args.port}/index.html") httpd.serve_forever() if __name__ == "__main__": main()