79b06d35b9
- Add ExternalIdentitiesEvent (kind 10011) to quartz/nip39ExtIdentities with createNew/updateFromPast factory methods and identityClaims() - Generalize TagArrayBuilderExt to work with any Event type (not just MetadataEvent) so claims/twitterClaim etc. work with both kinds - Extract replaceClaims logic to List<IdentityClaimTag>.replaceClaims() shared extension used by both MetadataEvent and ExternalIdentitiesEvent - Register ExternalIdentitiesEvent in EventFactory (kind 10011) - Add consume(ExternalIdentitiesEvent) to LocalCache and dispatch in justConsumeInnerInner - Add ExternalIdentitiesEvent.KIND to UserMetadataForKeyKinds relay filter so kind 10011 is fetched alongside kind 0 when loading user profiles - Add UserExternalIdentitiesViewModel that observes the kind 10011 AddressableNote for a user and exposes List<IdentityClaimTag> as a Flow - Thread UserExternalIdentitiesViewModel through ProfileScreen → RenderScreen → ProfileHeader → DrawAdditionalInfo - DrawAdditionalInfo now shows kind 10011 identities, falling back to kind 0 for backwards compatibility - UserMetadataState: add sendNewUserIdentities() for kind 10011 and remove identity claim params from sendNewUserMetadata() (kind 0) - NewUserMetadataViewModel: load identities from kind 10011 first (fallback to kind 0), save identities to kind 10011 separately https://claude.ai/code/session_017iU6ZdRu5qRXPCeDztVeeV