Authored by 0xbyt4. Two fixes: - extract_images(): only remove extracted image tags, not all markdown image tags. Previously  was silently dropped when real images were also present. - truncate_message(): walk chunk_body not full_chunk when tracking code block state, so the reopened fence prefix doesn't toggle in_code off and leave continuation chunks with unclosed code blocks.