637e96f236
Backend (the "logs arrive every ~5s / pipe clogged" bug): - dockerLocalProxy.ServeHTTP streamed the docker socket response via io.Copy, which buffers ~2KB into the ResponseWriter and only flushes when full or on handler return. Low-throughput streaming endpoints (container logs follow=1, events, stats, attach) therefore arrived in multi-second batches. Stream manually and Flush() after each chunk so they are delivered live. Behaviour is otherwise identical to io.Copy (full-write contract, EOF handling, Debug error logging); hijacked attach/exec go through a separate websocket handler, unaffected. - NewSingleHostReverseProxyWithHostHeader: set FlushInterval = -1 so the remote-endpoint path streams live too. Frontend (maintainer UI asks): - Remove the line-selection mechanic entirely (Copy-selected-lines and Unselect buttons, selectLine/copySelection/clearSelection, selectedLines state, line_selected highlight): selecting/copying is mouse-native. Copy (all visible) and Download stay. - Rename the unclear "Fetch" since-selector label to "Since". - Move the settings controls into the widget header (rd-widget-header default transclude slot) so they share one row with the "Log viewer settings" title, reclaiming vertical space for the log pane. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>