Añade un flag de velocidad por sesión para que el manejo del navegador sea muy rápido por defecto, conservando un modo sigiloso para cuando haya detección anti-bot fuerte.
- Nueva tool browser_set_mode (tools_session.go): fija el modo de la sesión por puerto en el pool. 'auto' (default del MCP) = rápido; 'human' = sigiloso anti-detección; también admite 'fast'/'instant'. Cada tool de acción puede overridearlo con su arg mode.
- pool.go: estado de modo por puerto (modes map + setMode/getMode), limpiado en drop y closeAll.
- tools_dom.go: effectiveMode resuelve el modo (arg de la llamada > modo de sesión > 'auto'). settleForMode reemplaza el sleep ciego fijo de 400ms tras cada acción mutante: 60ms en auto/fast, aleatorio 250-650ms en human (ritmo no-máquina), 0 en instant. dom_type_ref gana arg mode y rutea a CdpTypeRefFast (insertText, un round-trip) en auto o CdpTypeRef (carácter a carácter) en human. Descripciones del arg mode actualizadas (el default ya no es human).
- tools_lifecycle.go: browser_launch_profile reemplaza el sleep(1s) ciego por un poll del puerto CDP (waitCDPPort).
- .gitignore: ignora registry.db/operations.db (no deben vivir en la app; regla db_locations).
Doctrina invertida respecto a la anterior 'humanizado siempre': ahora rápido por defecto, sigiloso bajo demanda.
Capacidades nuevas y cambios (40 -> 42 tools):
- page_perceive ahora se genera de forma NATIVA en Go sobre la conexion CDP
viva del pool (cdp_get_ax_outline_go_browser). Elimina el subprocess
`fn run cdp_perceive_outline` (Python), el venv y la dependencia del binario
`fn` en runtime (se borra resolveRoot/exec.Command). Respeta tab_select.
- page_perceive acepta frame_id para percibir DENTRO de un iframe. El campo
tab_id queda obsoleto (se ignora; usar tab_select) pero se conserva por
compatibilidad.
- frame_get_text (nueva, lectura): innerText de un iframe via
cdp_get_text_in_frame_go_browser. Activa tambien bajo --read-only.
- dom_click_xy (nueva, MUTA): click humanizado por coordenadas absolutas via
cdp_click_xy_human_go_browser, con mode human/fast/instant y auto-observe.
Fallback para actuar sobre lo que el LLM ve en page_screenshot.
- page_screenshot devuelve la imagen como image content
(cdp_screenshot_bytes_go_browser + mcp.NewToolResultImage) para que el LLM
vea los pixeles; path pasa a ser opcional (si se da, ademas guarda a disco).
- Auto-observe de las tools *_ref sube su truncado de 4000 a 8000 chars.
- Fix de seguridad documental: todas las descripciones del parametro port que
decian "Default 9222" (navegador diario del usuario) corregidas a
"Default 9333" (Chrome aislado del MCP). El codigo ya usaba 9333; la doc era
falsa y podia inducir al modelo a tocar pestanas de banca/correo.
uses_functions del app.md: +cdp_get_ax_outline, +cdp_get_text_in_frame,
+cdp_screenshot_bytes; -cdp_perceive_outline_py_pipelines.
Verificacion: go build OK, go test OK (4 unit pass, 3 e2e skip gated BMCP_E2E=1),
go vet OK, gofmt limpio, sin "Default 9222" en el codigo.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
dom_find_ref_by_text usa la nueva CdpFindRefByText del registry: encuentra por
texto y devuelve el #ref (backendDOMNodeId) listo para dom_click_ref, sin
selector CSS frágil; reporta count para ambigüedad.
Incluye WIP pre-existente ya estable: dom_click_ref/dom_hover_ref exponen
'mode' (human/fast/instant) vía MouseProfileForMode. Compila + 9 e2e verdes.