🎭 Role-play & Companion System (Major Refactor)
- Memory System Overhaul: Replaced the legacy memory logic with a tag-based CRUD management system (CharacterMemoryService).
- Unified Context Assembly: Introduced CharacterContextAssembler to streamline the construction of character prompts (integrating User Personas, Character Memories, World Info/Lorebook entries, Recent Timelines, Compressed Summaries, and Knowledge Cards).
- Independent Companion Agent: The Companion Agent is now decoupled from the standard Chat Agent, featuring its own independent model configuration and a dedicated CompanionAgentSkill.
- Rolling Summarization: Replaced the additive "checkpoint" compression with a new CharacterContextCompressor. It generates a single, story-driven rolling summary that automatically deduplicates structured memories.
- In-line Action Messages: The Companion Agent can now send narrative/action messages (e.g., leans in closer) via the SendActionMessage tool. These are rendered with centered italics in the UI to distinguish them from dialogue bubbles.
- Redesigned Chat UI: Implemented an immersive dark theme with frosted glass effects (BackdropFilter), customizable chat backgrounds, and a new PersonaChatInputBar component.
- SillyTavern Integration:
- Added TavernCharacterImportService supporting Tavern V2 character card imports from PNG (tEXt/iTXt chunks) and JSON files.
- New TavernImportScreen with preview, conflict detection, and Lorebook entry importing.
- Full support for Tavern Macros (e.g.,
{{user}},{{char}},{{time}},{{date}}).
- Character Model Extensions: Added support for
firstMessage,systemPromptOverride,postHistoryInstructions,mesExample, andchatBackgroundfields. - Enhanced Comment Agent: Now supports system prompt overrides, example messages, and Tavern Macro parsing;
existingCommentsContextis now passed as an independent parameter. - Data Integrity: Implemented a monotonically increasing counter for Character IDs to prevent ID reuse after deletion.
- Avatar Management: Migrated avatar storage to relative paths to fix broken links caused by iOS container UUID changes. Introduced the CharacterAvatar component to handle both image files and DiceBear seed-based avatars.
📸 Media Management
- MediaService: Centralized media file management with standardized naming conventions (
YYYYMMDD_uuid_WxH.ext). All media is now pooled inworkspace/_<userId>/_System/media/. - Unified Avatar Picker: AvatarPicker now serves character configs, user settings, and the personal center, supporting photo gallery selection.
- Persistent User Profiles: User avatars are now persisted in
profile.jsonand managed via MemexRouter, removing direct dependency on UserStorage.
🔔 Notification System (Action Center)
- Detail Notifications: Added UserNotifications Drift table (schema v12). CardDetailNotifier now diffs changes in comments/insights to trigger notifications.
- Enhanced Change Tracking: DataChangeRecord now utilizes before/after snapshots (binlog-style) instead of a single document snapshot.
- Foreground Auto-dismiss: Opening a card detail view now automatically dismisses corresponding notifications via foreground state registration.
🔍 Settings Search
- Global Settings Search: Registered 15 key settings with bilingual (EN/CN) keywords.
- Search Engine: Implemented SettingsSearchService using substring matching and relevance scoring.
- Quick Access: Added a "capsule" search entry at the top of the Personal Center for one-tap access to settings.
🤖 Agent System Optimizations
- Default Configuration: AgentConfig.copyWith now supports explicit null values via sentinel objects.
- Visibility: Added
configurableAgentIdsto AgentDefinitions, allowing all registered Agents to be automatically displayed in the settings page. - Time Context Standardization: Introduced
time_context.dart. All Agent prompts now useformatLocalDateTimeWithZone()(including offset and zone name) instead of standard ISO8601 strings. - Insight Fixes: Resolved interpolation issues in Insight language prompts.
⚙️ Model Configuration
- Duplication Support: Added
LLMConfig.duplicate()with automatic unique key generation (e.g.,_copy_2). - Global Defaults: Users can now set any model configuration as the global default.
- UI Alignment: Unified the deletion confirmation logic and removed redundant code between swipe-to-delete and menu-based deletion.
💅 UI/UX Improvements
- Flattened Input Bar: Removed nested menus for image uploads; Camera, Gallery, and Microphone buttons are now directly accessible.
- Processing States: Replaced the thinking emoji with frame-animated icons for Agent "processing" states.
- Layout Fixes: Aligned microphone button dimensions and fixed Return Key behavior in the home screen input box.
🗄️ Data Layer & Misc
- Real-time UI Refresh: Added
EventBusMessageType.personaChatMessageAddedto trigger immediate UI updates when an Agent sends action messages mid-execution. - System Events: Extended
CardCommentPostedPayloadwith acreatedAtTsfield. - Refactor: Decoupled search matching logic into a dedicated
query_matcher.dart. - Cleanup: Removed unused
gladosdevelopment dependencies. - FileSystem: Added
getMediaPath()andtoRelativePath()utility methods to FileSystemService.