Tools nuevas (wrappers finos sobre funciones del registry functions/browser):
- page_collect_console -> cdp_collect_console (console + exceptions + log, snapshot)
- page_pdf -> cdp_print_pdf (Page.printToPDF a archivo)
- dom_select_option -> cdp_select_option (<select> por value/texto + input/change)
- dom_set_files -> cdp_set_file_input (subir archivos a <input type=file>)
browser_list ahora enriquece cada master con CDP con pages (nº de page targets),
active_title y active_url via GET /json (best-effort: si el puerto no responde
los campos quedan a cero y el listado de procesos no falla).
Total tools: 46 -> 50.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
browser_list ahora reporta si cada Chromium master se lanzo en modo headless,
detectado por el flag de arranque (--headless / --headless=new / --headless=old)
leido del cmdline. Una sola llamada devuelve navegadores activos + CDP + headless,
sin tener que conectar a cada pagina para fingerprintear.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
/proc/<pid>/cmdline normalmente separa argv por NUL, pero Chromium reescribe
su titulo de proceso in-place colapsando la region de argv a una sola cadena
separada por espacios. readProcCmdline asumia solo NUL, asi que para los
masters de Chromium devolvia un unico argv[0] gigante: isChromiumExe y el
prefijo --user-data-dir= fallaban y browser_list devolvia [] aunque hubiera
navegadores vivos.
Extrae parseCmdline (pura, testeable) con fallback a split por espacios cuando
no hay NUL. Test cubre ambos formatos + regresion de deteccion de master.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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.
Three MCP tools to manage the user's Chromium instances by profile, distinct
from browser_launch's isolated automation Chrome:
- browser_list: enumerate running Chromium master processes by scanning
/proc/*/cmdline (has --user-data-dir, no --type=). Returns pid, profile,
user_data_dir, cdp_port, has_cdp as a JSON array.
- browser_launch_profile: launch a concrete profile using the REAL binary
/usr/lib/chromium/chromium (bypassing the /usr/bin/chromium wrapper). No CDP
by default so Google keeps the session for human profiles; cdp=true adds
--remote-debugging-port + --remote-allow-origins=*. Detects DISPLAY/XAUTHORITY
from the XFCE session and launches decoupled via setsid.
- browser_close: locate a master by profile/cdp_port/pid, SIGTERM with a 10s
wait, then SIGKILL as a last resort.
Per-profile instances are NOT registered in the connection pool: they are
user-facing and survive the MCP dying; cleanup is explicit via browser_close.
Unit tests for cmdline master detection, flag parsing, and close-target
matching. Bumps version 0.6.0 -> 0.7.0 (42 -> 45 tools).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>