# cdp-cli

Wrapper Go de las funciones del dominio `browser` del registry. Subcomandos one-shot para hablar con una instancia de Chrome via CDP.

Diseñado para coexistir con la navegacion humana: el binario NO mata al browser al salir, conecta, ejecuta y se va. Tu sigues navegando, los enrichers/agentes invocan `cdp-cli` cuando necesitan HTML post-JS, screenshots, evaluar JS, etc.

Issue: [`0038-browser-launch-cdp-control.md`](../issues/0038-browser-launch-cdp-control.md) (fase 0038c).

## Build

```bash
cd projects/osint_graph/apps/graph_explorer/cdp-cli
go build -o cdp-cli .
```

## Funciones del registry envueltas

| Subcomando | Funcion |
|---|---|
| `launch` | `chrome_launch_go_browser` |
| `navigate` | `cdp_navigate_go_browser` (+ `cdp_wait_load` opcional) |
| `get-html` | `cdp_get_html_go_browser` |
| `screenshot` | `cdp_screenshot_go_browser` |
| `evaluate` | `cdp_evaluate_go_browser` |
| `click` | `cdp_click_go_browser` |
| `type` | `cdp_type_text_go_browser` |
| `wait-load` | `cdp_wait_load_go_browser` |
| `wait-element` | `cdp_wait_element_go_browser` |
| `set-cookie` | `cdp_set_cookie_go_browser` |

## Uso tipico

```bash
# 1) Lanzar Chrome con perfil aislado del app
./cdp-cli launch \
  --port 9222 \
  --user-data-dir /home/lucas/fn_registry/projects/osint_graph/apps/graph_explorer/local_files/browser_profiles/default

# Output: pid=12345 port=9222

# 2) Navegar (en otra terminal o desde otro proceso)
./cdp-cli navigate --port 9222 --url https://example.com

# 3) HTML post-JS
./cdp-cli get-html --port 9222 > page.html

# 4) Screenshot pagina completa
./cdp-cli screenshot --port 9222 --out /tmp/shot.png --full-page

# 5) Eval JS
./cdp-cli evaluate --port 9222 --js "document.querySelectorAll('a').length"
```

## Modo "tu y yo a la vez"

Una unica instancia de Chrome aceptando varios clientes CDP simultaneos:

```
                          ┌──────────────────────────────┐
chrome --remote-debugging-port=9222 --user-data-dir=...  │
                          │                              │
                          ▼                              ▼
                  Tu navegando manualmente       cdp-cli get-html
                  (extension issue 0014)         (enricher / agente)
```

Cookies/login son los del profile → tu logueas LinkedIn una vez, los enrichers heredan la sesion.

## Roadmap (fuera de v0)

- `cdp-cli` lee `browser_sessions` de `graph_explorer.db` para resolver `--profile NAME` → puerto (fase 0038d, panel UI).
- Auto-launch si el profile pedido no esta vivo (0038g).
- Enricher `fetch_webpage_browser` que invoca `cdp-cli get-html` en lugar de HTTP plano (0038e).
