| pty_capture_stream |
function |
go |
infra |
1.0.0 |
impure |
func PTYCaptureStream(ctx context.Context, name string, args []string, warmup time.Duration, inputs []string, stepDelay, snapshotInterval, idle, maxDur time.Duration) (<-chan string, error) |
Lanza un comando dentro de un pseudo-terminal (PTY) y emite snapshots acumulativos del buffer de output a través de un canal, en intervalos regulares. Cada snapshot es el contenido RAW completo del PTY hasta ese instante (ANSI incluido). Permite hacer streaming del render de una TUI mientras sigue generando, sin esperar al final. |
| terminal |
| pty |
| tui |
| capture |
| automation |
| streaming |
| terminal-capture |
|
|
|
|
false |
error_go_core |
| context |
| time |
| github.com/creack/pty |
|
true |
| snapshots crecientes con pausas |
| snapshot final siempre presente |
| timeout duro con sleep 10 |
|
functions/infra/pty_capture_stream_test.go |
functions/infra/pty_capture_stream.go |
| name |
desc |
| ctx |
Contexto de cancelación. Si se cancela, la goroutine interna aborta, emite el snapshot final y cierra el canal. |
|
| name |
desc |
| name |
Nombre o path del ejecutable a lanzar (debe existir en PATH o ser un path absoluto). |
|
| name |
desc |
| args |
Argumentos posicionales para el ejecutable. Puede ser nil o vacío. |
|
| name |
desc |
| warmup |
Tiempo que se espera después de arrancar el proceso antes de enviar inputs. Permite que la TUI inicialice su render. Típico: 500ms–4s para CLIs lentas como claude. |
|
| name |
desc |
| inputs |
Lista de strings a escribir al PTY en secuencia. Incluir '\r' al final para simular Enter. Puede ser nil si solo se quiere observar sin interactuar. |
|
| name |
desc |
| stepDelay |
Espera entre cada input enviado. Permite que la TUI procese y renderice la respuesta de cada paso antes de enviar el siguiente. |
|
| name |
desc |
| snapshotInterval |
Cada cuánto tiempo se emite un snapshot del buffer acumulado al canal. Controla la frecuencia de actualización del streaming. Valores recomendados: 100ms–300ms. Por debajo de 50ms genera mucho ruido y CPU innecesario. |
|
| name |
desc |
| idle |
Tiempo sin nuevos bytes en el PTY que se considera 'respuesta terminada'. Cuando el terminal lleva este tiempo sin actividad, la captura finaliza. Típico: 2s–4s para claude, 500ms para CLIs rápidas. |
|
| name |
desc |
| maxDur |
Timeout duro desde el inicio de la función. Garantiza que el canal se cierra aunque la TUI siga emitiendo (spinners, relojes, progress bars). Típico: 60s–120s para prompts de claude. |
|
|
Canal de strings (<-chan string). Cada string es el output RAW acumulado del terminal desde el arranque hasta ese instante, con secuencias ANSI intactas (no deltas). El canal se cierra cuando termina la captura; el último valor enviado antes del cierre es siempre el snapshot final completo. Error si pty.Start falla al arrancar el proceso. |