Saltar al contenido principal

Módulo: CLI

El CLI proporciona una interfaz de usuario en terminal (TUI) para gestionar y monitorear el daemon de Almena.

Visión General

PropiedadValor
Nombre del cratealmena-cli
LenguajeRust 2021
Versión2026.3.5
LicenciaApache-2.0 OR MIT
Repositorioalmena-network/cli

Estructura del Código

cli/
├── src/
│ ├── main.rs # Punto de entrada, args CLI
│ ├── tui.rs # Loop principal TUI con ratatui
│ ├── daemon.rs # Cliente gRPC al daemon
│ ├── daemon_process.rs # Lanzamiento/gestión de procesos
│ ├── theme.rs # Colores del sistema de diseño
│ └── path.rs # Directorios de datos por plataforma
├── proto/
│ └── almena/daemon/v1/
│ └── service.proto # Definición de servicio gRPC (copiado del daemon)
├── build.rs # Compilación proto con tonic-build
├── Cargo.toml # Dependencias
└── Taskfile.yml # Orquestación de tareas

Dependencias Principales

DependenciaVersiónPropósito
ratatui0.29Framework de UI en terminal
crossterm0.28Entrada/salida de terminal
tonic0.12Cliente gRPC
prost0.13Serialización Protocol Buffer
tokio1Runtime asíncrono
clap4Parseo de argumentos CLI
anyhow1Manejo de errores

Funcionalidades Implementadas

Interfaz TUI

El TUI ejecuta un loop de eventos asíncrono con polling de 100ms:

Comandos de Teclado:

TeclaAcción
sIniciar el daemon
xDetener el daemon
pHacer ping al daemon
q / EscSalir del CLI

Diseño de UI:

  1. Header — Tagline e indicador de estado del daemon
  2. Tarjeta de Estado — Punto de color mostrando estado del daemon:
    • Rojo = Detenido
    • Verde = Ejecutándose
    • Amarillo = Verificando
  3. Área Principal — Comandos disponibles, dirección del daemon, última salida de comando
  4. Footer — Atajos de teclado

Monitoreo de Estado del Daemon

Una tarea en segundo plano verifica el estado del daemon cada 2 segundos intentando un ping gRPC. El indicador de estado se actualiza automáticamente.

Cliente gRPC

El módulo daemon.rs proporciona:

pub async fn is_running(addr: &str) -> bool  // Verificación de ping
pub async fn ping(addr: &str) -> String // Ping con mensaje de respuesta

Gestión del Proceso Daemon

Misma gestión dual como la app de escritorio:

ModoIniciarDetener
DesarrolloLanza binario desde ALMENAD_DIRMata proceso hijo
macOSlaunchctl load ...plistlaunchctl unload ...plist
Linuxsystemctl --user start almenadsystemctl --user stop almenad
Windowssc start AlmenaDsc stop AlmenaD

Tema

El CLI usa un tema de colores consistente con el sistema de diseño de la plataforma:

ColorHexUso
Primario#FB923CElementos activos, resaltados
Secundario#8B5CF6Acentos
Texto#fafafaTexto principal
Atenuado#a3a3a3Etiquetas, indicaciones
ÉxitoVerdeEstado ejecutándose
ErrorRojoEstado detenido
AdvertenciaAmarilloEstado verificando

Desarrollo

# Instalar dependencias
task install

# Ejecutar en modo desarrollo
task dev

# Compilar para release
task build

# Verificar compilación
task check

Argumentos CLI

FlagPor defectoDescripción
--daemon-addrhttp://127.0.0.1:50051Dirección gRPC del daemon
--versionImprimir versión y salir

Flujo de Proto

Después de cambios en el proto del daemon:

task proto:copy     # Copiar proto del daemon
task proto:client # Recompilar cliente gRPC (incluye proto:copy)