Files
fn_registry/docs/capabilities/navegator.md
T
egutierrez a03675113a chore: auto-commit (286 archivos)
- .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>
2026-05-16 16:33:22 +02:00

2.8 KiB

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

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.