diff --git a/mobile/lib/features/channels/me/me_chat_assistant.dart b/mobile/lib/features/channels/me/me_chat_assistant.dart index 99ac3906e7..e34111a84f 100644 --- a/mobile/lib/features/channels/me/me_chat_assistant.dart +++ b/mobile/lib/features/channels/me/me_chat_assistant.dart @@ -89,16 +89,17 @@ useMeChatAssistant( ? ref.watch(userCacheProvider)[selected] ?? ref.read(userCacheProvider.notifier).get(selected) : null; + // The owner's inventory name outranks the agent's self-published profile. final name = - profile?.displayName ?? agents .where((agent) => agent.pubkey == selected) .firstOrNull - ?.displayName; + ?.displayName ?? + profile?.displayName; String agentName(String pubkey) { final names = [ - ref.read(userCacheProvider)[pubkey]?.displayName, agents.where((a) => a.pubkey == pubkey).firstOrNull?.displayName, + ref.read(userCacheProvider)[pubkey]?.displayName, ]; return names .whereType() diff --git a/mobile/test/features/channels/me/me_chat_assistant_test.dart b/mobile/test/features/channels/me/me_chat_assistant_test.dart index d279fd757a..495602b75c 100644 --- a/mobile/test/features/channels/me/me_chat_assistant_test.dart +++ b/mobile/test/features/channels/me/me_chat_assistant_test.dart @@ -22,8 +22,9 @@ import 'package:shared_preferences/shared_preferences.dart'; class _Profiles extends UserCacheNotifier { @override Map build() => { - 'a': const UserProfile(pubkey: 'a', displayName: 'Alpha'), - 'b': const UserProfile(pubkey: 'b', displayName: 'Beta'), + // Self-published names differ so tests prove the owner's name wins. + 'a': const UserProfile(pubkey: 'a', displayName: 'Confusable Alpha'), + 'b': const UserProfile(pubkey: 'b', displayName: 'Confusable Beta'), }; } diff --git a/mobile/test/features/channels/me/me_page_test.dart b/mobile/test/features/channels/me/me_page_test.dart index 64911f1187..c50a9a613a 100644 --- a/mobile/test/features/channels/me/me_page_test.dart +++ b/mobile/test/features/channels/me/me_page_test.dart @@ -6,6 +6,9 @@ import 'package:flutter/services.dart'; import 'package:nostr/nostr.dart' as nostr; import 'package:buzz/shared/relay/relay.dart'; import 'package:buzz/shared/me/me_assistants.dart'; +import 'package:buzz/shared/mentions/agent_identity_provider.dart'; +import 'package:buzz/shared/profile/user_cache_provider.dart'; +import 'package:buzz/shared/profile/user_profile.dart'; import 'package:buzz/shared/theme/buzz_icons.dart'; import 'package:buzz/shared/widgets/frosted_app_bar.dart'; import 'package:flutter/material.dart'; @@ -328,8 +331,11 @@ void main() { channelsProvider.overrideWith(FakeChannels.new), meAssistantsProvider.overrideWith((ref) async { directoryLoads++; - return []; + return const [ + AgentDirectoryEntry(pubkey: 'agent', displayName: 'Owner Name'), + ]; }), + userCacheProvider.overrideWith(_ConfusableProfiles.new), ], child: MaterialApp(theme: AppTheme.light(), home: const MePage()), ), @@ -347,7 +353,14 @@ void main() { final args = calls.single.arguments as Map; expect(args['title'], 'New chat'); expect(args['placeholder'], 'Chat name'); - expect(args['assistants'], isEmpty); + expect(args['assistants'], [ + { + 'id': 'agent', + 'name': 'Owner Name', + 'artworkScale': '1', + 'avatarUrl': '', + }, + ]); expect(args['projects'], [ {'id': 'mobile', 'name': 'Mobile app'}, ]); @@ -471,3 +484,10 @@ void main() { expect(find.text('A place to work with your agents'), findsNothing); }); } + +class _ConfusableProfiles extends UserCacheNotifier { + @override + Map build() => { + 'agent': const UserProfile(pubkey: 'agent', displayName: 'Confusable Name'), + }; +}