diff --git a/internal/tui/input_views.go b/internal/tui/input_views.go index f09fff7..ba2b9ce 100644 --- a/internal/tui/input_views.go +++ b/internal/tui/input_views.go @@ -105,11 +105,6 @@ func (m Model) inputAreaView() string { parts = append(parts, m.renderFallbackStatusBar()) } - // 4. Context-sensitive shortcut hints - if hints := m.shortcutHints(); hints != "" { - parts = append(parts, lipgloss.NewStyle().Faint(true).Render(hints)) - } - return lipgloss.JoinVertical(lipgloss.Left, parts...) } @@ -331,49 +326,6 @@ func (m Model) renderModePills() string { return leftPart + fill } -// shortcutHints returns a styled bottom hint bar with shortcuts left-aligned and version right-aligned. -func (m Model) shortcutHints() string { - hintStyle := lipgloss.NewStyle().Faint(true) - sepStyle := lipgloss.NewStyle().Faint(true) - - var parts []string - - // Core shortcuts - parts = append(parts, "Ctrl+A Approve") - parts = append(parts, "Ctrl+P Mode") - parts = append(parts, "F1 Shortcuts") - - // Context-sensitive hints - if m.teamState.HasTeam() { - parts = append(parts, "Shift+↑↓ Agent") - } - - if m.agentDone && !m.thinking && len(m.lines) > 0 { - parts = append(parts, "Ctrl+Y Copy") - } - - if m.inputActive() && strings.TrimSpace(m.textarea.Value()) == "" { - parts = append(parts, "RClick Paste") - } - - leftText := hintStyle.Render(strings.Join(parts, sepStyle.Render(" "))) - - // Version right-aligned - ver := "" - if m.version != "" { - ver = hintStyle.Render(m.version) - } - - leftW := lipgloss.Width(leftText) - verW := lipgloss.Width(ver) - gap := m.width - leftW - verW - if gap < 1 { - gap = 1 - } - - return leftText + strings.Repeat(" ", gap) + ver -} - // renderMinimalStatusBar renders a minimal status bar for wide-screen mode (sidebar visible). // Only shows copy notice and background tasks. Returns empty string when nothing to show. func (m Model) renderMinimalStatusBar() string { diff --git a/internal/tui/sidebar_component.go b/internal/tui/sidebar_component.go index f12b13b..0a5370c 100644 --- a/internal/tui/sidebar_component.go +++ b/internal/tui/sidebar_component.go @@ -25,6 +25,7 @@ type SidebarState struct { MCPStatuses []MCPStatusItem TeammateCount int BgRunning int + Version string } // SidebarComponent renders the right-hand info panel. @@ -54,7 +55,7 @@ func (s *SidebarComponent) View(state SidebarState) string { } } - addLines(s.renderLogo()) + addLines(s.renderLogo(state.Version)) addLines("") // spacing after logo if state.ActiveProvider != "" && len(lines) < maxLines { addLines(s.renderModelSection(state)) @@ -112,7 +113,7 @@ func (s *SidebarComponent) View(state SidebarState) string { return result.String() } -func (s *SidebarComponent) renderLogo() string { +func (s *SidebarComponent) renderLogo(version string) string { bracketStyle := lipgloss.NewStyle().Foreground(colorMuted).Bold(true) jStyle := lipgloss.NewStyle().Foreground(colorLogoJ).Bold(true) codeStyle := lipgloss.NewStyle().Foreground(colorText).Bold(true) @@ -122,7 +123,11 @@ func (s *SidebarComponent) renderLogo() string { codeStyle.Render("CODE"), bracketStyle.Render("]"), ) - line := lipgloss.NewStyle().Foreground(colorMuted).Render("─────────") + if version != "" { + verStyle := lipgloss.NewStyle().Foreground(colorMuted).Bold(true) + logo = lipgloss.JoinHorizontal(lipgloss.Left, logo, " ", verStyle.Render(version)) + } + line := lipgloss.NewStyle().Foreground(colorMuted).Render("──────────────") return lipgloss.JoinVertical(lipgloss.Left, logo, line) } diff --git a/internal/tui/tui.go b/internal/tui/tui.go index f913ebe..20256d2 100644 --- a/internal/tui/tui.go +++ b/internal/tui/tui.go @@ -2711,6 +2711,7 @@ func (m Model) renderSidebar(height int) string { MCPStatuses: m.mcpStatuses, TeammateCount: len(m.teamState.Teammates), BgRunning: m.bgRunning, + Version: m.version, }) }