From 7d96a5ab6ea10bd67c440cae632d97ec31e61780 Mon Sep 17 00:00:00 2001 From: Brooklyn Nicholson Date: Wed, 29 Apr 2026 16:03:45 -0500 Subject: [PATCH] fix(tui): refine reasoning visibility updates Save reasoning display changes atomically and keep trail segments visible when Activity can render them. --- tui_gateway/server.py | 28 ++++++++++++++++++++++++---- ui-tui/src/app/useMainApp.ts | 13 +++++++++---- 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/tui_gateway/server.py b/tui_gateway/server.py index 50e6074140..24f6baf718 100644 --- a/tui_gateway/server.py +++ b/tui_gateway/server.py @@ -3105,14 +3105,34 @@ def _(rid, params: dict) -> dict: arg = str(value or "").strip().lower() if arg in ("show", "on"): - _write_config_key("display.show_reasoning", True) - _write_config_key("display.sections.thinking", "expanded") + cfg = _load_cfg() + display = cfg.get("display") if isinstance(cfg.get("display"), dict) else {} + sections = ( + display.get("sections") + if isinstance(display.get("sections"), dict) + else {} + ) + display["show_reasoning"] = True + sections["thinking"] = "expanded" + display["sections"] = sections + cfg["display"] = display + _save_cfg(cfg) if session: session["show_reasoning"] = True return _ok(rid, {"key": key, "value": "show"}) if arg in ("hide", "off"): - _write_config_key("display.show_reasoning", False) - _write_config_key("display.sections.thinking", "hidden") + cfg = _load_cfg() + display = cfg.get("display") if isinstance(cfg.get("display"), dict) else {} + sections = ( + display.get("sections") + if isinstance(display.get("sections"), dict) + else {} + ) + display["show_reasoning"] = False + sections["thinking"] = "hidden" + display["sections"] = sections + cfg["display"] = display + _save_cfg(cfg) if session: session["show_reasoning"] = False return _ok(rid, {"key": key, "value": "hide"}) diff --git a/ui-tui/src/app/useMainApp.ts b/ui-tui/src/app/useMainApp.ts index 39b7c652ab..9ec18337bb 100644 --- a/ui-tui/src/app/useMainApp.ts +++ b/ui-tui/src/app/useMainApp.ts @@ -713,6 +713,7 @@ export function useMainApp(gw: GatewayClient) { ) const thinkingPanelVisible = sectionMode('thinking', ui.detailsMode, ui.sections, ui.detailsModeCommandOverride) !== 'hidden' const toolsPanelVisible = sectionMode('tools', ui.detailsMode, ui.sections, ui.detailsModeCommandOverride) !== 'hidden' + const activityPanelVisible = sectionMode('activity', ui.detailsMode, ui.sections, ui.detailsModeCommandOverride) !== 'hidden' const showProgressArea = useTurnSelector(state => anyPanelVisible @@ -721,14 +722,18 @@ export function useMainApp(gw: GatewayClient) { state.outcome || state.streamPendingTools.length || state.streamSegments.some(segment => { - const thinking = Boolean(segment.thinking?.trim()) - const tools = Boolean(segment.tools?.length) + const hasThinking = Boolean(segment.thinking?.trim()) + const hasTrailTools = Boolean(segment.tools?.length) if (segment.kind === 'trail' && !segment.text) { - return (thinkingPanelVisible && thinking) || (toolsPanelVisible && tools) + return (thinkingPanelVisible && hasThinking) || ((toolsPanelVisible || activityPanelVisible) && hasTrailTools) } - return Boolean(segment.text?.trim()) || (thinkingPanelVisible && thinking) || (toolsPanelVisible && tools) + return ( + Boolean(segment.text?.trim()) || + (thinkingPanelVisible && hasThinking) || + ((toolsPanelVisible || activityPanelVisible) && hasTrailTools) + ) }) || state.subagents.length || state.tools.length ||