4 Commits

Author SHA1 Message Date
Vlad Doloman
7bda83998e fix: handle bare {"stage":"name"} loading payload; harden watcher against parser errors
The stage-transition payload {"state":"loading","payload":{"stage":"mmproj_model"}}
lacks the stages/current/value keys — accessing them raised KeyError which crashed
the LogWatcher task, freezing the UI at the last good state indefinitely.

- log_parser: skip loading payloads missing stages/current/value (next message
  has the full payload within milliseconds)
- log_watcher: wrap on_line calls in try/except so any future parser error
  keeps the tail loop alive instead of killing the task

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-26 18:27:52 +03:00
Vlad Doloman
311819b51c fix: sshfs polling, WebSocket broadcast, prompt progress bar, resizable stats panel
- 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>
2026-06-22 21:02:34 +03:00
Vlad Doloman
fddbd8f4d4 fix: seed initial state from last 8KB of log on startup 2026-06-22 20:11:00 +03:00
Vlad Doloman
3367eeb80b feat: asyncio log file watcher with offline detection 2026-06-22 18:57:17 +03:00