Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 97aa1708c2 | |||
| d12689f3b5 |
71
CLAUDE.md
71
CLAUDE.md
@@ -18,22 +18,24 @@ All system panel features successfully implemented:
|
|||||||
- ✅ **Tmpfs Monitoring**: Added /tmp usage to RAM section
|
- ✅ **Tmpfs Monitoring**: Added /tmp usage to RAM section
|
||||||
- ✅ **Agent Deployment**: NixOS collector working in production
|
- ✅ **Agent Deployment**: NixOS collector working in production
|
||||||
|
|
||||||
**Keyboard Navigation and Service Management - COMPLETED** ✅
|
**Simplified Navigation and Service Management - COMPLETED** ✅
|
||||||
|
|
||||||
All keyboard navigation and service selection features successfully implemented:
|
All navigation and service management features successfully implemented:
|
||||||
- ✅ **Panel Navigation**: Shift+Tab cycles through visible panels only (System → Services → Backup)
|
- ✅ **Direct Service Control**: Up/Down (or j/k) arrows directly control service selection
|
||||||
- ✅ **Service Selection**: Up/Down arrows navigate through parent services with visual cursor
|
- ✅ **Always Visible Selection**: Service selection highlighting always visible (no panel focus needed)
|
||||||
- ✅ **Focus Management**: Selection highlighting only visible when Services panel focused
|
- ✅ **Complete Service Discovery**: All configured services visible regardless of state
|
||||||
- ✅ **Status Preservation**: Service health colors maintained during selection (green/red icons)
|
- ✅ **Transitional Visual Feedback**: Service operations show directional arrows (↑ ↓ ↻)
|
||||||
- ✅ **Smart Panel Switching**: Only cycles through panels with data (backup panel conditional)
|
- ✅ **Simplified Interface**: Removed panel switching complexity, uniform appearance
|
||||||
- ✅ **Scroll Support**: All panels support content scrolling with proper overflow indicators
|
- ✅ **Vi-style Navigation**: Added j/k keys for vim users alongside arrow keys
|
||||||
|
|
||||||
**Current Status - October 27, 2025:**
|
**Current Status - October 28, 2025:**
|
||||||
- All keyboard navigation features working correctly ✅
|
- All service discovery and display features working correctly ✅
|
||||||
- Service selection cursor implemented with focus-aware highlighting ✅
|
- Simplified navigation system implemented ✅
|
||||||
- Panel scrolling fixed for System, Services, and Backup panels ✅
|
- Service selection always visible with direct control ✅
|
||||||
|
- Complete service visibility (all configured services show regardless of state) ✅
|
||||||
|
- Transitional service icons working with proper color handling ✅
|
||||||
- Build display working: "Build: 25.05.20251004.3bcc93c" ✅
|
- Build display working: "Build: 25.05.20251004.3bcc93c" ✅
|
||||||
- Agent version display working: "Agent: v0.1.17" ✅
|
- Agent version display working: "Agent: v0.1.33" ✅
|
||||||
- Cross-host version comparison implemented ✅
|
- Cross-host version comparison implemented ✅
|
||||||
- Automated binary release system working ✅
|
- Automated binary release system working ✅
|
||||||
- SMART data consolidated into disk collector ✅
|
- SMART data consolidated into disk collector ✅
|
||||||
@@ -76,36 +78,35 @@ Storage:
|
|||||||
**Backup panel visibility fixed - only shows when meaningful data exists ✅**
|
**Backup panel visibility fixed - only shows when meaningful data exists ✅**
|
||||||
**SSH-based rebuild system fully implemented and working ✅**
|
**SSH-based rebuild system fully implemented and working ✅**
|
||||||
|
|
||||||
### Current Keyboard Navigation Implementation
|
### Current Simplified Navigation Implementation
|
||||||
|
|
||||||
**Navigation Controls:**
|
**Navigation Controls:**
|
||||||
- **Tab**: Switch between hosts (cmbox, srv01, srv02, steambox, etc.)
|
- **Tab**: Switch between hosts (cmbox, srv01, srv02, steambox, etc.)
|
||||||
- **Shift+Tab**: Cycle through visible panels (System → Services → Backup → System)
|
- **↑↓ or j/k**: Move service selection cursor (always works)
|
||||||
- **Up/Down (System/Backup)**: Scroll through panel content
|
|
||||||
- **Up/Down (Services)**: Move service selection cursor between parent services
|
|
||||||
- **q**: Quit dashboard
|
- **q**: Quit dashboard
|
||||||
|
|
||||||
**Panel-Specific Features:**
|
**Service Control:**
|
||||||
- **System Panel**: Scrollable content with CPU, RAM, Storage details
|
- **s**: Start selected service
|
||||||
- **Services Panel**: Service selection cursor for parent services only (docker, nginx, postgresql, etc.)
|
- **S**: Stop selected service
|
||||||
- **Backup Panel**: Scrollable repository list with proper overflow handling
|
- **R**: Rebuild current host (works from any context)
|
||||||
|
|
||||||
**Visual Feedback:**
|
**Visual Features:**
|
||||||
- **Focused Panel**: Blue border and title highlighting
|
- **Service Selection**: Always visible blue background highlighting current service
|
||||||
- **Service Selection**: Blue background with preserved status icon colors (green ● for active, red ● for failed)
|
- **Status Icons**: Green ● (active), Yellow ◐ (inactive), Red ◯ (failed), ? (unknown)
|
||||||
- **Focus-Aware Selection**: Selection highlighting only visible when Services panel focused
|
- **Transitional Icons**: Blue ↑ (starting), ↓ (stopping), ↻ (restarting) when not selected
|
||||||
- **Dynamic Statusbar**: Context-aware shortcuts based on focused panel
|
- **Transitional Icons**: Dark gray arrows when service is selected (for visibility)
|
||||||
|
- **Uniform Interface**: All panels have consistent appearance (no focus borders)
|
||||||
|
|
||||||
### Remote Command Execution - WORKING ✅
|
### Service Discovery and Display - WORKING ✅
|
||||||
|
|
||||||
**All Issues Resolved (as of 2025-10-24):**
|
**All Issues Resolved (as of 2025-10-28):**
|
||||||
- ✅ **ZMQ Command Protocol**: Extended with ServiceControl and SystemRebuild variants
|
- ✅ **Complete Service Discovery**: Uses `systemctl list-unit-files` + `list-units --all` for comprehensive service detection
|
||||||
- ✅ **Agent Handlers**: systemctl and nixos-rebuild execution with maintenance mode
|
- ✅ **All Services Visible**: Shows all configured services regardless of current state (active/inactive)
|
||||||
- ✅ **Dashboard Integration**: Keyboard shortcuts execute commands
|
- ✅ **Proper Status Display**: Active services show green ●, inactive show yellow ◐, failed show red ◯
|
||||||
- ✅ **Service Control**: Fixed toggle logic - replaced with separate 's' (start) and 'S' (stop)
|
- ✅ **Transitional Icons**: Visual feedback during service operations with proper color handling
|
||||||
- ✅ **System Rebuild**: Fixed permission issues and sandboxing problems
|
- ✅ **Simplified Navigation**: Removed panel complexity, direct service control always available
|
||||||
- ✅ **Git Clone Approach**: Implemented for nixos-rebuild to avoid directory permissions
|
- ✅ **Service Control**: Start (s) and Stop (S) commands work from anywhere
|
||||||
- ✅ **Visual Feedback**: Directional arrows for service status (↑ starting, ↓ stopping, ↻ restarting)
|
- ✅ **System Rebuild**: SSH + tmux popup approach for reliable remote rebuilds
|
||||||
|
|
||||||
### Terminal Popup for Real-time Output - IMPLEMENTED ✅
|
### Terminal Popup for Real-time Output - IMPLEMENTED ✅
|
||||||
|
|
||||||
|
|||||||
6
Cargo.lock
generated
6
Cargo.lock
generated
@@ -270,7 +270,7 @@ checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cm-dashboard"
|
name = "cm-dashboard"
|
||||||
version = "0.1.32"
|
version = "0.1.33"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"chrono",
|
"chrono",
|
||||||
@@ -291,7 +291,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cm-dashboard-agent"
|
name = "cm-dashboard-agent"
|
||||||
version = "0.1.32"
|
version = "0.1.33"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"async-trait",
|
"async-trait",
|
||||||
@@ -314,7 +314,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cm-dashboard-shared"
|
name = "cm-dashboard-shared"
|
||||||
version = "0.1.32"
|
version = "0.1.33"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"chrono",
|
"chrono",
|
||||||
"serde",
|
"serde",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "cm-dashboard-agent"
|
name = "cm-dashboard-agent"
|
||||||
version = "0.1.33"
|
version = "0.1.34"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "cm-dashboard"
|
name = "cm-dashboard"
|
||||||
version = "0.1.33"
|
version = "0.1.34"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|||||||
@@ -642,12 +642,11 @@ impl TuiApp {
|
|||||||
// Global shortcuts
|
// Global shortcuts
|
||||||
shortcuts.push("Tab: Switch Host".to_string());
|
shortcuts.push("Tab: Switch Host".to_string());
|
||||||
shortcuts.push("↑↓/jk: Select Service".to_string());
|
shortcuts.push("↑↓/jk: Select Service".to_string());
|
||||||
shortcuts.push("R: Rebuild Host".to_string());
|
shortcuts.push("r: Rebuild Host".to_string());
|
||||||
shortcuts.push("S: Start Service".to_string());
|
shortcuts.push("s/S: Start/Stop Service".to_string());
|
||||||
shortcuts.push("Shift+S: Stop Service".to_string());
|
|
||||||
|
|
||||||
// Always show quit
|
// Always show quit
|
||||||
shortcuts.push("Q: Quit".to_string());
|
shortcuts.push("q: Quit".to_string());
|
||||||
|
|
||||||
shortcuts
|
shortcuts
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -579,14 +579,16 @@ impl ServicesWidget {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// Apply selection highlighting to parent services only, preserving status icon color
|
// Apply selection highlighting to parent services only, making icons background color when selected
|
||||||
// Only show selection when Services panel is focused
|
// Only show selection when Services panel is focused
|
||||||
// Show selection highlighting even when transitional icons are present
|
// Show selection highlighting even when transitional icons are present
|
||||||
if is_selected && !*is_sub && is_focused {
|
if is_selected && !*is_sub && is_focused {
|
||||||
for (i, span) in spans.iter_mut().enumerate() {
|
for (i, span) in spans.iter_mut().enumerate() {
|
||||||
if i == 0 {
|
if i == 0 {
|
||||||
// First span is the status icon - preserve its color
|
// First span is the status icon - use background color for visibility against blue selection
|
||||||
span.style = span.style.bg(Theme::highlight());
|
span.style = span.style
|
||||||
|
.bg(Theme::highlight())
|
||||||
|
.fg(Theme::background());
|
||||||
} else {
|
} else {
|
||||||
// Other spans (text) get full selection highlighting
|
// Other spans (text) get full selection highlighting
|
||||||
span.style = span.style
|
span.style = span.style
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "cm-dashboard-shared"
|
name = "cm-dashboard-shared"
|
||||||
version = "0.1.33"
|
version = "0.1.34"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|||||||
Reference in New Issue
Block a user