Backend returned { error: message } on 400 but frontend expected { message }.
catchInternal swallowed Axios errors and returned undefined, causing a
generic 'An internal error occurred' message instead of the real reason
(already installed, already in progress, not found).
- Fix 400 response shape to { success: false, message } in controller
- Replace catchInternal with direct error handling in installService,
affectService, and forceReinstallService API methods
- Extract error.response.data.message from Axios errors so callers
see the actual server message
Adiciona monitoramento de disco com alertas globais quando o uso
ultrapassa thresholds configuráveis (85% warning, 95% critical).
- Novo endpoint GET /api/system/disk-status
- getDiskStatus() no SystemService com thresholds via KVStore
- Hook useDiskAlert com polling de 45s e dismiss via localStorage
- DiskAlertBanner no AppLayout visível em todas as páginas
- Banner reaparece se o nível de alerta piorar
Closes#485
Add a "Debug Info" link to the footer and settings sidebar that opens a
modal with non-sensitive system information (version, OS, hardware, GPU,
installed services, internet status, update availability). Users can copy
the formatted text and paste it into GitHub issues.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>