1. LineCapture now strips box-drawing chars instead of filtering whole
lines. This preserves agent name content so the frontend pipeline
diagram can detect active agents. Previous |filter was silently
dropping all agent identification lines.
2. handleAnalyze guard was blocking auto-retry: status === 'running'
prevented isAutoRetry calls from ever executing. Fixed by exempting
auto-retry from the running-guard.
3. AbortController now created before the 10s retry delay so Stop
works correctly during the countdown.
- Remove fastembed and pandas from requirements.txt (unused, bloat image)
- Strip apt-get libgomp1 install from Dockerfile (was only for fastembed)
- Add PYTHONDONTWRITEBYTECODE + PYTHONUNBUFFERED to Dockerfile
- Escape user context braces in bots.py to prevent CrewAI KeyError on {tokens}
- Frontend: parse server error body for real message on 400 responses
- .dockerignore: add .git/ and *.egg-info/
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>