a03675113a
- .claude/agents/fn-orquestador/SKILL.md - .claude/commands/fn_claude.md - .claude/rules/INDEX.md - .claude/rules/cpp_apps.md - .claude/rules/ids_naming.md - CHANGELOG.md - apps/dag_engine/README.md - apps/dag_engine/api.go - apps/dag_engine/dags_migrated/example.yaml - apps/dag_engine/dags_migrated/example_lineage_tracking.yaml - ... Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
59 lines
2.8 KiB
Markdown
59 lines
2.8 KiB
Markdown
# navegator — Automatización de browser via CDP + AX tree + LLM
|
|
|
|
Grupo de funciones para inspeccionar y automatizar Chrome/Chromium via el protocolo CDP (Chrome DevTools Protocol), procesar árboles de accesibilidad (AX tree) y orquestar llamadas a LLMs desde scripts Python.
|
|
|
|
> Nota: Este grupo crece con issue 0098. Las funciones actuales cubren obtención y procesamiento del AX tree. Las siguientes iteraciones añadirán interacción (click, type, navigate) y pipelines completos de agente web.
|
|
|
|
## Funciones
|
|
|
|
| ID | Firma corta | Qué hace |
|
|
|---|---|---|
|
|
| `claude_cli_prompt_py_infra` | `claude_cli_prompt(prompt, timeout_s, model, max_chars_response, extra_args) -> str` | Invoca `claude -p` via subprocess y devuelve la respuesta como string |
|
|
| `trim_ax_tree_py_core` | `trim_ax_tree(nodes) -> list[dict]` | Compacta AXNode CDP descartando nodos irrelevantes (ignored, generic vacíos, StaticText vacíos) |
|
|
| `chunk_ax_tree_py_core` | `chunk_ax_tree(nodes, max_chars) -> list[list[dict]]` | Divide AX tree en chunks con path-from-root como contexto para LLMs |
|
|
| `cdp_get_ax_tree_py_pipelines` | `cdp_get_ax_tree(debug_port, tab_id, depth) -> list[dict]` | Obtiene AX tree completo de un tab Chrome via CDP WebSocket |
|
|
|
|
## Ejemplo canónico end-to-end
|
|
|
|
```python
|
|
import json, urllib.request
|
|
from pipelines.cdp_get_ax_tree import cdp_get_ax_tree
|
|
from core.trim_ax_tree import trim_ax_tree
|
|
from core.chunk_ax_tree import chunk_ax_tree
|
|
from infra.claude_cli_prompt import claude_cli_prompt
|
|
|
|
# 1. Chrome debe correr con --remote-debugging-port=9222
|
|
# Listar tabs
|
|
with urllib.request.urlopen("http://127.0.0.1:9222/json/list") as r:
|
|
tabs = json.loads(r.read())
|
|
tab_id = tabs[0]["id"]
|
|
|
|
# 2. Obtener, limpiar y chunkear el AX tree
|
|
nodes = cdp_get_ax_tree(debug_port=9222, tab_id=tab_id)
|
|
trimmed = trim_ax_tree(nodes)
|
|
chunks = chunk_ax_tree(trimmed, max_chars=25000)
|
|
|
|
# 3. Procesar cada chunk con Claude
|
|
for i, chunk in enumerate(chunks):
|
|
chunk_json = json.dumps(chunk, ensure_ascii=False)
|
|
prompt = f"Extrae todos los botones y enlaces interactivos de este AX tree:\n{chunk_json}"
|
|
respuesta = claude_cli_prompt(prompt, timeout_s=90)
|
|
print(f"--- Chunk {i} ---")
|
|
print(respuesta)
|
|
```
|
|
|
|
## Fronteras
|
|
|
|
Este grupo NO cubre:
|
|
- Interacción directa con el DOM via CDP (clicks, typing, navegación) — ver funciones `cdp_*_go_browser` en Go.
|
|
- Automatización Playwright — ver grupo `playwright`.
|
|
- Captura de screenshots, HAR recording — ver `cdp_screenshot_go_browser`, `cdp_har_record_go_browser`.
|
|
- Análisis NLP de texto extraído — ver grupo `nlp`.
|
|
|
|
## Prerequisitos
|
|
|
|
- Chrome/Chromium lanzado con `--remote-debugging-port=<port>`.
|
|
- En WSL2: usar `chrome.exe` Windows con `--remote-debugging-address=0.0.0.0`.
|
|
- `websocket-client` en el venv Python (`pip install websocket-client`).
|
|
- `claude` CLI instalado y autenticado para `claude_cli_prompt`.
|