@yoltra/devtools-cli

Ver la referencia de la API →

UI de terminal para Yoltra DevTools: inspecciona stores desde la línea de comandos.

@yoltra/devtools-cli es una aplicación de terminal hecha con React + Ink que empotra un hub de DevTools y renderiza una TUI completa para inspeccionar stores de Yoltra. Útil cuando prefieres tener el inspector en una terminal, o en una sesión SSH donde no hay navegador disponible.


#Instalación

bash
npm install -g @yoltra/devtools-cli

O ejecútalo directamente:

bash
npx @yoltra/devtools-cli

#Inicio rápido

bash
# Arranca la CLI (levanta el hub en el puerto 9800 automáticamente)
npx @yoltra/devtools-cli

# Puerto y tamaño de historial personalizados
npx @yoltra/devtools-cli --port 8900 --history-size 2000

# Un hub que exige un token (el panel presenta el mismo)
YOLTRA_DEVTOOLS_TOKEN=s3cret npx @yoltra/devtools-cli

Después, conecta el store de tu app a ese hub. transport: "websocket" lo envía al hub aunque la extensión de navegador esté instalada:

typescript
import { withDevtools } from "@yoltra/devtools-browser-agent";

withDevtools(store, { port: 9800, transport: "websocket" });

La CLI mostrará los stores conectados y los datos de eventos en vivo.


#Características

  • Hub de DevTools empotrado (arranca solo, y se omite si ya hay uno corriendo)
  • Selector de stores por pestañas para varios stores conectados
  • Línea de tiempo de eventos con canal y tipo
  • Explorador interactivo del árbol de estado
  • Viaje en el tiempo por los eventos registrados, para un store que permite replay
  • Panel de suscripciones (reducers, efectos, middleware)
  • Panel de métricas de rendimiento
  • Emisor de eventos para inyectar eventos de prueba
  • Navegación por teclado con gestión del foco

#Paneles

Seis paneles, en este orden. No hay atajos por panel: Tab pasa al siguiente panel y Shift+Tab al anterior.

PanelDescripción
EventsFlujo de eventos en vivo con canal, tipo y marca de tiempo
StateÁrbol de estado plegable con los valores actuales
Time TravelRecorre los eventos registrados; solo para un store que permite replay (allowReplay)
SubscriptionsReducers, efectos y middleware registrados
MetricsConteo de eventos, tasa, tiempo de proceso, profundidad de cola
EmitCompone y emite eventos al store seleccionado
TeclaAcción
Tab / Shift+TabPanel siguiente / anterior
] / [Store conectado siguiente / anterior
← / →En Time Travel: retrocede / avanza un evento
rEn Time Travel: vuelve al estado en vivo
qSalir
EscEn Emit: sale del formulario y reactiva las teclas de arriba
EnterEn Emit, fuera del formulario: vuelve a él

El formulario de Emit toma el teclado al abrir su pestaña. Mientras un campo tiene el foco, toda tecla de arriba se escribe en él, así que un payload como ["a"] o un canal con una q se escriben sin problema.


#Opciones de la CLI

FlagPor defectoDescripción
--port9800Puerto del servidor hub
--history-size1000Máximo de eventos retenidos para clientes tardíos
--tokenningunoToken que el hub exige a cada cliente

--token también puede venir de la variable de entorno YOLTRA_DEVTOOLS_TOKEN, que lo mantiene fuera de la lista de procesos; si están las dos, gana el flag. El hub empotrado exige el token y el panel de terminal lo presenta, así que el mismo valor también permite a la CLI conectarse a un hub que ya corre con él. Pasa el mismo token a cada agente de store (authToken).

Estos símbolos también se exportan (parseArgs, CliArgs, CliArgsError, DEFAULT_PORT, DEFAULT_HISTORY_SIZE, TOKEN_ENV), así que una herramienta que empotre el hub puede reutilizar el mismo contrato de argumentos en vez de volver a deducirlo.


#Cómo funciona

ts
┌──────────────┐     ┌──────────────┐     ┌──────────────┐
│  Tu app      │     │  CLI         │     │  TUI de Ink  │
│  (con        │ WS  │  (hub        │     │  (React +    │
│  withDevtools│────►│  empotrado)  │────►│   Ink)       │
│  )           │     │              │     │              │
└──────────────┘     └──────────────┘     └──────────────┘
  1. La CLI arranca un DevtoolsHub empotrado (o detecta uno existente mediante probe())
  2. La TUI de Ink se conecta al hub como extensión usando los hooks de @yoltra/devtools-ui
  3. El agente del store de tu app se conecta al hub por WebSocket
  4. Eventos, estado y comandos fluyen por el hub en tiempo real

La CLI son dos cosas en un proceso: un hub opcional y un panel. Arranca el hub solo cuando DevtoolsHub.probe no encuentra nada escuchando en el puerto, y la UI de terminal siempre se conecta como una extensión normal mediante HubProvider, así que se comporta igual con su propio hub que con uno que ya estaba corriendo.

Cómo la CLI inicia o reutiliza un hub. La CLI analiza sus argumentos, inicia un hub embebido solo si nadie escucha en el puerto, y renderiza una UI de terminal que se une al hub como extensión normal, mientras el agente del store de la app se conecta al mismo hub.Cómo la CLI inicia o reutiliza un hub. La CLI analiza sus argumentos, inicia un hub embebido solo si nadie escucha en el puerto, y renderiza una UI de terminal que se une al hub como extensión normal, mientras el agente del store de la app se conecta al mismo hub.

#Arquitectura

ArchivoResponsabilidad
index.tsPunto de entrada, parseo de argumentos, ciclo de vida hub
app.tsxComponente raíz de Ink con HubProvider
components/StoreTabs.tsxSelector de stores por pestañas
components/EventTimeline.tsxRegistro de eventos en terminal
components/StateTree.tsxÁrbol de estado plegable
components/SubscriptionsPanel.tsxInventario de suscripciones
components/MetricsDashboard.tsxContadores de rendimiento
components/EventEmitter.tsxFormulario de composición de eventos
components/StatusBar.tsxBarra de estado de la conexión
hooks/useKeyBindings.tsGestión de atajos de teclado
hooks/useFocusManager.tsCiclado del foco entre paneles

#Paquetes relacionados


#Licencia

MIT: De uso libre en proyectos comerciales y de código abierto.

Reportar un problema con esta página