8b56b3b3bf
Wire Marmot MLS group messaging into the app's Account lifecycle, event processing pipeline, and relay subscription system. New files: - AndroidMlsGroupStateStore: encrypted file-based MLS state storage using KeyStoreEncryption (AES/GCM backed by Android KeyStore) - MarmotManager: central coordinator holding all Marmot components (MlsGroupManager, KeyPackageRotationManager, subscription/inbound/ outbound processors, WelcomeSender) - MarmotGroupEventsEoseManager: relay subscription manager for kind:445 GroupEvent filters via AccountFilterAssembler Account integration: - MarmotManager initialized during Account startup with restoreAll() - Outbound methods: sendMarmotGroupMessage, addMarmotGroupMember, publishMarmotKeyPackage(s), createMarmotGroup - GroupEvent (kind:445) and KeyPackageEvent (kind:30443) added to LocalCache.justConsumeInnerInner() dispatch Event routing: - GroupEventHandler: processes inbound kind:445 events through MarmotInboundProcessor, indexes decrypted inner events in LocalCache - GiftWrapEventHandler extended: detects kind:444 WelcomeEvent after NIP-59 unwrap, routes to MarmotManager.processWelcome(), triggers KeyPackage rotation when needed - WelcomeEvent enhanced with optional "h" tag for group ID routing https://claude.ai/code/session_01W2LHazEt4E3W4hn8f7gWVW