Add transport::connect (dial + split) and a sync transport::Listener
(bind + accept) so both ends of the inspection connection build streams
identically without depending on interprocess directly. Plugin now dials
via transport::connect. These back the kittest harness moving onto the
same local socket as the live plugin.
- FrameScreenshot now carries PNG bytes instead of raw RGBA (PROTOCOL_VERSION 1→2);
add a shared `encode_png` helper behind a new `png` feature so the live plugin and the
kittest harness encode frames identically.
- Make the protocol module unconditional: drop the `protocol` feature flag and the
optional serde/serde_bytes/rmp-serde deps it gated.
- plugin.rs: re-stamp screenshot-bearing frames with the current step (so inspectors
waiting for step > prev don't reject them) and pump a tail-side repaint while awaiting
the GPU readback.
Replace std::os::unix::net::UnixStream in the InspectionPlugin with the
interprocess crate's local_socket::Stream, so the transport works on Windows
(named pipe) as well as unix/macOS (unix domain socket).
- New transport module (transport feature) with socket_name() and
generate_socket_target() — one shared, platform-split place to build/allocate
local-socket names, used by both ends of the connection.
- Drop the cfg(unix) gates on the plugin module; gate on the plugin feature only.
- attach() now takes a socket name string and connects via interprocess; the
stream is split with Stream::split() instead of UnixStream::try_clone().
New `egui_inspection` crate ships:
- `protocol` (default): wire types + length-prefixed msgpack framing for the
inspector ↔ egui-peer connection. Transport-neutral (stdio / unix socket / TCP).
- `plugin`: `InspectionPlugin`, an `egui::Plugin` that dials a unix socket from
`EGUI_INSPECTION_SOCKET`, streams frames + accesskit tree updates, and applies
inbound `InspectorCommand`s back into the running `egui::Context`.
eframe gains an `inspection` feature that auto-attaches the plugin during native
startup (glow + wgpu integrations) when the env var is set. Connection failures
log via `log::warn!` and do not abort startup.
Lives in its own crate (rather than `egui_kittest`) so eframe can pull the
protocol in without picking up the test harness, and so external tools can
depend on it directly.