diff --git a/tools/server/public/index.html.gz b/tools/server/public/index.html.gz index 11d31b0f65..c4410bf248 100644 Binary files a/tools/server/public/index.html.gz and b/tools/server/public/index.html.gz differ diff --git a/tools/server/webui/src/lib/services/parameter-sync.service.ts b/tools/server/webui/src/lib/services/parameter-sync.service.ts index 1acb5ce453..9a290129eb 100644 --- a/tools/server/webui/src/lib/services/parameter-sync.service.ts +++ b/tools/server/webui/src/lib/services/parameter-sync.service.ts @@ -159,6 +159,74 @@ export const SYNCABLE_PARAMETERS: SyncableParameter[] = [ serverKey: 'fullHeightCodeBlocks', type: SyncableParameterType.BOOLEAN, canSync: true + }, + { + key: 'systemMessage', + serverKey: 'systemMessage', + type: SyncableParameterType.STRING, + canSync: true + }, + { + key: 'showSystemMessage', + serverKey: 'showSystemMessage', + type: SyncableParameterType.BOOLEAN, + canSync: true + }, + { key: 'theme', serverKey: 'theme', type: SyncableParameterType.STRING, canSync: true }, + { + key: 'copyTextAttachmentsAsPlainText', + serverKey: 'copyTextAttachmentsAsPlainText', + type: SyncableParameterType.BOOLEAN, + canSync: true + }, + { + key: 'showRawOutputSwitch', + serverKey: 'showRawOutputSwitch', + type: SyncableParameterType.BOOLEAN, + canSync: true + }, + { + key: 'alwaysShowSidebarOnDesktop', + serverKey: 'alwaysShowSidebarOnDesktop', + type: SyncableParameterType.BOOLEAN, + canSync: true + }, + { + key: 'autoShowSidebarOnNewChat', + serverKey: 'autoShowSidebarOnNewChat', + type: SyncableParameterType.BOOLEAN, + canSync: true + }, + { + key: 'showRawModelNames', + serverKey: 'showRawModelNames', + type: SyncableParameterType.BOOLEAN, + canSync: true + }, + { key: 'mcpServers', serverKey: 'mcpServers', type: SyncableParameterType.STRING, canSync: true }, + { + key: 'agenticMaxTurns', + serverKey: 'agenticMaxTurns', + type: SyncableParameterType.NUMBER, + canSync: true + }, + { + key: 'agenticMaxToolPreviewLines', + serverKey: 'agenticMaxToolPreviewLines', + type: SyncableParameterType.NUMBER, + canSync: true + }, + { + key: 'showToolCallInProgress', + serverKey: 'showToolCallInProgress', + type: SyncableParameterType.BOOLEAN, + canSync: true + }, + { + key: 'alwaysShowAgenticTurns', + serverKey: 'alwaysShowAgenticTurns', + type: SyncableParameterType.BOOLEAN, + canSync: true } ]; diff --git a/tools/server/webui/src/lib/stores/settings.svelte.ts b/tools/server/webui/src/lib/stores/settings.svelte.ts index 2fbff8312f..9d5e77adf2 100644 --- a/tools/server/webui/src/lib/stores/settings.svelte.ts +++ b/tools/server/webui/src/lib/stores/settings.svelte.ts @@ -287,8 +287,12 @@ class SettingsStore { */ resetParameterToServerDefault(key: string): void { const serverDefaults = this.getServerDefaults(); + const webuiSettings = serverStore.webuiSettings; - if (serverDefaults[key] !== undefined) { + if (webuiSettings && key in webuiSettings) { + // UI setting from admin config: write actual value + setConfigValue(this.config, key, webuiSettings[key]); + } else if (serverDefaults[key] !== undefined) { // sampling param known by server: clear it, let server decide setConfigValue(this.config, key, ''); } else if (key in SETTING_CONFIG_DEFAULT) { @@ -327,6 +331,17 @@ class SettingsStore { } } + // webui settings need actual values in config (no placeholder mechanism), + // so write them for non-overridden keys + const webuiSettings = serverStore.webuiSettings; + if (webuiSettings) { + for (const [key, value] of Object.entries(webuiSettings)) { + if (!this.userOverrides.has(key) && value !== undefined) { + setConfigValue(this.config, key, value); + } + } + } + this.saveConfig(); console.log('User overrides after sync:', Array.from(this.userOverrides)); } @@ -338,8 +353,14 @@ class SettingsStore { */ forceSyncWithServerDefaults(): void { const propsDefaults = this.getServerDefaults(); + const webuiSettings = serverStore.webuiSettings; + for (const key of ParameterSyncService.getSyncableParameterKeys()) { - if (propsDefaults[key] !== undefined) { + if (webuiSettings && key in webuiSettings) { + // UI setting from admin config: write actual value + setConfigValue(this.config, key, webuiSettings[key]); + } else if (propsDefaults[key] !== undefined) { + // sampling param: clear it, let server decide setConfigValue(this.config, key, ''); } else if (key in SETTING_CONFIG_DEFAULT) { setConfigValue(this.config, key, getConfigValue(SETTING_CONFIG_DEFAULT, key));