From b62d1cad4493008332d81a070036331d29715148 Mon Sep 17 00:00:00 2001 From: Frank Song Date: Tue, 9 Jun 2026 14:27:15 +0800 Subject: [PATCH 1/3] Align Worklog settings semantics --- CHANGELOG.md | 4 +- api/config.py | 32 +++- static/boot.js | 8 +- static/i18n.js | 52 +++---- static/index.html | 13 +- static/panels.js | 43 +++--- static/ui.js | 31 +++- tests/test_1003_preferences_autosave.py | 7 +- ...est_issue3595_activity_default_expanded.py | 144 +++++++++++++++--- tests/test_simplified_tool_calling_setting.py | 24 +-- tests/test_ui_tool_call_cleanup.py | 29 ++-- 11 files changed, 270 insertions(+), 117 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cbc6e62393..a3b464a909 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,9 @@ ## [Unreleased] +### Changed +- **Settings now treats Worklog details as folded by default.** The Appearance toggle is now worded as an opt-in to open Worklog details automatically, while the default remains folded; changing the control now immediately opens or folds Thinking cards, Tool cards, and multi-tool Worklog groups. The deprecated **Compact tool activity** renderer switch is no longer shown in Preferences, and existing installs stay on the Worklog renderer even if they previously saved the legacy setting as disabled. + ## [v0.51.340] — 2026-06-09 — Release LD (background-task agent wakeup in WebUI) — ⛔ HELD pending independent review ### Added @@ -38,7 +41,6 @@ ### Added - **Keyboard navigation in the model picker.** With the model dropdown open, ↑/↓ move a highlight through the filtered models (wrapping at the ends) and Enter selects the highlighted one; Escape closes. The highlight reuses the existing hover styling and is invisible until you use the keyboard. (#2952, #2791, @Sanjays2402) - **A "New chat" button in the mobile titlebar.** On narrow screens the app titlebar now shows a `+` button to start a new conversation without opening the sidebar; it shares the existing reload-button styling and mirrors the new-chat in-flight/disabled state. (#3531, @franksong2702) - ## [v0.51.336] — 2026-06-08 — Release KZ (fix inline-thinking streaming perf regression) ### Fixed diff --git a/api/config.py b/api/config.py index b7ebaa6db7..d0746d0d97 100644 --- a/api/config.py +++ b/api/config.py @@ -5488,7 +5488,7 @@ def _get_session_agent_lock(session_id: str) -> threading.Lock: "font_size": "default", # small | default | large | xlarge "session_jump_buttons": False, # show Start/End transcript jump pills "session_endless_scroll": False, # auto-load older transcript pages while scrolling upward - "activity_feed_expanded_default": False, # expand Activity disclosures by default for new turns + "worklog_details_expanded_default": False, # opt-in: expand Worklog details by default; default remains folded "pinned_sessions_limit": 3, # maximum active pinned sessions shown in the sidebar "inflight_state_max_sessions": 8, # max active-stream recovery snapshots kept in browser localStorage "inflight_state_max_messages": 24, # max recent messages kept per recovery snapshot @@ -5505,7 +5505,7 @@ def _get_session_agent_lock(session_id: str) -> threading.Lock: "rtl": False, # right-to-left chat layout (chat messages + composer only) "notifications_enabled": False, # browser notification when tab is in background "show_thinking": True, # show/hide thinking/reasoning blocks in chat view - "simplified_tool_calling": True, # render tools/thinking as compact inline timeline activity + "simplified_tool_calling": True, # legacy compatibility; Worklog renderer remains enabled "terminal_auto_expand_on_output": False, # auto-expand terminal panel when output arrives while collapsed "api_redact_enabled": True, # redact sensitive data (API keys, secrets) from API responses "dashboard_plugins": {}, # plugin_name -> bool, opt-in per plugin (default off per PF-10b) @@ -5514,7 +5514,13 @@ def _get_session_agent_lock(session_id: str) -> threading.Lock: "busy_input_mode": "queue", # behavior when sending while agent is running: queue | interrupt | steer "password_hash": None, # PBKDF2-HMAC-SHA256 hash; None = auth disabled } -_SETTINGS_LEGACY_DROP_KEYS = {"assistant_language", "bubble_layout", "default_model"} +_SETTINGS_LEGACY_DROP_KEYS = { + "assistant_language", + "bubble_layout", + "default_model", + "activity_feed_expanded_default", + "simplified_tool_calling", +} _SETTINGS_THEME_VALUES = {"light", "dark", "system"} _SETTINGS_SKIN_VALUES = { "default", @@ -5595,6 +5601,13 @@ def load_settings() -> dict: try: stored = json.loads(SETTINGS_FILE.read_text(encoding="utf-8")) if isinstance(stored, dict): + if ( + "worklog_details_expanded_default" not in stored + and "activity_feed_expanded_default" in stored + ): + settings["worklog_details_expanded_default"] = bool( + stored.get("activity_feed_expanded_default") + ) settings.update( { k: v @@ -5621,6 +5634,7 @@ def load_settings() -> dict: _SETTINGS_ALLOWED_KEYS = set(_SETTINGS_DEFAULTS.keys()) - { "password_hash", "default_model", + "simplified_tool_calling", } _SETTINGS_ENUM_VALUES = { "send_key": {"enter", "ctrl+enter"}, @@ -5655,12 +5669,11 @@ def load_settings() -> dict: "rtl", "notifications_enabled", "show_thinking", - "simplified_tool_calling", "terminal_auto_expand_on_output", "api_redact_enabled", "session_jump_buttons", "session_endless_scroll", - "activity_feed_expanded_default", + "worklog_details_expanded_default", } # 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})?$") @@ -5669,6 +5682,15 @@ def load_settings() -> dict: def save_settings(settings: dict) -> dict: """Save settings to disk. Returns the merged settings. Ignores unknown keys.""" current = load_settings() + if ( + "worklog_details_expanded_default" not in settings + and "activity_feed_expanded_default" in settings + ): + settings["worklog_details_expanded_default"] = settings.get( + "activity_feed_expanded_default" + ) + settings.pop("activity_feed_expanded_default", None) + settings.pop("simplified_tool_calling", None) pending_theme = current.get("theme") pending_skin = current.get("skin") theme_was_explicit = False diff --git a/static/boot.js b/static/boot.js index 34e8f8b845..bb2c470965 100644 --- a/static/boot.js +++ b/static/boot.js @@ -1794,9 +1794,13 @@ function applyBotName(){ if(s.default_workspace) S._profileDefaultWorkspace=s.default_workspace; window._whatsNewSummaryEnabled=!!s.whats_new_summary_enabled; window._showThinking=s.show_thinking!==false; - window._simplifiedToolCalling=s.simplified_tool_calling!==false; + window._simplifiedToolCalling=true; window._terminalAutoExpandOnOutput=!!s.terminal_auto_expand_on_output; - window._activityFeedExpandedDefault=!!s.activity_feed_expanded_default; + window._worklogDetailsExpandedByDefault=!!( + Object.prototype.hasOwnProperty.call(s,'worklog_details_expanded_default') + ? s.worklog_details_expanded_default + : s.activity_feed_expanded_default + ); window._sidebarDensity=(s.sidebar_density==='detailed'?'detailed':'compact'); window._pinnedSessionsLimit=parseInt(s.pinned_sessions_limit||3,10)||3; window._inflightStateLimits={ diff --git a/static/i18n.js b/static/i18n.js index 09d4dea7fd..b9b5e536c4 100644 --- a/static/i18n.js +++ b/static/i18n.js @@ -558,8 +558,8 @@ const LOCALES = { settings_label_session_endless_scroll: 'Load older messages while scrolling up', settings_desc_session_endless_scroll: 'When enabled, older messages load automatically as you scroll upward. When disabled, use the older-messages button.', - settings_label_activity_feed_expanded_default: 'Expand activity feed by default', - settings_desc_activity_feed_expanded_default: 'Open new Activity disclosures automatically so tool and model progress is visible without an extra click. Per-turn manual collapse/expand choices still win.', + settings_label_worklog_details_expanded_default: 'Open Worklog details automatically', + settings_desc_worklog_details_expanded_default: 'When enabled, new Worklog details start expanded so tool, thinking, and progress cards are visible without an extra click. When off, Worklog details stay folded by default; per-turn manual collapse/expand choices still win.', settings_label_tab_visibility: 'Sidebar tabs', settings_desc_tab_visibility: 'Choose which tabs appear in the sidebar and rail. Drag chips to reorder them. Chat and Settings are always visible.', @@ -1953,8 +1953,8 @@ const LOCALES = { settings_label_session_endless_scroll: 'Carica messaggi precedenti scorrendo in alto', settings_desc_session_endless_scroll: 'Se abilitato, i messaggi precedenti si caricano automaticamente scorrendo in alto. Se disabilitato, usa il pulsante messaggi precedenti.', - settings_label_activity_feed_expanded_default: 'Expand activity feed by default', - settings_desc_activity_feed_expanded_default: 'Open new Activity disclosures automatically so tool and model progress is visible without an extra click. Per-turn manual collapse/expand choices still win.', + settings_label_worklog_details_expanded_default: 'Open Worklog details automatically', + settings_desc_worklog_details_expanded_default: 'When enabled, new Worklog details start expanded so tool, thinking, and progress cards are visible without an extra click. When off, Worklog details stay folded by default; per-turn manual collapse/expand choices still win.', settings_label_tab_visibility: 'Schede della barra laterale', settings_desc_tab_visibility: 'Scegli quali schede mostrare nella barra laterale e nel rail. Chat e Impostazioni sono sempre visibili.', @@ -3340,8 +3340,8 @@ const LOCALES = { settings_label_session_endless_scroll: '上スクロールで古いメッセージを読み込む', settings_desc_session_endless_scroll: '有効にすると、上にスクロールしたとき古いメッセージを自動で読み込みます。無効の場合は古いメッセージボタンを使います。', - settings_label_activity_feed_expanded_default: 'アクティビティフィードをデフォルトで展開', - settings_desc_activity_feed_expanded_default: '新しいアクティビティの詳細を自動的に展開し、ツールやモデルの進捗をクリックなしで確認できます。ターンごとの手動折りたたみ/展開は優先されます。', + settings_label_worklog_details_expanded_default: 'Worklog の詳細を自動的に開く', + settings_desc_worklog_details_expanded_default: '有効にすると、新しい Worklog の詳細が展開された状態で始まり、ツール、Thinking、進捗カードをクリックなしで確認できます。無効の場合、Worklog の詳細はデフォルトで折りたたまれます。ターンごとの手動折りたたみ/展開は優先されます。', settings_label_tab_visibility: 'サイドバータブ', settings_desc_tab_visibility: 'サイドバーとレールに表示するタブを選択します。チャットと設定は常に表示されます。', @@ -5335,8 +5335,8 @@ const LOCALES = { settings_label_session_endless_scroll: 'Загружать старые сообщения при прокрутке вверх', settings_desc_session_endless_scroll: 'Если включено, старые сообщения загружаются автоматически при прокрутке вверх. Если выключено, используйте кнопку загрузки старых сообщений.', - settings_label_activity_feed_expanded_default: 'Expand activity feed by default', - settings_desc_activity_feed_expanded_default: 'Open new Activity disclosures automatically so tool and model progress is visible without an extra click. Per-turn manual collapse/expand choices still win.', + settings_label_worklog_details_expanded_default: 'Open Worklog details automatically', + settings_desc_worklog_details_expanded_default: 'When enabled, new Worklog details start expanded so tool, thinking, and progress cards are visible without an extra click. When off, Worklog details stay folded by default; per-turn manual collapse/expand choices still win.', settings_label_tab_visibility: 'Вкладки боковой панели', settings_desc_tab_visibility: 'Выберите, какие вкладки отображаются на боковой панели и в рейле. Чат и настройки всегда видны.', @@ -6647,8 +6647,8 @@ const LOCALES = { settings_label_session_endless_scroll: 'Cargar mensajes antiguos al desplazarse hacia arriba', settings_desc_session_endless_scroll: 'Si está activado, los mensajes antiguos se cargan automáticamente al desplazarte hacia arriba. Si está desactivado, usa el botón de mensajes antiguos.', - settings_label_activity_feed_expanded_default: 'Expand activity feed by default', - settings_desc_activity_feed_expanded_default: 'Open new Activity disclosures automatically so tool and model progress is visible without an extra click. Per-turn manual collapse/expand choices still win.', + settings_label_worklog_details_expanded_default: 'Open Worklog details automatically', + settings_desc_worklog_details_expanded_default: 'When enabled, new Worklog details start expanded so tool, thinking, and progress cards are visible without an extra click. When off, Worklog details stay folded by default; per-turn manual collapse/expand choices still win.', settings_label_tab_visibility: 'Pestañas de la barra lateral', settings_desc_tab_visibility: 'Elige qué pestañas aparecen en la barra lateral y el rail. Chat y Configuración siempre están visibles.', @@ -7662,8 +7662,8 @@ const LOCALES = { settings_label_session_endless_scroll: 'Ältere Nachrichten beim Hochscrollen laden', settings_desc_session_endless_scroll: 'Wenn aktiviert, werden ältere Nachrichten beim Hochscrollen automatisch geladen. Wenn deaktiviert, nutzt du den Button für ältere Nachrichten.', - settings_label_activity_feed_expanded_default: 'Expand activity feed by default', - settings_desc_activity_feed_expanded_default: 'Open new Activity disclosures automatically so tool and model progress is visible without an extra click. Per-turn manual collapse/expand choices still win.', + settings_label_worklog_details_expanded_default: 'Open Worklog details automatically', + settings_desc_worklog_details_expanded_default: 'When enabled, new Worklog details start expanded so tool, thinking, and progress cards are visible without an extra click. When off, Worklog details stay folded by default; per-turn manual collapse/expand choices still win.', settings_label_tab_visibility: 'Seitenleiste-Tabs', settings_desc_tab_visibility: 'Wähle, welche Tabs in der Seitenleiste und im Rail angezeigt werden. Ziehe die Chips, um die Reihenfolge zu ändern. Chat und Einstellungen sind immer sichtbar.', @@ -9306,8 +9306,8 @@ const LOCALES = { settings_label_session_endless_scroll: '向上滚动时加载更早的消息', settings_desc_session_endless_scroll: '启用后,向上滚动时会自动加载更早的消息。禁用时请使用加载更早消息按钮。', - settings_label_activity_feed_expanded_default: 'Expand activity feed by default', - settings_desc_activity_feed_expanded_default: 'Open new Activity disclosures automatically so tool and model progress is visible without an extra click. Per-turn manual collapse/expand choices still win.', + settings_label_worklog_details_expanded_default: 'Open Worklog details automatically', + settings_desc_worklog_details_expanded_default: 'When enabled, new Worklog details start expanded so tool, thinking, and progress cards are visible without an extra click. When off, Worklog details stay folded by default; per-turn manual collapse/expand choices still win.', settings_label_tab_visibility: '侧边栏标签', settings_desc_tab_visibility: '选择在侧边栏和导航栏中显示哪些标签。聊天和设置始终可见。', @@ -10024,8 +10024,8 @@ const LOCALES = { settings_label_session_endless_scroll: '向上捲動時載入較早訊息', settings_desc_session_endless_scroll: '啟用後,向上捲動時會自動載入較早訊息。停用時請使用載入較早訊息按鈕。', - settings_label_activity_feed_expanded_default: 'Expand activity feed by default', - settings_desc_activity_feed_expanded_default: 'Open new Activity disclosures automatically so tool and model progress is visible without an extra click. Per-turn manual collapse/expand choices still win.', + settings_label_worklog_details_expanded_default: 'Open Worklog details automatically', + settings_desc_worklog_details_expanded_default: 'When enabled, new Worklog details start expanded so tool, thinking, and progress cards are visible without an extra click. When off, Worklog details stay folded by default; per-turn manual collapse/expand choices still win.', settings_label_tab_visibility: '側邊欄標籤', settings_desc_tab_visibility: '選擇在側邊欄和導覽列中顯示哪些標籤。聊天和設定始終可見。', @@ -11301,8 +11301,8 @@ const LOCALES = { settings_label_session_endless_scroll: 'Carregar mensagens antigas ao rolar para cima', settings_desc_session_endless_scroll: 'Quando ativado, mensagens antigas carregam automaticamente ao rolar para cima. Quando desativado, use o botão de mensagens antigas.', - settings_label_activity_feed_expanded_default: 'Expand activity feed by default', - settings_desc_activity_feed_expanded_default: 'Open new Activity disclosures automatically so tool and model progress is visible without an extra click. Per-turn manual collapse/expand choices still win.', + settings_label_worklog_details_expanded_default: 'Open Worklog details automatically', + settings_desc_worklog_details_expanded_default: 'When enabled, new Worklog details start expanded so tool, thinking, and progress cards are visible without an extra click. When off, Worklog details stay folded by default; per-turn manual collapse/expand choices still win.', settings_label_tab_visibility: 'Abas da barra lateral', settings_desc_tab_visibility: 'Escolha quais abas aparecem na barra lateral e no rail. Chat e Configurações estão sempre visíveis.', @@ -12589,8 +12589,8 @@ const LOCALES = { settings_label_session_endless_scroll: '위로 스크롤할 때 이전 메시지 불러오기', settings_desc_session_endless_scroll: '활성화하면 위로 스크롤할 때 이전 메시지를 자동으로 불러옵니다. 비활성화하면 이전 메시지 버튼을 사용합니다.', - settings_label_activity_feed_expanded_default: 'Expand activity feed by default', - settings_desc_activity_feed_expanded_default: 'Open new Activity disclosures automatically so tool and model progress is visible without an extra click. Per-turn manual collapse/expand choices still win.', + settings_label_worklog_details_expanded_default: 'Open Worklog details automatically', + settings_desc_worklog_details_expanded_default: 'When enabled, new Worklog details start expanded so tool, thinking, and progress cards are visible without an extra click. When off, Worklog details stay folded by default; per-turn manual collapse/expand choices still win.', settings_label_tab_visibility: '사이드바 탭', settings_desc_tab_visibility: '사이드바와 레일에 표시할 탭을 선택하세요. 채팅과 설정은 항상 표시됩니다.', @@ -13894,8 +13894,8 @@ const LOCALES = { settings_desc_terminal_auto_expand: 'Développer automatiquement le panneau de terminal réduit lorsqu\'une commande en cours d\'exécution émet une nouvelle sortie.', settings_label_session_endless_scroll: 'Charger les anciens messages en faisant défiler vers le haut', settings_desc_session_endless_scroll: 'Lorsqu\'ils sont activés, les anciens messages se chargent automatiquement lorsque vous faites défiler vers le haut. Lorsqu\'il est désactivé, utilisez le bouton des messages plus anciens.', - settings_label_activity_feed_expanded_default: 'Expand activity feed by default', - settings_desc_activity_feed_expanded_default: 'Open new Activity disclosures automatically so tool and model progress is visible without an extra click. Per-turn manual collapse/expand choices still win.', + settings_label_worklog_details_expanded_default: 'Open Worklog details automatically', + settings_desc_worklog_details_expanded_default: 'When enabled, new Worklog details start expanded so tool, thinking, and progress cards are visible without an extra click. When off, Worklog details stay folded by default; per-turn manual collapse/expand choices still win.', settings_label_tab_visibility: 'Onglets de la barre latérale', settings_desc_tab_visibility: 'Choisissez quels onglets apparaissent dans la barre latérale et le rail. Chat et Paramètres sont toujours visibles.', @@ -15300,8 +15300,8 @@ const LOCALES = { settings_label_session_endless_scroll: 'Yukarı kaydırırken eski mesajları yükle', settings_desc_session_endless_scroll: 'Etkinleştirildiğinde, yukarı doğru kaydırdığınızda eski mesajlar otomatik olarak yüklenir. Devre dışı bırakıldığında eski mesajlar düğmesini kullanın.', - settings_label_activity_feed_expanded_default: 'Expand activity feed by default', - settings_desc_activity_feed_expanded_default: 'Open new Activity disclosures automatically so tool and model progress is visible without an extra click. Per-turn manual collapse/expand choices still win.', + settings_label_worklog_details_expanded_default: 'Open Worklog details automatically', + settings_desc_worklog_details_expanded_default: 'When enabled, new Worklog details start expanded so tool, thinking, and progress cards are visible without an extra click. When off, Worklog details stay folded by default; per-turn manual collapse/expand choices still win.', settings_label_tab_visibility: 'Kenar çubuğu sekmeleri', settings_desc_tab_visibility: 'Kenar çubuğunda ve rayda hangi sekmelerin görüneceğini seçin. Sohbet ve Ayarlar her zaman görünür durumdadır.', @@ -16698,8 +16698,8 @@ const LOCALES = { settings_label_session_endless_scroll: 'Ładuj starsze wiadomości podczas przewijania w górę', settings_desc_session_endless_scroll: 'Gdy ta opcja jest włączona, starsze wiadomości ładują się automatycznie przy przewijaniu w górę. Gdy jest wyłączona, użyj przycisku wczytywania starszych wiadomości.', - settings_label_activity_feed_expanded_default: 'Rozwiń kanał aktywności domyślnie', - settings_desc_activity_feed_expanded_default: 'Rozwijaj nowe szczegóły Aktywności automatycznie, aby postęp narzędzi i modeli był widoczny bez dodatkowego kliknięcia. Ręczne decyzje o zwinięciu/rozwinięciu w danej turze mają pierwszeństwo.', + settings_label_worklog_details_expanded_default: 'Otwieraj szczegóły Worklog automatycznie', + settings_desc_worklog_details_expanded_default: 'Gdy ta opcja jest włączona, nowe szczegóły Worklog zaczynają rozwinięte, dzięki czemu karty narzędzi, Thinking i postępu są widoczne bez dodatkowego kliknięcia. Gdy jest wyłączona, szczegóły Worklog pozostają domyślnie zwinięte. Ręczne decyzje o zwinięciu/rozwinięciu w danej turze mają pierwszeństwo.', settings_label_tab_visibility: 'Karty paska bocznego', settings_desc_tab_visibility: 'Wybierz, które karty pojawiają się na pasku bocznym i szynie. Przeciągnij elementy, aby zmienić ich kolejność. Czat i Ustawienia są zawsze widoczne.', diff --git a/static/index.html b/static/index.html index 0b00cb163b..d3980073fc 100644 --- a/static/index.html +++ b/static/index.html @@ -1006,10 +1006,10 @@

What can I help with?

-
Open new Activity disclosures automatically so tool and model progress is visible without an extra click. Per-turn manual collapse/expand choices still win.
+
When enabled, new Worklog details start expanded so tool, thinking, and progress cards are visible without an extra click. When off, Worklog details stay folded by default; per-turn manual collapse/expand choices still win.
@@ -1155,13 +1155,6 @@

What can I help with?

Fade newly streamed words in while the assistant is responding. Similar to OpenWebUI; off by default for maximum performance.
-
- -
Show thinking and tool calls as compact inline activity while preserving the agent timeline.
-