35983eb971
Move history replay out of the /decode SSE stream into a new GET /decode/history JSON endpoint. The JS client now opens /decode immediately for live packets (no gating) and fetches history in parallel via fetch(), draining it in the background with the existing chunked drainDecodeHistory() helper. This ensures real-time decode messages are never blocked by a large history payload, and removes the historyReceived gate entirely. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Signed-off-by: Stan Grams <sjg@haxx.space>