matrix: deliver inbound images to the assistant layer (vision) master
Images sent over Matrix were silently dropped (updates() passed m.text only). The transport now yields media messages with an mxc url/filename/ mimetype dict and grows download_media() — authenticated media endpoint first, legacy /_matrix/media/v3 fallback, size-capped. The gateway downloads images (10 MB cap), saves them under the LLM workspace (media/, pruned after 14 days), and prompts Claude to view the file with its Read tool — no API plumbing, the headless session sees the picture and the caption. Non-images get a notice; guest/command-only refusals match free text. Encrypted media stays out of scope (no-E2EE design). CI now also py_compiles transport_matrix.py (missed when the backend shipped in v2.2.0). Ticket: 20260709-215539 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MmwxWNp4ft7ziLHZGvXMZC