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));