8742cb25be
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4.0 KiB
4.0 KiB
id, name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, tested, tests, test_file_path, file_path, params, output
| id | name | kind | lang | domain | version | purity | signature | description | tags | uses_functions | uses_types | returns | returns_optional | error_type | imports | tested | tests | test_file_path | file_path | params | output | |||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| cdp_get_ax_outline_go_browser | cdp_get_ax_outline | function | go | browser | 1.0.0 | impure | func CdpGetAXOutline(c *CDPConn, frameID string, maxChars int) (string, error) | Percibe la pagina (o un iframe via frameID) como outline accesible indentado y accionable reusando la conexion CDP viva del pool. Envia Accessibility.enable + getFullAXTree, poda el arbol y lo renderiza con #ref=backendDOMNodeId en roles accionables. Replica al caracter el pipeline Python cdp_get_ax_tree -> trim_ax_tree -> render_ax_outline pero nativo en Go, sin subprocess ni venv. |
|
false | error_go_core | true |
|
functions/browser/cdp_get_ax_outline_test.go | functions/browser/cdp_get_ax_outline.go |
|
Outline accesible multi-linea: 2 espacios de indentacion por nivel, 'role "name"' por nodo, ' = '''value'''' en inputs, y marcador ' #ref=<backendDOMNodeId>' en roles accionables. Cadena vacia si no hay nodos utiles. |
Ejemplo
// c es una *CDPConn viva del pool (la misma que usa el browser_mcp).
// Percibir la pagina entera, truncando a 8000 chars:
outline, err := CdpGetAXOutline(c, "", 8000)
if err != nil {
log.Fatal(err)
}
fmt.Println(outline)
// WebArea "Example Domain"
// heading "Example Domain"
// link "More information..." #ref=128
// Percibir DENTRO de un iframe concreto (frameId del frame tree):
inner, err := CdpGetAXOutline(c, "F1A2B3C4D5E6", 0) // 0 = sin limite
Cuando usarla
- Cuando necesites percibir la pagina (o un iframe) como outline accionable para que un LLM decida sobre
#refsin reventar el contexto. - Reemplaza el subprocess Python
fn run cdp_perceive_outline: es nativo Go, reusa la conexion CDP viva del pool y no arranca el venv en cada percepcion (mas rapido y sin dependencia de runtimefn/venv). - Pasa
frameIDcuando el contenido objetivo vive dentro de un iframe; dejaframeID=""para la pagina top-level. - El
#refque devuelve (backendDOMNodeId) se pasa luego acdp_click_ref/cdp_type_ref/cdp_hover_ref.
Gotchas
- Impura: requiere un Chrome vivo con CDP accesible y el dominio
Accessibilitydisponible.Accessibility.enablese envia siempre (idempotente). - Conexion nula devuelve error inmediato; no intenta reconectar.
- OOPIF cross-origin: un iframe de distinto origen corre en un target (proceso) separado. Si
Accessibility.getFullAXTreecon eseframeIdno devuelve nodos, probablemente necesites una*CDPConnadjunta al target del frame, no elframeIddesde el target padre. #ref= backendDOMNodeId: estable mientras el nodo DOM viva, pero si la pagina re-renderiza ese subarbol el ref puede invalidarse. Percibe de nuevo tras una mutacion grande antes de actuar.- El outline omite roles
none/presentation/ignoredy nodosignored=true, y eleva sus hijos al nivel actual; un arbol con todo ignorado devuelve cadena vacia. - Guard de profundidad 60 y guard de ciclo: arboles patologicos no cuelgan, pero pueden quedar recortados a partir de la profundidad 60.