95 lines
5.3 KiB
Markdown
95 lines
5.3 KiB
Markdown
---
|
|
name: navegator_dashboard
|
|
lang: cpp
|
|
domain: tools
|
|
description: "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."
|
|
tags: [imgui, browser, cdp, dashboard, windows, navegator]
|
|
uses_functions: []
|
|
uses_types: []
|
|
framework: "imgui"
|
|
entry_point: "main.cpp"
|
|
dir_path: "projects/navegator/apps/navegator_dashboard"
|
|
repo_url: ""
|
|
|
|
e2e_checks:
|
|
- id: build_windows
|
|
cmd: "cd /home/lucas/fn_registry && ./fn run compile_cpp_app navegator_dashboard"
|
|
timeout_s: 600
|
|
- id: exe_present
|
|
cmd: "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.
|