feat(tui): hover tooltip on status bar model segment - #41968
Open
marsmensch wants to merge 1 commit into
Open
Conversation
Hovering over the model·effort·ctx segment in the Ink TUI status bar
now pops a FloatBox tooltip with the full model ID, provider, reasoning
effort (when non-default), and fast-mode status.
Changes:
- tui_gateway/server.py: add 'provider' field to _session_info() dict
- types.ts: SessionInfo.provider?: string
- interfaces.ts: OverlayState.statusTooltip: null | { lines: string[] }
- overlayStore.ts: initialise statusTooltip: null in buildOverlayState()
(excluded from $isBlocked — informational only, must not block input;
cleared by resetFlowOverlays() as a transient/hover-driven overlay)
- appChrome.tsx: buildModelTooltip() helper; provider prop on StatusRule;
onMouseEnter/onMouseLeave on the pinned model+ctx Box fires
patchOverlayState({ statusTooltip }) / clears it
- appLayout.tsx: thread provider={ui.info?.provider} to StatusRule
- appOverlays.tsx: render FloatBox when overlay.statusTooltip is set
Author
|
This PR is provided mainly as usability enhancement similar to Hermes Desktop this PR |
teknium1
reviewed
Jul 14, 2026
teknium1
left a comment
Contributor
There was a problem hiding this comment.
Thanks for the focused TUI usability contribution. The feature premise remains valid on current main: the model/context segment at ui-tui/src/components/appChrome.tsx:575-592 has no hover handling or tooltip rendering.
Problems
- Current main already emits
providerfrom_session_info()attui_gateway/server.py:3373(and the lazy path preserves it at:5466-5467), so the backend hunk is redundant. - The proposed tooltip is rendered through
FloatingOverlays, which is composer-relative (ui-tui/src/components/appLayout.tsx:355-367;appOverlays.tsx:162). The default status bar is top-mounted (uiStore.ts:29,appLayout.tsx:353), so this does not place the tooltip next to the hovered status segment. - No tests cover the new hover/state/wire behavior; current focused suites exist under
ui-tui/src/__tests__/appChromeStatusRule.test.tsxandtests/tui_gateway/test_reasoning_session_scope.py.
Suggested changes
- Salvage only the TypeScript/UI plumbing; omit the already-landed backend field.
- Mount the tooltip in status-bar-relative layout and cover top/bottom status-bar placement plus the non-blocking overlay invariant.
Automated hermes-sweeper review.
| yolo = False | ||
| info: dict = { | ||
| "model": getattr(agent, "model", ""), | ||
| "provider": getattr(agent, "provider", None) or "", |
Contributor
There was a problem hiding this comment.
Current main already emits this field from _session_info() at tui_gateway/server.py:3373, and _lazy_resume_info() preserves a provider too at :5466-5467. Please omit this redundant backend hunk when salvaging the UI change.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Hovering over the model+context segment in the Ink TUI status bar shows a
FloatBoxtooltip with the full model ID, provider, reasoning effort (when non-default), and fast-mode state.Changes
tui_gateway/server.py: addproviderto_session_info()payloadui-tui/src/types.ts:SessionInfo.provider?: stringui-tui/src/app/interfaces.ts: addstatusTooltip: null | { lines: string[] }toOverlayState(excluded from$isBlocked— informational only)ui-tui/src/app/overlayStore.ts: initialisestatusTooltip: null; cleared byresetFlowOverlays()ui-tui/src/components/appChrome.tsx:buildModelTooltip()helper;providerprop onStatusRule;onMouseEnter/onMouseLeaveon the pinned model+ctxBoxfirespatchOverlayStateui-tui/src/components/appLayout.tsx: passprovider={ui.info?.provider}toStatusRuleui-tui/src/components/appOverlays.tsx: renderFloatBoxwhenoverlay.statusTooltipis setValidation
model: …/provider: …/reasoning: …/fast mode: onstatusTooltipblocks input$isBlockedunchanged)tsc --noEmitin changed filesnpm run build(ui-tui)