Files
navegator_dashboard/app.md
T
2026-05-09 18:11:21 +02:00

5.3 KiB

name, lang, domain, description, tags, uses_functions, uses_types, framework, entry_point, dir_path, repo_url, e2e_checks
name lang domain description tags uses_functions uses_types framework entry_point dir_path repo_url e2e_checks
navegator_dashboard cpp tools Cuadro de mandos para gestionar instancias Chrome con remote debugging. Lista navegadores corriendo (visibles + headless), permite lanzar/matar perfiles, inspeccionar pestañas, ejecutar JS, ver peticiones de red. Puente WSL→Windows que centraliza el control que hoy hacemos por scripts dispersos.
imgui
browser
cdp
dashboard
windows
navegator
imgui main.cpp projects/navegator/apps/navegator_dashboard
id cmd timeout_s
build_windows cd /home/lucas/fn_registry && ./fn run compile_cpp_app navegator_dashboard 600
id cmd
exe_present test -f /mnt/c/Users/lucas/Desktop/apps/navegator_dashboard/navegator_dashboard.exe

Proposito

Centralizar el control de todas las instancias de Chrome con --remote-debugging-port que se lancen en el equipo. Sustituye los scripts sueltos start.sh/stop.sh/nav.sh de projects/navegator/scripts/ por una UI unificada + API HTTP local.

Casos de uso:

  • Ver de un vistazo cuantos Chrome estan vivos, en que puerto, con que profile, headless o no.
  • Lanzar/matar perfiles desde la UI sin tocar terminal.
  • Listar pestañas de cada instancia, navegar, cerrar, capturar HTML/screenshot.
  • Inspeccionar peticiones de red en vivo (CDP Network.* events).
  • Exponer todo eso como API HTTP local para que scripts/agentes/cdp-cli/graph_explorer hablen con un solo endpoint en vez de cada uno re-implementar el control.

Arquitectura

┌───────────── navegator_dashboard.exe (Windows) ─────────────┐
│                                                              │
│  UI ImGui (panels)         HTTP API (127.0.0.1:1923X)        │
│  ├── Browsers              GET  /browsers                    │
│  ├── Tabs                  POST /browser/spawn               │
│  ├── Tab Detail            POST /browser/{port}/kill         │
│  └── Network               GET  /browser/{port}/tabs         │
│                            POST /browser/{port}/navigate     │
│  Worker threads:           GET  /browser/{port}/tab/{id}/html│
│  ├── ChromeScanner         GET  /browser/{port}/network/log  │
│  ├── CdpHttpClient         ...                                │
│  └── CdpWsStream                                              │
└──────────────────────────────────────────────────────────────┘
                  ↓ scan/spawn/kill                ↓ /json + ws
┌─────────── chrome.exe N instancias (Windows) ───────────────┐
│  perfil=default port=19222 [visible]                         │
│  perfil=osint port=19223 [visible]                           │
│  perfil=headless_scrape port=19224 [headless]                │
└──────────────────────────────────────────────────────────────┘

Panels (v0 → v1)

Panel v0 v1 v2
Browsers scan + spawn + kill filtro/search grupos (perfiles favoritos)
Tabs stub listar + navigate + close drag&drop entre instancias
Tab Detail stub HTML preview + screenshot + JS REPL live mirror de pestaña (CDP screencast)
Network stub request log + headers + body timeline + waterfall + filtro

Stack

  • fn::run_app (cpp/framework/app_base.h) — shell estandar (PATTERNS.md).
  • ImGui + ImPlot (chart Network).
  • ChromeScanner: Get-CimInstance Win32_Process invocado con _popen. Itera ~1 Hz.
  • ChromeLauncher: CreateProcess Windows. Argumentos derivados de chrome_launch_go_browser (registry).
  • CDP HTTP: GET /json/version, /json por puerto via WinSock raw o WinHttp. v1.
  • CDP WS: handshake RFC 6455 + framing manual (mismo esquema que cdp_conn.go). v1.
  • HTTP API local: cpp-httplib (header-only) bind 127.0.0.1. v0 stub, funcional v1.

Decisiones consciente (cpp_apps.md §9)

  • viewports: true (default) — la app puede arrastrar paneles fuera del main.
  • init_gl_loader: false — solo ImGui, sin OpenGL custom.
  • local_files/: la app guarda su app_settings.ini + navegator_dashboard.db con historial de instancias y perfiles favoritos.
  • Modo CLI: --api-only --port N para correr sin UI (daemon puro). v1+.

Plataforma

  • Windows-only. La app vive en WSL como codigo pero solo se compila como binario Windows (mingw-w64). En Linux, CMakeLists.txt hace return() antes de add_imgui_app para que cpp/build/ no falle.
  • Razon: 90% de la logica usa Win32 (CreateProcess, WMI, taskkill). Linux Chrome es secundario y ya esta cubierto por cdp-cli directo.

Roadmap

  • v0 (este commit): skeleton + Browsers panel funcional + 3 stubs.
  • v1: CDP HTTP/WS in-process + Tabs + Tab Detail + Network panel.
  • v2: HTTP API local + integracion con cdp-cli (cdp-cli puede delegar al dashboard si esta vivo).
  • v3: streaming live de pestañas (CDP Page.startScreencast) — arquitectura ya prevista en issue 0038.