diff --git a/app/MindWork AI Studio/Assistants/I18N/allTexts.lua b/app/MindWork AI Studio/Assistants/I18N/allTexts.lua
index fe74646a..c75bae13 100644
--- a/app/MindWork AI Studio/Assistants/I18N/allTexts.lua
+++ b/app/MindWork AI Studio/Assistants/I18N/allTexts.lua
@@ -1828,6 +1828,9 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T1907446663"]
-- Language behavior
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T2341504363"] = "Language behavior"
+-- Update installation method
+UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T237706157"] = "Update installation method"
+
-- Language
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T2591284123"] = "Language"
@@ -1858,6 +1861,9 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T602293588"]
-- Choose the color theme that best suits for you.
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T654667432"] = "Choose the color theme that best suits for you."
+-- Should updates be installed automatically or manually?
+UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T707880477"] = "Should updates be installed automatically or manually?"
+
-- Energy saving is enabled
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T71162186"] = "Energy saving is enabled"
@@ -4870,6 +4876,9 @@ UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2128088682
-- Navigation expands on mouse hover
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2195945406"] = "Navigation expands on mouse hover"
+-- Install updates manually
+UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T220653235"] = "Install updates manually"
+
-- Also show features ready for release; these should be stable
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2301448762"] = "Also show features ready for release; these should be stable"
@@ -4909,6 +4918,9 @@ UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T3137986690
-- Delete disappearing chats older than 180 days
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T3491430707"] = "Delete disappearing chats older than 180 days"
+-- Install updates automatically
+UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T3569059463"] = "Install updates automatically"
+
-- Disable workspaces
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T3612390107"] = "Disable workspaces"
@@ -5575,6 +5587,9 @@ UI_TEXT_CONTENT["AISTUDIO::TOOLS::SERVICES::RUSTSERVICE::SECRETS::T4007657575"]
-- No update found.
UI_TEXT_CONTENT["AISTUDIO::TOOLS::SERVICES::UPDATESERVICE::T1015418291"] = "No update found."
+-- Failed to install update automatically. Please try again manually.
+UI_TEXT_CONTENT["AISTUDIO::TOOLS::SERVICES::UPDATESERVICE::T3709709946"] = "Failed to install update automatically. Please try again manually."
+
-- The hostname is not a valid HTTP(S) URL.
UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T1013354736"] = "The hostname is not a valid HTTP(S) URL."
diff --git a/app/MindWork AI Studio/Components/Settings/SettingsPanelApp.razor b/app/MindWork AI Studio/Components/Settings/SettingsPanelApp.razor
index fc466e7a..14f187e9 100644
--- a/app/MindWork AI Studio/Components/Settings/SettingsPanelApp.razor
+++ b/app/MindWork AI Studio/Components/Settings/SettingsPanelApp.razor
@@ -13,7 +13,8 @@
-
+
+
diff --git a/app/MindWork AI Studio/Layout/MainLayout.razor.cs b/app/MindWork AI Studio/Layout/MainLayout.razor.cs
index cc115a2c..079b4161 100644
--- a/app/MindWork AI Studio/Layout/MainLayout.razor.cs
+++ b/app/MindWork AI Studio/Layout/MainLayout.razor.cs
@@ -92,7 +92,7 @@ public partial class MainLayout : LayoutComponentBase, IMessageBusReceiver, ILan
[
Event.UPDATE_AVAILABLE, Event.CONFIGURATION_CHANGED, Event.COLOR_THEME_CHANGED, Event.SHOW_ERROR,
Event.SHOW_ERROR, Event.SHOW_WARNING, Event.SHOW_SUCCESS, Event.STARTUP_PLUGIN_SYSTEM,
- Event.PLUGINS_RELOADED
+ Event.PLUGINS_RELOADED, Event.INSTALL_UPDATE,
]);
// Set the snackbar for the update service:
@@ -143,6 +143,11 @@ public partial class MainLayout : LayoutComponentBase, IMessageBusReceiver, ILan
{
switch (triggeredEvent)
{
+ case Event.INSTALL_UPDATE:
+ this.performingUpdate = true;
+ this.StateHasChanged();
+ break;
+
case Event.UPDATE_AVAILABLE:
if (data is UpdateResponse updateResponse)
{
diff --git a/app/MindWork AI Studio/Plugins/configuration/plugin.lua b/app/MindWork AI Studio/Plugins/configuration/plugin.lua
index 5513e016..7e24e999 100644
--- a/app/MindWork AI Studio/Plugins/configuration/plugin.lua
+++ b/app/MindWork AI Studio/Plugins/configuration/plugin.lua
@@ -62,9 +62,13 @@ CONFIG["LLM_PROVIDERS"][#CONFIG["LLM_PROVIDERS"]+1] = {
CONFIG["SETTINGS"] = {}
--- Configure the update behavior:
+-- Configure the update check interval:
-- Allowed values are: NO_CHECK, ONCE_STARTUP, HOURLY, DAILY, WEEKLY
--- CONFIG["SETTINGS"]["DataApp.UpdateBehavior"] = "NO_CHECK"
+-- CONFIG["SETTINGS"]["DataApp.UpdateInterval"] = "NO_CHECK"
+
+-- Configure how updates are installed:
+-- Allowed values are: MANUAL, AUTOMATIC
+-- CONFIG["SETTINGS"]["DataApp.UpdateInstallation"] = "MANUAL"
-- Configure the user permission to add providers:
-- Allowed values are: true, false
diff --git a/app/MindWork AI Studio/Plugins/languages/de-de-43065dbc-78d0-45b7-92be-f14c2926e2dc/plugin.lua b/app/MindWork AI Studio/Plugins/languages/de-de-43065dbc-78d0-45b7-92be-f14c2926e2dc/plugin.lua
index ec8fe2c2..c1777807 100644
--- a/app/MindWork AI Studio/Plugins/languages/de-de-43065dbc-78d0-45b7-92be-f14c2926e2dc/plugin.lua
+++ b/app/MindWork AI Studio/Plugins/languages/de-de-43065dbc-78d0-45b7-92be-f14c2926e2dc/plugin.lua
@@ -1830,6 +1830,9 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T1907446663"]
-- Language behavior
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T2341504363"] = "Sprachverhalten"
+-- Update installation method
+UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T237706157"] = "Installationsmethode für Updates"
+
-- Language
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T2591284123"] = "Sprache"
@@ -1860,6 +1863,9 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T602293588"]
-- Choose the color theme that best suits for you.
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T654667432"] = "Wählen Sie das Farbschema, das am besten zu Ihnen passt."
+-- Should updates be installed automatically or manually?
+UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T707880477"] = "Sollen Updates automatisch oder manuell installiert werden?"
+
-- Energy saving is enabled
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T71162186"] = "Energiesparmodus ist aktiviert"
@@ -4872,6 +4878,9 @@ UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2128088682
-- Navigation expands on mouse hover
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2195945406"] = "Navigationsleiste erweitert sich, wenn sich die Maus darüber befindet"
+-- Install updates manually
+UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T220653235"] = "Updates manuell installieren"
+
-- Also show features ready for release; these should be stable
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2301448762"] = "Auch Funktionen anzeigen, die bereit für die Veröffentlichung sind; diese sollten stabil sein."
@@ -4911,6 +4920,9 @@ UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T3137986690
-- Disappearing chats: delete chats older than 180 days
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T3491430707"] = "Selbstlöschende Chats: lösche Chats die älter als 180 Tage sind"
+-- Install updates automatically
+UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T3569059463"] = "Updates automatisch installieren"
+
-- Disable workspaces
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T3612390107"] = "Arbeitsbereiche deaktivieren"
@@ -5577,6 +5589,9 @@ UI_TEXT_CONTENT["AISTUDIO::TOOLS::SERVICES::RUSTSERVICE::SECRETS::T4007657575"]
-- No update found.
UI_TEXT_CONTENT["AISTUDIO::TOOLS::SERVICES::UPDATESERVICE::T1015418291"] = "Kein Update gefunden."
+-- Failed to install update automatically. Please try again manually.
+UI_TEXT_CONTENT["AISTUDIO::TOOLS::SERVICES::UPDATESERVICE::T3709709946"] = "Fehler bei der automatischen Installation des Updates. Bitte versuchen Sie es manuell erneut."
+
-- The hostname is not a valid HTTP(S) URL.
UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T1013354736"] = "Der Hostname ist keine gültige HTTP(S)-URL."
diff --git a/app/MindWork AI Studio/Plugins/languages/en-us-97dfb1ba-50c4-4440-8dfa-6575daf543c8/plugin.lua b/app/MindWork AI Studio/Plugins/languages/en-us-97dfb1ba-50c4-4440-8dfa-6575daf543c8/plugin.lua
index fa754177..d7104563 100644
--- a/app/MindWork AI Studio/Plugins/languages/en-us-97dfb1ba-50c4-4440-8dfa-6575daf543c8/plugin.lua
+++ b/app/MindWork AI Studio/Plugins/languages/en-us-97dfb1ba-50c4-4440-8dfa-6575daf543c8/plugin.lua
@@ -1830,6 +1830,9 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T1907446663"]
-- Language behavior
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T2341504363"] = "Language behavior"
+-- Update installation method
+UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T237706157"] = "Update installation method"
+
-- Language
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T2591284123"] = "Language"
@@ -1860,6 +1863,9 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T602293588"]
-- Choose the color theme that best suits for you.
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T654667432"] = "Choose the color theme that best suits for you."
+-- Should updates be installed automatically or manually?
+UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T707880477"] = "Should updates be installed automatically or manually?"
+
-- Energy saving is enabled
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T71162186"] = "Energy saving is enabled"
@@ -4872,6 +4878,9 @@ UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2128088682
-- Navigation expands on mouse hover
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2195945406"] = "Navigation expands on mouse hover"
+-- Install updates manually
+UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T220653235"] = "Install updates manually"
+
-- Also show features ready for release; these should be stable
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2301448762"] = "Also show features ready for release; these should be stable"
@@ -4911,6 +4920,9 @@ UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T3137986690
-- Disappearing chats: delete chats older than 180 days
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T3491430707"] = "Disappearing chats: delete chats older than 180 days"
+-- Install updates automatically
+UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T3569059463"] = "Install updates automatically"
+
-- Disable workspaces
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T3612390107"] = "Disable workspaces"
@@ -5577,6 +5589,9 @@ UI_TEXT_CONTENT["AISTUDIO::TOOLS::SERVICES::RUSTSERVICE::SECRETS::T4007657575"]
-- No update found.
UI_TEXT_CONTENT["AISTUDIO::TOOLS::SERVICES::UPDATESERVICE::T1015418291"] = "No update found."
+-- Failed to install update automatically. Please try again manually.
+UI_TEXT_CONTENT["AISTUDIO::TOOLS::SERVICES::UPDATESERVICE::T3709709946"] = "Failed to install update automatically. Please try again manually."
+
-- The hostname is not a valid HTTP(S) URL.
UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T1013354736"] = "The hostname is not a valid HTTP(S) URL."
diff --git a/app/MindWork AI Studio/Settings/ConfigurationSelectDataFactory.cs b/app/MindWork AI Studio/Settings/ConfigurationSelectDataFactory.cs
index d14868fc..5004dc43 100644
--- a/app/MindWork AI Studio/Settings/ConfigurationSelectDataFactory.cs
+++ b/app/MindWork AI Studio/Settings/ConfigurationSelectDataFactory.cs
@@ -63,13 +63,19 @@ public static class ConfigurationSelectDataFactory
yield return new(TB("Enter is sending the input"), SendBehavior.ENTER_IS_SENDING);
}
- public static IEnumerable> GetUpdateBehaviorData()
+ public static IEnumerable> GetUpdateIntervalData()
{
- yield return new(TB("No automatic update checks"), UpdateBehavior.NO_CHECK);
- yield return new(TB("Once at startup"), UpdateBehavior.ONCE_STARTUP);
- yield return new(TB("Check every hour"), UpdateBehavior.HOURLY);
- yield return new(TB("Check every day"), UpdateBehavior.DAILY);
- yield return new (TB("Check every week"), UpdateBehavior.WEEKLY);
+ yield return new(TB("No automatic update checks"), UpdateInterval.NO_CHECK);
+ yield return new(TB("Once at startup"), UpdateInterval.ONCE_STARTUP);
+ yield return new(TB("Check every hour"), UpdateInterval.HOURLY);
+ yield return new(TB("Check every day"), UpdateInterval.DAILY);
+ yield return new (TB("Check every week"), UpdateInterval.WEEKLY);
+ }
+
+ public static IEnumerable> GetUpdateBehaviourData()
+ {
+ yield return new(TB("Install updates manually"), UpdateInstallation.MANUAL);
+ yield return new(TB("Install updates automatically"), UpdateInstallation.AUTOMATIC);
}
public static IEnumerable> GetWorkspaceStorageBehaviorData()
diff --git a/app/MindWork AI Studio/Settings/DataModel/DataApp.cs b/app/MindWork AI Studio/Settings/DataModel/DataApp.cs
index 477afa30..67be8b9b 100644
--- a/app/MindWork AI Studio/Settings/DataModel/DataApp.cs
+++ b/app/MindWork AI Studio/Settings/DataModel/DataApp.cs
@@ -40,7 +40,12 @@ public sealed class DataApp(Expression>? configSelection = n
///
/// If and when we should look for updates.
///
- public UpdateBehavior UpdateBehavior { get; set; } = ManagedConfiguration.Register(configSelection, n => n.UpdateBehavior, UpdateBehavior.HOURLY);
+ public UpdateInterval UpdateInterval { get; set; } = ManagedConfiguration.Register(configSelection, n => n.UpdateInterval, UpdateInterval.HOURLY);
+
+ ///
+ /// How updates should be installed.
+ ///
+ public UpdateInstallation UpdateInstallation { get; set; } = ManagedConfiguration.Register(configSelection, n => n.UpdateInstallation, UpdateInstallation.MANUAL);
///
/// The navigation behavior.
diff --git a/app/MindWork AI Studio/Settings/DataModel/PreviousModels/DataV1V3.cs b/app/MindWork AI Studio/Settings/DataModel/PreviousModels/DataV1V3.cs
index 0b1c7883..88a8a3d2 100644
--- a/app/MindWork AI Studio/Settings/DataModel/PreviousModels/DataV1V3.cs
+++ b/app/MindWork AI Studio/Settings/DataModel/PreviousModels/DataV1V3.cs
@@ -41,7 +41,7 @@ public sealed class DataV1V3
///
/// If and when we should look for updates.
///
- public UpdateBehavior UpdateBehavior { get; set; } = UpdateBehavior.ONCE_STARTUP;
+ public UpdateInterval UpdateInterval { get; set; } = UpdateInterval.ONCE_STARTUP;
///
/// The navigation behavior.
diff --git a/app/MindWork AI Studio/Settings/DataModel/UpdateInstallation.cs b/app/MindWork AI Studio/Settings/DataModel/UpdateInstallation.cs
new file mode 100644
index 00000000..50d2a296
--- /dev/null
+++ b/app/MindWork AI Studio/Settings/DataModel/UpdateInstallation.cs
@@ -0,0 +1,7 @@
+namespace AIStudio.Settings.DataModel;
+
+public enum UpdateInstallation
+{
+ MANUAL,
+ AUTOMATIC,
+}
diff --git a/app/MindWork AI Studio/Settings/DataModel/UpdateBehavior.cs b/app/MindWork AI Studio/Settings/DataModel/UpdateInterval.cs
similarity index 79%
rename from app/MindWork AI Studio/Settings/DataModel/UpdateBehavior.cs
rename to app/MindWork AI Studio/Settings/DataModel/UpdateInterval.cs
index 0b82604f..a7a3ec8c 100644
--- a/app/MindWork AI Studio/Settings/DataModel/UpdateBehavior.cs
+++ b/app/MindWork AI Studio/Settings/DataModel/UpdateInterval.cs
@@ -1,6 +1,6 @@
namespace AIStudio.Settings.DataModel;
-public enum UpdateBehavior
+public enum UpdateInterval
{
NO_CHECK,
ONCE_STARTUP,
diff --git a/app/MindWork AI Studio/Settings/SettingsMigrations.cs b/app/MindWork AI Studio/Settings/SettingsMigrations.cs
index 7c5a4293..e5041817 100644
--- a/app/MindWork AI Studio/Settings/SettingsMigrations.cs
+++ b/app/MindWork AI Studio/Settings/SettingsMigrations.cs
@@ -90,7 +90,7 @@ public static class SettingsMigrations
IsSavingEnergy = previousData.IsSavingEnergy,
NextProviderNum = previousData.NextProviderNum,
ShortcutSendBehavior = previousData.ShortcutSendBehavior,
- UpdateBehavior = previousData.UpdateBehavior,
+ UpdateInterval = previousData.UpdateInterval,
};
}
@@ -117,7 +117,7 @@ public static class SettingsMigrations
IsSavingEnergy = previousData.IsSavingEnergy,
NextProviderNum = previousData.NextProviderNum,
ShortcutSendBehavior = previousData.ShortcutSendBehavior,
- UpdateBehavior = previousData.UpdateBehavior,
+ UpdateInterval = previousData.UpdateInterval,
WorkspaceStorageBehavior = previousData.WorkspaceStorageBehavior,
WorkspaceStorageTemporaryMaintenancePolicy = previousData.WorkspaceStorageTemporaryMaintenancePolicy,
};
@@ -141,7 +141,7 @@ public static class SettingsMigrations
{
EnableSpellchecking = previousConfig.EnableSpellchecking,
IsSavingEnergy = previousConfig.IsSavingEnergy,
- UpdateBehavior = previousConfig.UpdateBehavior,
+ UpdateInterval = previousConfig.UpdateInterval,
NavigationBehavior = previousConfig.NavigationBehavior,
},
diff --git a/app/MindWork AI Studio/Tools/Event.cs b/app/MindWork AI Studio/Tools/Event.cs
index fc8ca8e3..fcf32604 100644
--- a/app/MindWork AI Studio/Tools/Event.cs
+++ b/app/MindWork AI Studio/Tools/Event.cs
@@ -18,6 +18,7 @@ public enum Event
// Update events:
USER_SEARCH_FOR_UPDATE,
UPDATE_AVAILABLE,
+ INSTALL_UPDATE,
// Chat events:
HAS_CHAT_UNSAVED_CHANGES,
diff --git a/app/MindWork AI Studio/Tools/PluginSystem/PluginConfiguration.cs b/app/MindWork AI Studio/Tools/PluginSystem/PluginConfiguration.cs
index 5e5efd3e..28daf3d1 100644
--- a/app/MindWork AI Studio/Tools/PluginSystem/PluginConfiguration.cs
+++ b/app/MindWork AI Studio/Tools/PluginSystem/PluginConfiguration.cs
@@ -53,7 +53,10 @@ public sealed class PluginConfiguration(bool isInternal, LuaState state, PluginT
}
// Config: check for updates, and if so, how often?
- ManagedConfiguration.TryProcessConfiguration(x => x.App, x => x.UpdateBehavior, this.Id, settingsTable, dryRun);
+ ManagedConfiguration.TryProcessConfiguration(x => x.App, x => x.UpdateInterval, this.Id, settingsTable, dryRun);
+
+ // Config: how should updates be installed?
+ ManagedConfiguration.TryProcessConfiguration(x => x.App, x => x.UpdateInstallation, this.Id, settingsTable, dryRun);
// Config: allow the user to add providers?
ManagedConfiguration.TryProcessConfiguration(x => x.App, x => x.AllowUserToAddProvider, this.Id, settingsTable, dryRun);
diff --git a/app/MindWork AI Studio/Tools/PluginSystem/PluginFactory.Loading.cs b/app/MindWork AI Studio/Tools/PluginSystem/PluginFactory.Loading.cs
index 2553b537..92f77344 100644
--- a/app/MindWork AI Studio/Tools/PluginSystem/PluginFactory.Loading.cs
+++ b/app/MindWork AI Studio/Tools/PluginSystem/PluginFactory.Loading.cs
@@ -139,7 +139,11 @@ public static partial class PluginFactory
wasConfigurationChanged = true;
// Check for update behavior:
- if(ManagedConfiguration.IsConfigurationLeftOver(x => x.App, x => x.UpdateBehavior, AVAILABLE_PLUGINS))
+ if(ManagedConfiguration.IsConfigurationLeftOver(x => x.App, x => x.UpdateInterval, AVAILABLE_PLUGINS))
+ wasConfigurationChanged = true;
+
+ // Check for update installation behavior:
+ if(ManagedConfiguration.IsConfigurationLeftOver(x => x.App, x => x.UpdateInstallation, AVAILABLE_PLUGINS))
wasConfigurationChanged = true;
// Check for users allowed to added providers:
diff --git a/app/MindWork AI Studio/Tools/Services/UpdateService.cs b/app/MindWork AI Studio/Tools/Services/UpdateService.cs
index 7cda6443..75335521 100644
--- a/app/MindWork AI Studio/Tools/Services/UpdateService.cs
+++ b/app/MindWork AI Studio/Tools/Services/UpdateService.cs
@@ -42,14 +42,14 @@ public sealed class UpdateService : BackgroundService, IMessageBusReceiver
//
// Set the update interval based on the user's settings.
//
- this.updateInterval = this.settingsManager.ConfigurationData.App.UpdateBehavior switch
+ this.updateInterval = this.settingsManager.ConfigurationData.App.UpdateInterval switch
{
- UpdateBehavior.NO_CHECK => Timeout.InfiniteTimeSpan,
- UpdateBehavior.ONCE_STARTUP => Timeout.InfiniteTimeSpan,
+ UpdateInterval.NO_CHECK => Timeout.InfiniteTimeSpan,
+ UpdateInterval.ONCE_STARTUP => Timeout.InfiniteTimeSpan,
- UpdateBehavior.HOURLY => TimeSpan.FromHours(1),
- UpdateBehavior.DAILY => TimeSpan.FromDays(1),
- UpdateBehavior.WEEKLY => TimeSpan.FromDays(7),
+ UpdateInterval.HOURLY => TimeSpan.FromHours(1),
+ UpdateInterval.DAILY => TimeSpan.FromDays(1),
+ UpdateInterval.WEEKLY => TimeSpan.FromDays(7),
_ => TimeSpan.FromHours(1)
};
@@ -58,7 +58,7 @@ public sealed class UpdateService : BackgroundService, IMessageBusReceiver
// When the user doesn't want to check for updates, we can
// return early.
//
- if(this.settingsManager.ConfigurationData.App.UpdateBehavior is UpdateBehavior.NO_CHECK)
+ if(this.settingsManager.ConfigurationData.App.UpdateInterval is UpdateInterval.NO_CHECK)
return;
//
@@ -115,7 +115,25 @@ public sealed class UpdateService : BackgroundService, IMessageBusReceiver
var response = await this.rust.CheckForUpdate();
if (response.UpdateIsAvailable)
{
- await this.messageBus.SendMessage(null, Event.UPDATE_AVAILABLE, response);
+ if (this.settingsManager.ConfigurationData.App.UpdateInstallation is UpdateInstallation.AUTOMATIC)
+ {
+ try
+ {
+ await this.messageBus.SendMessage(null, Event.INSTALL_UPDATE);
+ await this.rust.InstallUpdate();
+ }
+ catch (Exception)
+ {
+ SNACKBAR!.Add(TB("Failed to install update automatically. Please try again manually."), Severity.Error, config =>
+ {
+ config.Icon = Icons.Material.Filled.Error;
+ config.IconSize = Size.Large;
+ config.IconColor = Color.Error;
+ });
+ }
+ }
+ else
+ await this.messageBus.SendMessage(null, Event.UPDATE_AVAILABLE, response);
}
else
{
diff --git a/app/MindWork AI Studio/wwwroot/changelog/v0.9.51.md b/app/MindWork AI Studio/wwwroot/changelog/v0.9.51.md
index 77ab7d97..2b70b396 100644
--- a/app/MindWork AI Studio/wwwroot/changelog/v0.9.51.md
+++ b/app/MindWork AI Studio/wwwroot/changelog/v0.9.51.md
@@ -1,5 +1,8 @@
# v0.9.51, build 226 (2025-08-xx xx:xx UTC)
- Added support for predefined chat templates in configuration plugins to help enterprises roll out consistent templates across the organization.
+- Added the ability to choose between automatic and manual update installation to the app settings (default is manual).
+- Added the ability to control the update installation behavior by configuration plugins.
- Improved memory usage in several areas of the app.
- Improved plugin management for configuration plugins so that hot reload detects when a provider or chat template has been removed.
+- Changed the configuration plugin setting name for how often to check for updates from `UpdateBehavior` to `UpdateInterval`.
- Fixed a bug in various assistants where some text fields were not reset when resetting.