How yetote/aifriend works
AIFriend is an Android app for creating and managing AI companions, chatting with them individually or in multi-agent rooms, and persisting those conversations locally. The user journey starts at the home screen, branches into companion setup or room setup, then routes chat requests through feature view models to provider implementations and storage. The README also documents model discovery, context budgeting, avatar handling, room discussion controls, and export/search capabilities. Several feature implementations were not excerpted, so their internal links are omitted where the evidence does not establish them.
Main entry points: HomeRoute.kt Home Routing · HomeViewModel.kt Home State · AgentViewModel.kt Agent Chat · RoomViewModel.kt Room Chat
Components 25
App and UI
- App Activity
app/src/main/java/com/yetote/aifriend/MainActivity.kt - Home Routing
feature/home/src/main/java/com/feature/home/route/HomeRoute.kt - Home Screen
ui/home/src/main/java/com/ui/home/UIFriendPage.kt - Agent UI
ui/agent - Room UI
ui/room - Avatar Components
ui/common/src/main/java/com/ui/common/UIAvatar.kt
User Workflows
- Home State
feature/home/src/main/java/com/feature/home/vm/HomeViewModel.kt - Agent Chat
feature/agent/src/main/java/com/feature/agent/vm/AgentViewModel.kt - Room Chat
feature/room/src/main/java/com/feature/room/vm/RoomViewModel.kt - Context Budget
feature/agent/src/main/java/com/feature/agent/data/ContextBudget.kt - Friend Model
feature/agent/src/main/java/com/feature/agent/model/Friend.kt - Room Model
feature/room/src/main/java/com/feature/room/model/Room.kt
AI Providers
- AI Factory
core/ai/src/main/java/com/core/ai/factory/AIFactory.kt - Provider Clients
core/ai/src/main/java/com/core/ai/entity - AI Contract
core/ai/src/main/java/com/core/ai/entity/IAI.kt - Chat Messages
core/ai/src/main/java/com/core/ai/model/ChatMessage.kt
Local Persistence
- Friend Storage
core/repository/src/main/java/com/core/repository/storage/FriendRepository.kt - Room Storage
core/repository/src/main/java/com/core/repository/storage/RoomRepository.kt - Profile Storage
core/repository/src/main/java/com/core/repository/storage/ProfileRepository.kt - Avatar Files
core/repository/src/main/java/com/core/repository/storage/AvatarStore.kt - Legacy Import
core/repository/src/main/java/com/core/repository/storage/LegacyMigration.kt - Room Database
core/repository/src/main/java/com/core/repository/storage/db/AppDatabase.kt
Networking and Shared
- Web Repository
core/repository/src/main/java/com/core/repository/WebRepository.kt - Ktor Client
core/network/src/main/java/com/core/network/KtorClient.kt
Other components
- User
Connections 31
- User → App Activity: opens
- App Activity → Home Routing: mounts
app/src/main/java/com/yetote/aifriend/MainActivity.kt - Home Routing → Home Screen: renders
feature/home/src/main/java/com/feature/home/route/HomeRoute.kt - Home Routing → Home State: observes
feature/home/src/main/java/com/feature/home/route/HomeRoute.kt - Home Routing → Agent Chat: routes agent
feature/home/src/main/java/com/feature/home/route/HomeRoute.kt - Home Routing → Room Chat: routes room
feature/home/src/main/java/com/feature/home/route/HomeRoute.kt - Home State → Home Screen: supplies state
feature/home/src/main/java/com/feature/home/route/HomeRoute.kt - Home Routing → Avatar Components: opens crop UI
feature/home/src/main/java/com/feature/home/route/HomeRoute.kt - Room Chat → Room UI: renders through route
feature/room/src/main/java/com/feature/room/route/RoomRoute.kt - Agent Chat → Agent UI: serves feature UI
- Agent Chat → Friend Storage: loads and saves
feature/agent/src/main/java/com/feature/agent/vm/AgentViewModel.kt - Home State → Friend Storage: loads and deletes
feature/home/src/main/java/com/feature/home/vm/HomeViewModel.kt - Home State → Room Storage: loads and updates
feature/home/src/main/java/com/feature/home/vm/HomeViewModel.kt - Room Chat → Room Storage: reads and writes
feature/room/src/main/java/com/feature/room/vm/RoomViewModel.kt - Home State → Profile Storage: stores profile
feature/home/src/main/java/com/feature/home/vm/HomeViewModel.kt - Home State → Avatar Files: stores avatars
feature/home/src/main/java/com/feature/home/vm/HomeViewModel.kt - Agent Chat → AI Factory: creates client
feature/agent/src/main/java/com/feature/agent/vm/AgentViewModel.kt - Room Chat → AI Factory: creates client
feature/room/src/main/java/com/feature/room/vm/RoomViewModel.kt - AI Factory → Provider Clients: selects provider
core/ai/src/main/java/com/core/ai/factory/AIFactory.kt - Provider Clients → AI Contract: implements
- Agent Chat → Context Budget: trims history
- Room Chat → Context Budget: budgets context
- Agent Chat → Chat Messages: builds messages
feature/agent/src/main/java/com/feature/agent/vm/AgentViewModel.kt - Room Chat → Chat Messages: builds messages
feature/room/src/main/java/com/feature/room/vm/RoomViewModel.kt - Friend Storage → Room Database: uses DAOs
core/repository/src/main/java/com/core/repository/storage/FriendRepository.kt - Room Storage → Room Database: uses DAOs
core/repository/src/main/java/com/core/repository/storage/RoomRepository.kt - Profile Storage → Room Database: uses DAO
core/repository/src/main/java/com/core/repository/storage/ProfileRepository.kt - Legacy Import → Room Database: imports legacy data
core/repository/src/main/java/com/core/repository/storage/LegacyMigration.kt - Web Repository → Ktor Client: uses HTTP client
core/repository/src/main/java/com/core/repository/WebRepository.kt - Provider Clients → Web Repository: calls model APIs
- Avatar Components → Avatar Files: avatar workflow