1. download_entry_t pydantic model (frozen=True) replaces tuples;
2. download_t class with async run(), _download_one(), _run_parallel(), _run_aria2c_batch();
3. asyncio.Semaphore for -j concurrency, run_in_executor for blocking I/O;
4. .part file pattern: download to dest.pkg.part, rename on success;
5. curl -C - and aria2c --continue=true for resume support;
6. curl/aria2c stdout/stderr redirected to devnull;
7. --dry-run, --verify-checksum BooleanOptionalAction flags;
8. --progress-mode plain|interactive using terminal.py renderer;
9. progress_t with byte-based ETA (when --size= available) and pkg-rate fallback;
10. parse --size=BYTES and --hash=sha256: from compiled requirements;
11. update test_cli.py downloader tests for .part rename and **kwargs;
12. update test_download_cli.py for pydantic model and new progress_t constructor;