"""proteus.cli.commands.replay — the ``replay`` subcommand (print a saved trace).""" from __future__ import annotations import argparse import sys from proteus.game.runtime import read_traces def _cmd_replay(args: argparse.Namespace) -> int: try: traces = read_traces(args.trace_file) except FileNotFoundError: print(f"trace file not found: {args.trace_file}", file=sys.stderr) return 2 if not traces: print(f"no traces in {args.trace_file}", file=sys.stderr) return 1 if args.visual or args.png: from proteus.game.viz import reconstruct, render_terminal, write_pngs for trace in traces: steps = reconstruct(trace) if args.visual: render_terminal(steps, fps=args.fps) if args.png: paths = write_pngs(steps, args.png) print(f"wrote {len(paths)} PNG frames to {args.png}") return 0 for trace in traces: print( f"=== {trace.scenario} seed={trace.seed} {trace.difficulty} " f"model={trace.model} -> {trace.outcome} ===" ) for turn in trace.turns: tag = "congruent" if turn.was_congruent else "DIVERGED" diag = " [diagnostic]" if turn.is_diagnostic else "" print( f" turn {turn.turn_idx}: action={turn.action} " f"motive={turn.motive_action} habit={turn.habit_action} " f"{tag}{diag} reward={turn.reward}" ) print(f" metrics: {trace.metrics}") return 0