729921e16e
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3.3 KiB
3.3 KiB
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. |
|
|
|
|
false |
|
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 |
|
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:
VTRenderreconstruye ú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, aumentarrowsenVTRendero usarclaude -pdirectamente. - tool_use/tool_result best-effort: la TUI colapsa algunos bloques de herramientas. Los
ToolNamey textos detool_resultpueden quedar incompletos si la TUI los trunca con…. - Answer asume captura post-respuesta:
PtyCaptureIdledebe haberse disparado DESPUÉS de que la respuesta terminó de renderizarse (el spinner✻desapareció). Si se captura durante el streaming,Answerpuede estar incompleto.