from __future__ import annotations import argparse import json from dataclasses import asdict, is_dataclass from typing import Any def _jsonable(value: Any) -> Any: if is_dataclass(value): return {key: _jsonable(item) for key, item in asdict(value).items()} if isinstance(value, dict): return {str(key): _jsonable(item) for key, item in value.items()} if isinstance(value, (list, tuple)): return [_jsonable(item) for item in value] return value def main() -> None: parser = argparse.ArgumentParser(prog="agent-process-dashboard") parser.add_argument("--snapshot", action="store_true", help="Print a read-only JSON snapshot.") parser.add_argument("--dry-run", action="store_true", help="Print cleanup candidates only.") args = parser.parse_args() if args.snapshot or args.dry_run: from .snapshot import build_snapshot snapshot = build_snapshot() payload = snapshot.dry_run if args.dry_run else snapshot print(json.dumps(_jsonable(payload), indent=2, sort_keys=True)) return from .app import run run() if __name__ == "__main__": main()