6 Commits

Author SHA1 Message Date
fn-registry agent 8e40a88373 chore: sync from fn-registry agent 2026-06-04 23:44:34 +02:00
agent 16747f7a1e chore: eliminar playground (chat web exploratorio) 2026-06-04 23:39:49 +02:00
agent a4d63cd768 feat(playground): chat web sobre claude_pipe --stream (SSE)
Backend Go (web/server.go) que sirve un chat single-page y, por cada mensaje,
lanza claude_pipe --stream como subprocess y reenvia sus eventos NDJSON
(text_delta + result) al navegador via Server-Sent Events. Frontend vanilla
(web/index.html), sin frameworks ni node_modules.

Prueba el stack completo end to end a traves de una surface real: captura PTY ->
vt_render -> parse_claude_tui (con fix del spinner) -> delta de streaming ->
chat en vivo. Cada mensaje es una sesion claude one-shot (sin memoria entre
turnos). Playground del padre, no indexado.
2026-06-03 23:42:03 +02:00
agent 22bec25d8d fix: stream usa ultimo frame + playground artifact_probe
- streamAnswer: el result final es el ULTIMO answer parseado (frame post-idle,
  limpio) en vez del mas largo, que podia ser un frame intermedio con spinner.
- playground/artifact_probe.go: herramienta de auditoria que corre oneshot +
  stream contra varios prompts, detecta artefactos del render que se cuelan
  (box chars, status bar, spinner, palabras pegadas, prompt echo) y verifica
  consistencia del streaming (concat de deltas == result). Opcional --ref para
  comparar con claude -p real. No se indexa (playground del padre).

El fix del spinner en si vive en parse_claude_tui_go_tui (repo padre): detecta
la linea de carga por estructura (glyph + palabra + ellipsis) y firma
((Ns tokens) / esc to interrupt), no por la palabra, que cambia cada frame.
2026-06-03 23:37:39 +02:00
agent 4574f08a22 feat: streaming incremental (--stream) parseando snapshots de la TUI
Fase 2. Anade modo --stream que emite la respuesta de claude como NDJSON
(eventos text_delta + result final), re-parseando snapshots del render.

Compone dos funciones nuevas del registry:
- pty_capture_stream_go_infra: captura snapshots acumulativos del PTY por canal.
- text_prefix_delta_go_core: delta por prefijo comun entre snapshots sucesivos.

Por cada snapshot: vt_render -> parse_claude_tui -> delta del Answer. Solo emite
text_delta cuando el answer extiende limpiamente al anterior (HasPrefix); los
frames no monotonos se reconcilian en el result final. Heuristico y documentado.

e2e_check smoke_fake_stream verifica el flujo con el fake TUI (sin gastar claude).
2026-06-03 23:27:12 +02:00
agent 8d6078e99e feat: scaffold claude_pipe — claude -p equivalente parseando la TUI
App que obtiene la respuesta de claude como dato parseando su TUI interactiva,
en lugar de usar claude -p. Compone tres funciones del registry:

- pty_capture_idle_go_infra: captura el render de la TUI via PTY headless.
- vt_render_go_tui: reconstruye el layout 2D como texto plano.
- parse_claude_tui_go_tui: extrae los turnos + la respuesta final.

Salida por defecto con el mismo shape que claude -p --output-format json.
Formatos: json, text, turns, screen. Validada end-to-end: el campo result
coincide exacto con claude -p nativo (PONG == PONG). e2e_checks deterministas
con un fake TUI (tests/fake_claude.sh) que no gasta llamadas reales.

Fase 1 (one-shot). El streaming incremental queda como fase 2.
2026-06-03 22:52:48 +02:00