Repository navigation
v2.2.0 — the readable seat
Patch-grade fix, minor-grade confidence: the local-seat transcript stays readable.
The asymmetry this closes
tmux seats capture via tmux capture-pane -p — escape sequences stripped by construction. Local pipe seats (v2.0.0) streamed the process's RAW stdout/stderr. An interactive claude REPL speaks ANSI: SGR colors, spinner frames redrawn via CR, OSC window titles. Those bytes were being appended verbatim into the per-seat transcript — escape garbage on exactly the seats Windows users start.
The fix
ANSIStreamNormalizer at the transcript door:
- reuses the cursor-aware normalizer the preflight matchers already trust (CR overwrites, BS, CSI-K erases, OSC stripped;
\n/\tkept, other control bytes dropped) - carries a trailing PARTIAL escape sequence across chunk boundaries — a CSI split by a pipe read degrades into nothing, not garbage
- flushes the carry exactly once at end-of-stream
Test: a real seat ECHOING an ANSI-wrapped marker: the marker survives, the transcript contains zero ESC bytes.
macOS app: unzip, drag to Applications. Windows shell unchanged (this is core-side); its v2.1.0 build remains current.