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
6845143b9eJulius Marminge committed on 2/28/2026, 4:18:35 AMparentaa267eb
10 files changedLine totals unavailable