diff --git a/CHANGELOG.md b/CHANGELOG.md index 730f1cd..9d5e129 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Hermes Web UI -- Changelog +## [v0.50.115] — 2026-04-20 + +### Removed +- **Chat bubble layout setting removed** — the opt-in `bubble_layout` toggle (issue #336) is removed end-to-end: the Settings checkbox, all related CSS (`.bubble-layout` selectors), the config.py default/bool-key entries, the boot.js/panels.js class toggles, and all locale strings across 6 languages. Stale `bubble_layout` values in existing `settings.json` files are silently dropped on load via the legacy-drop-keys migration path. (Fixes #760, credit: @aronprins) + ## [v0.50.114] — 2026-04-20 ### Fixed diff --git a/api/config.py b/api/config.py index 0fadebb..2a6d292 100644 --- a/api/config.py +++ b/api/config.py @@ -1339,11 +1339,10 @@ _SETTINGS_DEFAULTS = { ), # display name for the assistant "sound_enabled": False, # play notification sound when assistant finishes "notifications_enabled": False, # browser notification when tab is in background - "bubble_layout": False, # right-aligned user / left-aligned assistant chat bubbles "sidebar_density": "compact", # compact | detailed "password_hash": None, # PBKDF2-HMAC-SHA256 hash; None = auth disabled } -_SETTINGS_LEGACY_DROP_KEYS = {"assistant_language", "default_model"} +_SETTINGS_LEGACY_DROP_KEYS = {"assistant_language", "bubble_layout", "default_model"} _SETTINGS_THEME_VALUES = {"light", "dark", "system"} _SETTINGS_SKIN_VALUES = { "default", @@ -1450,7 +1449,6 @@ _SETTINGS_BOOL_KEYS = { "check_for_updates", "sound_enabled", "notifications_enabled", - "bubble_layout", } # Language codes are validated as short alphanumeric BCP-47-like tags (e.g. 'en', 'zh', 'fr') _SETTINGS_LANG_RE = __import__("re").compile(r"^[a-zA-Z]{2,10}(-[a-zA-Z0-9]{2,8})?$") diff --git a/docs/ui-ux/index.html b/docs/ui-ux/index.html index 3bb8b56..5ae603c 100644 --- a/docs/ui-ux/index.html +++ b/docs/ui-ux/index.html @@ -62,7 +62,6 @@ - @@ -664,24 +663,7 @@ Run typecheck to confirm, then patch. - -
-
11 · Bubble layout
-

Opt-in via body.bubble-layout — extra bubble padding for assistant too

-

The default layout already right-aligns user messages (the redesign adopted it globally), so this toggle mostly affects additional padding / boundary handling. Flip the Bubble layout toggle in the header to see the mode applied.

-
Conversation sample -
-

Can you add a retry button next to the regenerate one?

-
-
HHermes
-
-

Yes — it can share .msg-action-btn and live in the same .msg-actions container. I'll wire it up on _lastError.

-
-
-

Perfect, go for it.

-
-
-
+
@@ -845,13 +827,7 @@ Run typecheck to confirm, then patch. }); }); // Bubble-layout toggle - const bubbleBtn = document.getElementById('toggleBubble'); - bubbleBtn.addEventListener('click', () => { - document.body.classList.toggle('bubble-layout'); - const on = document.body.classList.contains('bubble-layout'); - bubbleBtn.textContent = 'Bubble layout: ' + (on ? 'on' : 'off'); - bubbleBtn.classList.toggle('on', on); - }); + // Thinking / tool-card click-to-toggle (so the demo feels live) document.querySelectorAll('.thinking-card-header, .tool-card-header').forEach(h => { h.addEventListener('click', () => h.parentElement.classList.toggle('open')); diff --git a/static/boot.js b/static/boot.js index 5280098..62de57d 100644 --- a/static/boot.js +++ b/static/boot.js @@ -771,7 +771,6 @@ function applyBotName(){ _applyTheme(appearance.theme); localStorage.setItem('hermes-skin',appearance.skin); _applySkin(appearance.skin); - document.body.classList.toggle('bubble-layout',!!s.bubble_layout); if(typeof setLocale==='function'){ const _lang=typeof resolvePreferredLocale==='function' ? resolvePreferredLocale(s.language, localStorage.getItem('hermes-lang')) @@ -789,7 +788,6 @@ function applyBotName(){ window._sidebarDensity='compact'; window._botName='Hermes'; _bootSettings={check_for_updates:false}; - document.body.classList.remove('bubble-layout'); if(typeof setLocale==='function'){ const _lang=typeof resolvePreferredLocale==='function' ? resolvePreferredLocale(null, localStorage.getItem('hermes-lang')) diff --git a/static/i18n.js b/static/i18n.js index 76c1dc2..9c95fb0 100644 --- a/static/i18n.js +++ b/static/i18n.js @@ -194,7 +194,6 @@ const LOCALES = { settings_label_skin: 'Skin', settings_label_language: 'Language', settings_label_token_usage: 'Show token usage', - settings_label_bubble_layout: 'Chat bubble layout', settings_label_sidebar_density: 'Sidebar density', settings_label_cli_sessions: 'Show agent sessions', settings_label_sync_insights: 'Sync to insights', @@ -261,7 +260,6 @@ const LOCALES = { settings_label_notifications: 'Browser notifications', settings_desc_notifications: 'Show a system notification when a response completes while the app is in the background.', settings_desc_token_usage: 'Displays input/output token count below each assistant reply. Also toggled with /usage.', - settings_desc_bubble_layout: 'Right-align user messages and left-align assistant replies. Off by default to keep code blocks and tool output full-width.', settings_sidebar_density_compact: 'Compact', settings_sidebar_density_detailed: 'Detailed', settings_desc_sidebar_density: 'Controls how much metadata the session list shows in the left sidebar.', @@ -627,7 +625,6 @@ const LOCALES = { settings_label_theme: 'Тема', settings_label_language: 'Язык', settings_label_token_usage: 'Показывать использование токенов', - settings_label_bubble_layout: 'Раскладка пузырьков чата', settings_label_sidebar_density: 'Плотность боковой панели', settings_label_cli_sessions: 'Показывать сеансы агента', settings_label_sync_insights: 'Синхронизировать с Insights', @@ -710,7 +707,6 @@ const LOCALES = { settings_label_notifications: 'Уведомления браузера', settings_desc_notifications: 'Показывать системное уведомление, когда ответ готов, а вкладка находится в фоне.', settings_desc_token_usage: 'Показывает количество входных и выходных токенов под каждым ответом помощника. Также переключается через /usage.', - settings_desc_bubble_layout: 'Выравнивает сообщения пользователя справа, а ответы помощника слева. Выключено по умолчанию, чтобы блоки кода и вывод инструментов занимали всю ширину.', settings_sidebar_density_compact: 'Компактно', settings_sidebar_density_detailed: 'Подробно', settings_desc_sidebar_density: 'Управляет тем, сколько метаданных показывается в списке сеансов на левой панели.', @@ -1088,7 +1084,6 @@ const LOCALES = { settings_label_skin: 'Piel', settings_label_language: 'Idioma', settings_label_token_usage: 'Mostrar uso de tokens', - settings_label_bubble_layout: 'Disposición en burbujas', settings_label_sidebar_density: 'Densidad de la barra lateral', settings_label_cli_sessions: 'Mostrar sesiones de CLI', settings_label_sync_insights: 'Sincronizar con insights', @@ -1155,7 +1150,6 @@ const LOCALES = { settings_label_notifications: 'Notificaciones del navegador', settings_desc_notifications: 'Muestra una notificación del sistema cuando una respuesta termina mientras la pestaña está en segundo plano.', settings_desc_token_usage: 'Muestra el conteo de tokens de entrada/salida debajo de cada respuesta del asistente. También se puede alternar con /usage.', - settings_desc_bubble_layout: 'Alinea los mensajes del usuario a la derecha y las respuestas del asistente a la izquierda. Desactivado por defecto para mantener los bloques de código y la salida de herramientas a ancho completo.', settings_sidebar_density_compact: 'Compacta', settings_sidebar_density_detailed: 'Detallada', settings_desc_sidebar_density: 'Controla cuántos metadatos muestra la lista de sesiones en la barra lateral izquierda.', @@ -1521,7 +1515,6 @@ const LOCALES = { settings_label_skin: 'Skin', settings_label_language: 'Sprache', settings_label_token_usage: 'Token-Verbrauch anzeigen', - settings_label_bubble_layout: 'Chat-Bubble-Layout', settings_label_sidebar_density: 'Seitenleistendichte', settings_label_cli_sessions: 'Agent-Sitzungen anzeigen', settings_label_sync_insights: 'Mit Insights synchronisieren', @@ -1577,7 +1570,6 @@ const LOCALES = { settings_label_notifications: 'Browser-Benachrichtigungen', settings_desc_notifications: 'Zeigt eine Systembenachrichtigung an, wenn eine Antwort fertiggestellt wird, während der Tab im Hintergrund ist.', settings_desc_token_usage: 'Zeigt die Anzahl der Input/Output-Token unter jeder Antwort des Assistenten an. Auch umschaltbar mit /usage.', - settings_desc_bubble_layout: 'Richtet Benutzernachrichten rechts und Assistentenantworten links aus. Standardmäßig deaktiviert, damit Codeblöcke und Tool-Ausgaben die volle Breite behalten.', settings_sidebar_density_compact: 'Kompakt', settings_sidebar_density_detailed: 'Detailliert', settings_desc_sidebar_density: 'Steuert, wie viele Metadaten die Sitzungsliste in der linken Seitenleiste anzeigt.', @@ -1755,7 +1747,6 @@ const LOCALES = { settings_label_skin: '\u76ae\u80a4', settings_label_language: '\u8bed\u8a00', settings_label_token_usage: '\u663e\u793a token \u7528\u91cf', - settings_label_bubble_layout: '聊天气泡布局', settings_label_sidebar_density: '侧边栏密度', settings_label_cli_sessions: '\u663e\u793a CLI \u4f1a\u8bdd', settings_label_sync_insights: '\u540c\u6b65\u5230 insights', @@ -1825,7 +1816,6 @@ const LOCALES = { settings_desc_sound: '助手完成回复时播放提示音。', settings_desc_notifications: '当标签页在后台时,回复完成后显示系统通知。', settings_desc_token_usage: '在助手每次回复下方显示输入/输出 token 数量。也可以用 /usage 切换。', - settings_desc_bubble_layout: '开启后将用户消息右对齐、助手消息左对齐。默认关闭,以保持代码块和工具输出为全宽显示。', settings_sidebar_density_compact: '紧凑', settings_sidebar_density_detailed: '详细', settings_desc_sidebar_density: '控制左侧会话列表展示多少元信息。', @@ -2172,7 +2162,6 @@ const LOCALES = { settings_label_skin: '\u76ae\u819a', settings_label_language: '\u8a9d\u8a00', settings_label_token_usage: '\u986f\u793a token \u7528\u91cf', - settings_label_bubble_layout: '聊天泡泡版面', settings_label_sidebar_density: '側邊欄密度', settings_label_cli_sessions: '\u986f\u793a CLI \u6703\u8a71', settings_label_sync_insights: '\u540c\u6b65\u5230 insights', @@ -2237,7 +2226,6 @@ const LOCALES = { settings_desc_sound: '\u52a9\u624b\u5b8c\u6210\u56de\u7b54\u6642\u64a9\u653e\u8072\u97f3\u3002', settings_desc_notifications: '\u7576\u5206\u9801\u5728\u5f8c\u81ea\u6642\uff0c\u6709\u56de\u7b54\u5b8c\u6210\u6e05\u55ae\u6703\u986f\u793a\u7cfb\u7d71\u901a\u77e5\u3002', settings_desc_token_usage: '\u5728\u52a9\u624b\u6bcf\u6b21\u56de\u7b54\u4e0b\u65b9\u986f\u793a Input/Output token \u6578\u91cf\u3002\u4e5f\u53ef\u4ee5\u7528 /usage \u5207\u63db\u3002', - settings_desc_bubble_layout: '開啟後將使用者訊息靠右、助理訊息靠左。預設關閉,以保持程式碼區塊與工具輸出為全寬顯示。', settings_sidebar_density_compact: '精簡', settings_sidebar_density_detailed: '詳細', settings_desc_sidebar_density: '控制左側對話清單要顯示多少額外資訊。', diff --git a/static/index.html b/static/index.html index fdbd3df..bc9876a 100644 --- a/static/index.html +++ b/static/index.html @@ -554,13 +554,6 @@
Displays input/output token count below each assistant reply. Also toggled with /usage.
-
- -
Right-align user messages and left-align assistant replies. Off by default to keep code blocks and tool output full-width.
-