Files
fn_registry/functions/tui/parse_claude_tui.md
T
2026-06-04 23:44:39 +02:00

3.3 KiB
Raw Blame History

name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, params, output, tested, tests, test_file_path, file_path
name kind lang domain version purity signature description tags uses_functions uses_types returns returns_optional error_type imports params output tested tests test_file_path file_path
parse_claude_tui function go tui 1.0.0 pure func ParseClaudeTUI(screen string) ClaudeTUIParse Parsea el texto renderizado de la pantalla de la TUI de Claude Code y extrae los turnos de la conversación (user, assistant, tool_use, tool_result) y la respuesta final del asistente. Equivalente a lo que devolvería `claude -p` pero operando sobre el render visual.
terminal-capture
claude
tui
parse
conversation
vt_render_go_tui
claude_turn_go_tui
claude_tui_parse_go_tui
claude_tui_parse_go_tui
false
name desc
screen Texto renderizado de la pantalla de la TUI de Claude Code, producido por VTRender(raw, rows, cols). Debe incluir el contenido visible completo: banner opcional, conversación y status bar opcional.
ClaudeTUIParse con los turnos visibles en orden (Role, Text, ToolName) y Answer — la concatenación de los bloques assistant que siguen al último turno user, equivalente al output de `claude -p`. true
golden screen — banner + status bar + single Q&A
multiline assistant response
tool_use + tool_result + final assistant text
multi-turn — answer from last user only
no banner no status bar — minimal screen
determinism — same input produces same output
functions/tui/parse_claude_tui_test.go functions/tui/parse_claude_tui.go

Ejemplo

// Pipeline completo: PTY capture → VTRender → ParseClaudeTUI → usar .Answer
import (
    "fmt"
    "fn-registry/functions/infra"
    "fn-registry/functions/tui"
)

raw, _ := infra.PtyCaptureIdle("claude", []string{}, 40, 220, 8000)
screen := tui.VTRender(raw, 40, 220)
result := tui.ParseClaudeTUI(screen)

fmt.Println(result.Answer) // imprime la respuesta final del asistente

for _, turn := range result.Turns {
    fmt.Printf("[%s] %s\n", turn.Role, turn.Text)
}

Cuando usarla

Cuando captures la TUI de claude con pty_capture_idle_go_infra + vt_render_go_tui y necesites extraer la respuesta como dato estructurado (equivalente a claude -p) en vez de procesar el render visual crudo. Úsala para agentes que lanzan claude como subproceso TUI y quieren leer la respuesta sin requerir modo headless.

Gotchas

  • Heurístico y dependiente del layout de la TUI de Claude Code: si Claude cambia los marcadores (, , , ) o el formato del banner/status-bar, el parser puede dejar de funcionar sin aviso.
  • Solo ve lo visible en el grid: VTRender reconstruye únicamente lo que cabe en el terminal emulado (rows × cols). Respuestas largas que hacen scroll hacia arriba se truncan por arriba — no hay scrollback. Para respuestas largas, aumentar rows en VTRender o usar claude -p directamente.
  • tool_use/tool_result best-effort: la TUI colapsa algunos bloques de herramientas. Los ToolName y textos de tool_result pueden quedar incompletos si la TUI los trunca con .
  • Answer asume captura post-respuesta: PtyCaptureIdle debe haberse disparado DESPUÉS de que la respuesta terminó de renderizarse (el spinner desapareció). Si se captura durante el streaming, Answer puede estar incompleto.