Files
claude_pipe/playground/README.md
T
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

68 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# claude_pipe — artifact probe (playground)
Herramienta desechable para auditar la calidad del parseo de la TUI que hace
`claude_pipe`. No se indexa, no tiene `app.md`, vive dentro de `apps/claude_pipe/`
y se mueve con su sub-repo.
## Qué comprueba
Por cada prompt, lanza el binario `claude_pipe` en modo one-shot y en modo
`--stream`, y busca:
1. **Artefactos** que se cuelan del render en la respuesta parseada: caracteres de
caja (`╭│╰`), reglas horizontales (`────`), fragmentos de la status bar
(`CTX:`, `IN:`, `$…`, `← for agents`), la línea meta `✻ Crunched`, el prompt
``, el carácter de reemplazo ``, palabras pegadas (>40 chars sin espacio), o
el prompt repetido literalmente.
2. **Consistencia del streaming**: la concatenación de los `text_delta` debe
reconstruir el `result` final. Si no, la heurística de prefijo perdió o duplicó
texto bajo reflow.
3. **(Opcional, `--ref`)** discrepancia contra `claude -p` real para el mismo
prompt (normalizado por espacios). claude no es determinista, así que solo los
prompts triviales se espera que coincidan exactamente.
Sale con código 2 si encuentra artefactos o inconsistencias (para poder usarlo
como gate).
## Cómo lanzarlo
```bash
cd apps/claude_pipe
CGO_ENABLED=1 go build -tags fts5 -o claude_pipe . # asegúrate de tener el binario
cd playground
# Set de prompts por defecto, sin comparar con claude -p
go run artifact_probe.go --root /home/enmanuel/fn_registry
# Comparando además contra `claude -p` real (gasta llamadas reales)
go run artifact_probe.go --root /home/enmanuel/fn_registry --ref
# Un solo prompt custom
go run artifact_probe.go --root /home/enmanuel/fn_registry --prompt "tu prompt aqui"
```
`--root` debe ser un repo cuyos MCP de claude ya estén aprobados, para que la TUI
no muestre el diálogo de arranque.
## Chat en el navegador (`web/`)
Un chat web que prueba todo el stack end to end: backend Go con SSE que lanza
`claude_pipe --stream` por cada mensaje y reenvía los `text_delta` al navegador,
frontend chat vanilla (sin frameworks, sin node_modules).
```bash
cd apps/claude_pipe
CGO_ENABLED=1 go build -tags fts5 -o claude_pipe . # binario con el fix del spinner
cd playground
go run ./web # http://localhost:8099
# o con flags:
go run ./web --port 8099 --root /home/enmanuel/fn_registry --warmup 4s --idle 4s --max 120s
```
Abre `http://localhost:8099` y escribe. Cada mensaje es una sesión `claude` nueva
(sin memoria entre turnos: `claude_pipe` es one-shot). Hay ~8s de `warmup`+`idle`
antes de la primera respuesta. La respuesta se reconstruye desde la TUI parseada,
ya sin el spinner de carga.