Summary
Add a tui.showThinking config toggle to conditionally render the reasoning/thinking element in MessageBubble.
Motivation
The TUI has plumbing for reasoning content (reasoningContent field on the message model, rendered in MessageBubble at line 157-173), but it is always rendered when present. Users may want to hide thinking text for cleaner output. The config toggle provides control without requiring graph-level changes.
Proposed Solution
- Add
tui.showThinking: true (default: true for backward compat) to config schema
- In
messageBubble.js, check the config before rendering reasoningEl:
const showReasoning = config?.tui?.showThinking !== false;
const reasoningEl = showReasoning && hasReasoning ? ... : null;
- Add config validation in
src/config/schemas.js
Alternatives Considered
- Hardcoding the toggle off — less flexible, no user control
- Stripping reasoning before it hits the TUI — loses the data entirely, config toggle preserves it
OpenSpec Note
This project uses OpenSpec for feature development. If this request is approved, I will:
- Run
/opsx:propose to generate a full proposal with specs and tasks
- Iterate on the design before any code is written
- Follow the task-driven implementation workflow
Additional Context
- Message model already has
reasoningContent — no model changes needed
reasoningEl at messageBubble.js:161-173 is already conditionally rendered based on hasReasoning — just needs a config gate
committedReasoning in app.js is always "" — reasoning content is never populated, but the rendering path exists for when it is
Audit Findings (for Issue #600)
- src/tui/messageBubble.js:157 —
hasReasoning check: role === "assistant" && reasoningContent
- src/tui/messageBubble.js:161-173 —
reasoningEl renders (thinking) ... truncated at 200 chars when hasReasoning is true
- src/tui/messageBubble.js:243 —
reasoningEl rendered in the bubble JSX
- src/config/schemas.js — Need to add
tui.showThinking to the TUI config schema
- src/tui/app.js:717 —
reasoningContent: committedReasoning || undefined — ready to receive reasoning data
Implementation scope: One config field, one conditional in MessageBubble, one config schema update. Low risk, straightforward.
Summary
Add a
tui.showThinkingconfig toggle to conditionally render the reasoning/thinking element in MessageBubble.Motivation
The TUI has plumbing for reasoning content (
reasoningContentfield on the message model, rendered in MessageBubble at line 157-173), but it is always rendered when present. Users may want to hide thinking text for cleaner output. The config toggle provides control without requiring graph-level changes.Proposed Solution
tui.showThinking: true(default:truefor backward compat) to config schemamessageBubble.js, check the config before renderingreasoningEl:src/config/schemas.jsAlternatives Considered
OpenSpec Note
This project uses OpenSpec for feature development. If this request is approved, I will:
/opsx:proposeto generate a full proposal with specs and tasksAdditional Context
reasoningContent— no model changes neededreasoningElatmessageBubble.js:161-173is already conditionally rendered based onhasReasoning— just needs a config gatecommittedReasoninginapp.jsis always""— reasoning content is never populated, but the rendering path exists for when it isAudit Findings (for Issue #600)
hasReasoningcheck:role === "assistant" && reasoningContentreasoningElrenders(thinking) ... truncated at 200 charswhenhasReasoningis truereasoningElrendered in the bubble JSXtui.showThinkingto the TUI config schemareasoningContent: committedReasoning || undefined— ready to receive reasoning dataImplementation scope: One config field, one conditional in MessageBubble, one config schema update. Low risk, straightforward.