Track sleeping_since (ISO timestamp) in ServerState; auto-cleared by _set()
whenever state leaves sleeping. Frontend runs a 1s interval showing elapsed
time as "Xs", "Xm Ys", or "Xh Ym" in a new ASLEEP stat row (visible only
during state-sleeping). Timer survives page reload via server-side timestamp.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- log_parser: detect model load failure (child + router patterns) → state=error;
switch to generating at progress=1.00 and at prompt eval summary line
- frontend: add state-error (llama flashes red, CSS variable override);
group each leg+hoof in <g> so walk animation moves hooves with legs
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- log_watcher: add --reopen-log mode (close/reopen each poll) for sshfs/network
filesystems; fix nonlocal clients bug causing UnboundLocalError on first broadcast;
fix list(clients) copy to prevent RuntimeError on concurrent set mutation
- log_parser: capture progress=X.XX from prompt timing lines into Metrics.prompt_progress
- frontend: show progress bar during processing_prompt state with PROMPT N% label;
widen stats panel to 300px; remove model name truncation; add drag handle on
right border of stats panel to resize between 280px–840px
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>