feat(playground): chat web sobre claude_wire (SSE interceptado de la red)
Backend Go (web/server.go) con SSE que por cada mensaje lanza claude_wire y reenvia su NDJSON (text_delta + result) al navegador. Frontend vanilla (web/index.html). Mensajes serializados (mutex: claude_wire usa puerto mitmproxy fijo). Validado end-to-end: la respuesta llega token a token del SSE real (O, K -> OK), sin parsear el render. ~9s por mensaje vs ~15s del chat de claude_pipe. Puerto 8100.
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
# claude_wire — chat web (playground)
|
||||
|
||||
Chat en el navegador sobre `claude_wire`: el texto de la respuesta se obtiene
|
||||
interceptando el SSE del modelo en la red (no parseando el render de la terminal).
|
||||
|
||||
Backend Go con SSE (`web/server.go`) que, por cada mensaje, lanza `claude_wire`
|
||||
y reenvía su NDJSON (`text_delta` + `result`) al navegador. Frontend vanilla
|
||||
(`web/index.html`), sin frameworks ni node_modules. No se indexa (playground del
|
||||
padre).
|
||||
|
||||
## Prerrequisitos
|
||||
|
||||
- `mitmproxy` instalado (`mitmdump` en el PATH) + CA generada
|
||||
(`~/.mitmproxy/mitmproxy-ca-cert.pem`).
|
||||
- Binarios compilados:
|
||||
- `apps/claude_pipe/claude_pipe` (driver de la TUI).
|
||||
- `apps/claude_wire/claude_wire` (runner que intercepta el SSE).
|
||||
|
||||
```bash
|
||||
cd apps/claude_pipe && CGO_ENABLED=1 go build -tags fts5 -o claude_pipe .
|
||||
cd ../claude_wire && go build -o claude_wire .
|
||||
```
|
||||
|
||||
## Lanzar
|
||||
|
||||
```bash
|
||||
cd apps/claude_wire/playground
|
||||
go run ./web # http://localhost:8100
|
||||
# o con flags:
|
||||
go run ./web --port 8100 --root /home/enmanuel/fn_registry --wire ../claude_wire
|
||||
```
|
||||
|
||||
Abre `http://localhost:8100` y escribe. Cada mensaje dirige la TUI interactiva de
|
||||
claude por un mitmproxy y lee la respuesta del SSE de `api.anthropic.com`, token a
|
||||
token, exacta. Corta en `message_stop` (sin idle ciego): ~9s por respuesta.
|
||||
|
||||
## vs el chat de claude_pipe
|
||||
|
||||
| | `claude_pipe` chat (`:8099`) | `claude_wire` chat (`:8100`) |
|
||||
|---|---|---|
|
||||
| Texto | parseado del render (heurístico) | exacto del SSE de la red |
|
||||
| Streaming | snapshots del grid | token real |
|
||||
| Latencia | ~15s | ~9s |
|
||||
|
||||
## Notas
|
||||
|
||||
- Mensajes serializados (un `claude_wire` a la vez: usa un puerto mitmproxy fijo).
|
||||
- Sin memoria entre turnos (cada mensaje es una sesión claude one-shot).
|
||||
Reference in New Issue
Block a user