Always "extract", so JSON consumers can identify the command
Whether the run completed without errors
Whether this was a dry run, so no files were touched
Number of markdown files examined
Markdown files whose content was rewritten (empty in a dry run)
Number of inline data URIs rewritten to file links
Image files created (empty in a dry run)
Error messages, one per failure
Warning messages
Summary of an extract run, in the shape emitted by
--json.