## Описание `session.rs:306,319` — каждый PTY read делает: 1. `vt_parser::sanitize_output(raw)` → `Vec<u8>` (аллокация #1) 2. `Bytes::copy_from_slice(&sanitized)` → `Bytes` (аллокация #2) В большинстве случаев sanitize — no-op (нет OSC-52 последовательностей), и аллокация #1 — чистый overhead. **Module:** `runner/src/session.rs`, `runner/src/vt_parser.rs` ## Fix - `sanitize_output` возвращает `Cow<[u8]>` — borrow input когда ничего не удалено, copy только при наличии OSC-52 - Для broadcast: `Bytes::from(sanitized.into_owned())` вместо `Bytes::copy_from_slice` ## Acceptance Criteria - [ ] `sanitize_output` возвращает `Cow<[u8]>` - [ ] `sanitize_input` — аналогично (если применимо) - [ ] Нет лишних аллокаций когда sanitize — no-op - [ ] Тесты sanitize проходят
Описание
session.rs:306,319— каждый PTY read делает:vt_parser::sanitize_output(raw)→Vec<u8>(аллокация Bump docker/setup-buildx-action from 3 to 4 #1)Bytes::copy_from_slice(&sanitized)→Bytes(аллокация Bump actions/checkout from 4 to 6 #2)В большинстве случаев sanitize — no-op (нет OSC-52 последовательностей), и аллокация #1 — чистый overhead.
Module:
runner/src/session.rs,runner/src/vt_parser.rsFix
sanitize_outputвозвращаетCow<[u8]>— borrow input когда ничего не удалено, copy только при наличии OSC-52Bytes::from(sanitized.into_owned())вместоBytes::copy_from_sliceAcceptance Criteria
sanitize_outputвозвращаетCow<[u8]>sanitize_input— аналогично (если применимо)