Plan de desarrollo ein-cli
Descripción general del proyecto
ein-cli es una herramienta de interfaz dual que proporciona comandos CLI para automatización/scripting y una TUI interactiva para uso exploratorio. La herramienta se centra en realizar solicitudes de API REST con una interfaz fácil de usar.
Concepto central
- Modo CLI: ejecución directa de comandos con indicadores (cuando se proporcionan argumentos)
- Modo TUI: interfaz interactiva basada en menús (predeterminada cuando no se proporcionan indicadores)
- Núcleo compartido: ambas interfaces utilizan la misma lógica empresarial y cliente API
Pila de tecnología
Componentes de la pila de encantos
- Cobra: marco CLI para comandos y banderas
- Bubbletea: marco TUI (patrón Modelo-Vista-Actualización)
- Burbujas: componentes TUI prediseñados (listas, entradas, controles giratorios)
- Brillo de labios: Estilismo y diseño
- Eh: formularios y entradas avanzados
Bibliotecas adicionales
- Resty o net/http: cliente API REST
- Viper: Gestión de configuración
- Logrus/Zerolog: Registro
Estructura del proyecto
ein-cli/
├── go.mod
├── go.sum
├── main.go # Entry point - determines CLI vs TUI
├── README.md
├── .gitignore
│
├── cmd/ # CLI commands (Cobra)
│ ├── root.go # Root command setup
│ ├── config.go # Config commands
│ ├── api.go # API-related commands
│ └── version.go # Version command
│
├── internal/
│ ├── config/
│ │ ├── config.go # Configuration structure
│ │ └── loader.go # Config loading/saving
│ │
│ ├── client/
│ │ ├── client.go # HTTP client wrapper
│ │ ├── auth.go # Authentication handling
│ │ ├── endpoints.go # API endpoint definitions
│ │ └── requests.go # Request/response handling
│ │
│ ├── core/
│ │ ├── service.go # Business logic service
│ │ └── validator.go # Input validation
│ │
│ └── models/
│ ├── api.go # API request/response models
│ ├── config.go # Configuration models
│ └── errors.go # Error types
│
├── tui/
│ ├── app.go # Main TUI application
│ ├── router.go # Screen navigation router
│ ├── keys.go # Global key bindings
│ │
│ ├── components/
│ │ ├── menu.go # Menu component
│ │ ├── form.go # Form component
│ │ ├── loader.go # Loading spinner
│ │ ├── confirm.go # Confirmation dialog
│ │ └── result.go # Result display
│ │
│ ├── screens/
│ │ ├── main_menu.go # Main menu screen
│ │ ├── settings.go # Settings screen
│ │ ├── api_form.go # API request form
│ │ ├── results.go # Results viewer
│ │ └── help.go # Help screen
│ │
│ └── styles/
│ ├── theme.go # Color themes
│ ├── layout.go # Layout styles
│ └── components.go # Component styles
│
└── pkg/
└── utils/
├── format.go # Data formatting
└── helpers.go # Utility functions
Diseño de arquitectura
Lógica del punto de entrada
package main
import (
"os"
"ein-cli/cmd"
"ein-cli/tui"
)
func main() {
// If arguments provided, use CLI mode
if len(os.Args) > 1 {
cmd.Execute()
return
}
// Otherwise, launch TUI
app := tui.NewApp()
if err := app.Run(); err != nil {
os.Exit(1)
}
}Capa CLI (comandos Cobra)
// cmd/root.go
var rootCmd = &cobra.Command{
Use: "ein",
Short: "Ein CLI tool",
Long: "A CLI tool with TUI interface for API interactions",
}
var apiCmd = &cobra.Command{
Use: "api [endpoint]",
Short: "Make API requests",
Run: func(cmd *cobra.Command, args []string) {
// Use shared service layer
service := core.NewService(client.New())
result, err := service.MakeRequest(endpoint, data)
// Handle result
},
}Capa TUI (Bubbletea)
// tui/app.go
type App struct {
program *tea.Program
router *Router
service *core.Service
config *config.Config
}
func (a *App) Run() error {
model := NewMainModel(a.service, a.config)
a.program = tea.NewProgram(model, tea.WithAltScreen())
_, err := a.program.Run()
return err
}Enrutador de navegación
// tui/router.go
type Screen int
const (
MainMenu Screen = iota
APIForm
Settings
Results
Help
)
type Router struct {
current Screen
previous []Screen
components map[Screen]tea.Model
}
func (r *Router) Navigate(screen Screen) tea.Cmd {
r.previous = append(r.previous, r.current)
r.current = screen
return r.components[screen].Init()
}Diseño de flujo de pantalla TUI
┌─────────────────┐
│ Main Menu │
├─────────────────┤
│ > API Requests │ ──┐
│ Settings │ │
│ Help │ │
│ Exit │ │
└─────────────────┘ │
│
▼
┌─────────────────┐
│ API Form │
├─────────────────┤
│ Endpoint: _____ │
│ Method: [GET▼] │
│ Headers: │
│ ┌─────────────┐ │
│ │ Key: Value │ │
│ └─────────────┘ │
│ Body: │
│ ┌─────────────┐ │
│ │ JSON data │ │
│ └─────────────┘ │
│ [Submit] [Back] │
└─────────────────┘
│
▼
┌─────────────────┐
│ Loading... │
│ ⠋ │
└─────────────────┘
│
▼
┌─────────────────┐
│ Results │
├─────────────────┤
│ Status: 200 OK │
│ Time: 245ms │
│ │
│ Response: │
│ ┌─────────────┐ │
│ │ { │ │
│ │ "data":.. │ │
│ │ } │ │
│ └─────────────┘ │
│ [Back] [Save] │
└─────────────────┘
Funciones clave para implementar
Funciones principales
- Formularios dinámicos: use Huh para entradas de formularios complejos
- Historial de solicitudes: almacena y reproduce solicitudes anteriores
- Gestión de configuración: guardar configuraciones del servidor, tokens de autenticación
- Formato de respuesta: impresión JSON bonita, resaltado de sintaxis
- Manejo de errores: visualización elegante del error en TUI
Funciones de experiencia de usuario
- Navegación con el teclado: atajos similares a los de Vim
- Temas: Compatibilidad con el modo claro/oscuro
- Sistema de ayuda: pantallas de ayuda contextuales
- Plantillas de solicitud: plantillas de solicitud preconfiguradas
- Exportar/Importar: guardar y cargar colecciones de solicitudes
Funciones avanzadas
- Autenticación: compatibilidad con varios métodos de autenticación (portador, básico, clave API)
- Variables de entorno: soporte para sustitución de variables
- Validación de respuesta: validación de esquema para respuestas
- Encadenamiento de solicitudes: utilice datos de respuesta en solicitudes posteriores
Fases de desarrollo
Fase 1: Fundación (Semana 1-2)
Objetivo: Estructura básica y navegación.
- Configurar la estructura del proyecto
- Inicializa go.mod con dependencias
- Implementar comandos CLI básicos con Cobra
- Crea una navegación TUI sencilla con Bubbletea
- Sistema básico de enrutamiento de pantalla
Fase 2: Funcionalidad principal (semana 3-4)
Objetivo: cliente HTTP y solicitudes API básicas
- Implementación de cliente HTTP [ ] con autenticación
- Formularios de solicitud de API básica [ ] usando Huh
- Visualización de respuesta con formato JSON
- Manejo de errores para solicitudes de red
- Compatibilidad con archivos de configuración [ ]
Fase 3: UX mejorada (semana 5-6)
Objetivo: Experiencia de usuario mejorada- [ ] Historial de solicitudes y persistencia
- Validación de formulario avanzada
- Resaltado de sintaxis de respuesta [ ]
- Estados de carga y controles giratorios
- Atajos de teclado y sistema de ayuda
Fase 4: Funciones avanzadas (semana 7-8)
Objetivo: funciones de usuario avanzado
- Solicitar plantillas y colecciones
- Soporte de variables de entorno [ ]
- Funcionalidad de exportación/importación
- Capacidades de encadenamiento de respuesta [ ]
- Métodos de autenticación avanzados
Fase 5: polaco (semana 9-10)
Objetivo: Preparación para la producción
- Estilo y temas (modo claro/oscuro)
- Sistema de ayuda integral
- Error al manejar el refinamiento
- Optimización del rendimiento
- Documentación y ejemplos
Consideraciones técnicas
Gestión estatal
- Utilice el patrón Modelo-Vista-Actualización de Bubbletea
- Estado centralizado en el modelo de aplicación principal.
- Estado específico de la pantalla en modelos de pantalla individuales
Persistencia de datos
- Archivos de configuración en formato JSON/YAML
- Historial de solicitudes almacenado localmente
- Soporte para múltiples perfiles de configuración.
Manejo de errores
- Degradación elegante para problemas de red.
- Mensajes de error fáciles de usar en TUI
- Propagación adecuada de errores en modo CLI
Rendimiento
- Carga diferida de pantallas y componentes.
- Representación eficiente con mínimos redibujados
- Procesamiento en segundo plano para solicitudes de larga duración.
Estrategia de prueba
- Pruebas unitarias para lógica de negocios.
- Pruebas de integración para cliente API.
- Pruebas de componentes TUI cuando sea posible.
- Prueba de comando CLI
Métricas de éxito
Usabilidad
- Flujo de navegación intuitivo
- Tiempos de respuesta rápidos (<100 ms para interacciones de UI)
- Borrar mensajes de error y comentarios.
Funcionalidad
- Soporte para todos los métodos HTTP principales
- Manejo adecuado de varios tipos de contenido.
- Gestión de configuración confiable
Experiencia del desarrollador
- Estructura de código limpia y mantenible
- Documentación completa
- Fácil de ampliar con nuevas funciones
Mejoras futuras
Características potenciales
- Soporte GraphQL
- Conexiones WebSocket
- Sistema de complementos para autenticación personalizada
- Funciones de colaboración en equipo
- Integración de documentación API
- Funcionalidad de servidor simulado
Optimizaciones de rendimiento
- Solicitar almacenamiento en caché
- Ejecución de solicitudes simultáneas
- Transmisión de respuesta para grandes cargas útiles
Este plan proporciona una hoja de ruta integral para desarrollar ein-cli con interfaces CLI y TUI, lo que garantiza una herramienta sólida y fácil de usar para las interacciones API.