- Agent disconnects custom room when all real participants leave
(prevents zombie participants blocking auto-dispatch)
- Bot sends m.call.member state event on call detection
(Element Call shows bot as joined)
- Use RoomInputOptions(participant_identity=...) to target real user
audio input (framework agent-AJ_xxx participant was confusing RoomIO)
- Removed incorrect bot dispatch (Matrix room ID != LiveKit room name)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Save user_id/device_id/access_token to crypto store on first login
- restore_login() on subsequent starts (no new device each restart)
- Enables proper Olm session persistence across restarts
CF-1147
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Bot now trusts all room member devices on each sync, enabling
Megolm key exchange. Logs undecryptable events for debugging.
CF-1147
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- matrix-nio[e2e] with libolm for Megolm encryption
- Persistent crypto store volume for key persistence
- Auto-accept key verification (SAS)
- Upload device keys on first login
CF-1147
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>