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>
This commit is contained in:
Vlad Doloman
2026-06-22 21:02:34 +03:00
parent fddbd8f4d4
commit 311819b51c
6 changed files with 157 additions and 17 deletions

View File

@@ -139,6 +139,9 @@ body.state-generating #speech-bubble { display: flex; }
/* loading */
body.state-loading #progress-wrap { display: flex; }
/* processing_prompt */
body.state-processing_prompt #progress-wrap { display: flex; }
/* offline */
body.state-offline #llama { opacity: 0.15; }
@@ -237,9 +240,40 @@ body.state-offline #llama { opacity: 0.15; }
color: var(--amber-dim);
}
/* ── Resize handle ───────────────────────────────────────────────────────── */
#resize-handle {
position: absolute;
right: -6px;
top: 0;
bottom: 0;
width: 12px;
cursor: ew-resize;
display: flex;
align-items: center;
justify-content: center;
opacity: 0.3;
transition: opacity 0.15s;
user-select: none;
z-index: 10;
}
#resize-handle:hover,
#resize-handle.dragging { opacity: 1; }
#resize-handle::after {
content: '';
width: 2px;
height: 48px;
background: var(--amber-dim);
border-radius: 1px;
box-shadow: -4px 0 0 var(--amber-dim), 4px 0 0 var(--amber-dim);
}
@media (orientation: portrait) {
#resize-handle { display: none; }
}
/* ── Stats panel ─────────────────────────────────────────────────────────── */
#stats-panel {
flex: 0 0 220px;
position: relative;
flex: 0 0 300px;
background: #0d0d06;
border: 3px solid var(--amber-dim);
border-radius: 12px;