Bug fixes:
- B4: Escape key now respects streaming state — during active stream,
Escape aborts the generation instead of closing the modal
- B5: Auto-refresh (15s interval) pauses during streaming and pull
operations to prevent background churn and UI flicker
- B9: Add AbortController to streaming fetch — closing modal or pressing
Escape cancels the underlying HTTP request, saving CPU/bandwidth
- B1: Header subtitle now dynamically shows chip name and RAM from the
system API instead of hardcoded 'Apple M4 Pro · 48 GB'
- B11: Escape handler clears promptText and promptResponse on close
- B6: Toast IDs use Date.now()+random instead of incrementing ref
(prevents collision on HMR remount)
- B10: Brew panel distinguishes 'Loading...' (system=null) from
'No tracked packages found' (system loaded, empty array)
- B3: Remove dead non-streaming generate action from Ollama API route
- P4: Add 5-second AbortController timeout to all fetchOllama() calls
to prevent indefinite hangs when Ollama is unresponsive