diff --git a/lib/core/models/model.dart b/lib/core/models/model.dart index 74f79e9..cb82015 100644 --- a/lib/core/models/model.dart +++ b/lib/core/models/model.dart @@ -139,6 +139,14 @@ sealed class Model with _$Model { } } + // Fallback to top-level toolIds (for cached models serialized via toJson) + if (toolIds == null || toolIds.isEmpty) { + final topLevelToolIds = json['toolIds']; + if (topLevelToolIds is List) { + toolIds = topLevelToolIds.map((e) => e.toString()).toList(); + } + } + final idRaw = json['id']; final id = idRaw?.toString(); if (id == null || id.isEmpty) { diff --git a/lib/core/providers/app_providers.dart b/lib/core/providers/app_providers.dart index 0fdddc1..13bddef 100644 --- a/lib/core/providers/app_providers.dart +++ b/lib/core/providers/app_providers.dart @@ -812,6 +812,9 @@ final _settingsWatcherProvider = Provider((ref) { // Auto-apply model-specific tools when model changes or tools load final modelToolsAutoSelectionProvider = Provider((ref) { + // Prevent disposal so listeners remain active throughout app lifecycle + ref.keepAlive(); + Future applyTools(Model? model) async { if (model == null) { final current = ref.read(selectedToolIdsProvider); @@ -894,6 +897,9 @@ final modelToolsAutoSelectionProvider = Provider((ref) { // Auto-apply default model from settings when it changes (and not manually overridden) // keepAlive to maintain listener throughout app lifecycle final defaultModelAutoSelectionProvider = Provider((ref) { + // Prevent disposal so listeners remain active throughout app lifecycle + ref.keepAlive(); + // Initialize the model tools auto-selection ref.watch(modelToolsAutoSelectionProvider); diff --git a/lib/core/providers/app_startup_providers.dart b/lib/core/providers/app_startup_providers.dart index 817b747..8086b84 100644 --- a/lib/core/providers/app_startup_providers.dart +++ b/lib/core/providers/app_startup_providers.dart @@ -173,6 +173,9 @@ class AppStartupFlow extends _$AppStartupFlow { keepAlive(appIntentCoordinatorProvider); keepAlive(quickActionsCoordinatorProvider); + // Ensure model tools auto-selection is active throughout app lifecycle + keepAlive(defaultModelAutoSelectionProvider); + // Kick background model loading flow (non-blocking) Future.delayed(const Duration(milliseconds: 120), () { if (!ref.mounted) return;