Persist and serve projected message image attachments

- Store message attachments in `projection_thread_messages.attachments_json`
- Materialize base64 image attachments to `stateDir/attachments` during projection
- Serve `/attachments/*` from the server and resolve preview URLs from WebSocket origin
- Add migration and tests for projection materialization and attachment serving
992db16586Julius Marminge committed on 2/28/2026, 5:30:46 AM· committed by Julius Marmingeparent2aad749
10 files changedLine totals unavailable