8357774b86
- CMakeLists.txt - app.md - main.cpp - panels.cpp - appicon.ico - autoextract_panel.cpp - picker_state.cpp - picker_state.h - py_subprocess.cpp - py_subprocess.h - ... Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
7.3 KiB
7.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 | main.cpp | projects/navegator/apps/navegator_dashboard |
|
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 → v2)
| Panel | v0 | v1 (issue 0002) | v1.5 | v2 (issue 0002) | v3 |
|---|---|---|---|---|---|
| Browsers | scan + spawn + kill | + Select row → cross-panel context | grupos (perfiles favoritos) | grupos | drag&drop |
| Tabs | stub | list + Focus/Close/New + filter | — | — | drag&drop entre instancias |
| Tab Detail | stub | placeholder upgrade | HTML preview + screenshot + REPL | — | live mirror (CDP screencast) |
| Network | stub | — | — | DevTools-like: tabla + filtros (Doc/CSS/JS/XHR/Img/Media/Font/WS/Other) + waterfall + detalle (Headers/Payload/Response/Cookies/Timing/WS Messages) + Preserve log + Disable cache + Pause + Export HAR | extract endpoints |
Stack
fn::run_app(cpp/framework/app_base.h) — shell estandar (PATTERNS.md).- ImGui + ImPlot.
- ChromeScanner:
Get-CimInstance Win32_Processinvocado con_popen. Itera ~1 Hz. - ChromeLauncher:
CreateProcessWindows. Argumentos derivados dechrome_launch_go_browser(registry). - CDP HTTP (
cdp_http.{h,cpp}): WinSock raw, GET/json/version,/json, PUT/json/new, GET/json/activate/{id},/json/close/{id}. v1 ✓. - CDP WS (
cdp_ws.{h,cpp}): handshake RFC 6455 + framing manual. Async dispatcher con queue + wait_response. v2 ✓ (parser de mensajes Network.* ennetwork_state). - NetworkSession (
network_state.{h,cpp}): consumeNetwork.requestWillBeSent,responseReceived,dataReceived,loadingFinished/Failed,webSocketCreated/FrameSent/FrameReceived/Closed,Page.frameNavigated,Page.domContentEventFired,Page.loadEventFired. Mantiene log + stats + export HAR 1.2. - JSON parser: crude_json del vendor
imgui-node-editor(dual-license public domain). Linkado como dep estatica para reusar — sin codigo de node-editor en runtime. - HTTP API local: WinSock raw bind 127.0.0.1. v0+v1+v2 endpoints en
local_api.cpp.
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 suapp_settings.ini+navegator_dashboard.dbcon historial de instancias y perfiles favoritos.- Modo CLI:
--api-only --port Npara 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.txthacereturn()antes deadd_imgui_apppara quecpp/build/no falle. - Razon: 90% de la logica usa Win32 (CreateProcess, WMI, taskkill). Linux Chrome es secundario y ya esta cubierto por
cdp-clidirecto.
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.