| 42-wallpapers-social-format-conversion-voice |
04 |
ui |
| voice |
| whisper |
| offline-badge |
| react-hook |
| lucide-react |
| typescript |
|
| phase |
provides |
| 42-wallpapers-social-format-conversion-voice |
Plan 01 foundation types and server hardware route at /api/system/providers |
|
|
| 42-06 (UI wiring — voice offline badge now visible in ChatInput) |
|
| useSystemProviders hook fetching /api/system/providers and exposing whisperAvailable/piperAvailable |
| Offline badge in ChatInput (WifiOff icon + "Offline" label) when local Whisper binary detected |
|
| added |
patterns |
|
|
| Simple one-shot fetch hook (no SWR/React Query) for UI capability flags |
| Graceful degradation |
| badge absent when providers null (fetch error or Whisper not installed) |
|
|
|
| created |
modified |
| ui/src/hooks/useSystemProviders.ts |
|
| ui/src/components/ChatInput.tsx |
|
|
| useSystemProviders uses plain useState+useEffect fetch (not React Query) — matches plan spec and keeps hook lightweight for a one-time capability probe |
| Hook maps voiceCapability from HardwareInfo response shape — /api/system/providers returns full HardwareInfo, whisperAvailable lives in voiceCapability sub-object |
|
| Offline badge pattern: enableVoiceInput && providers?.whisperAvailable — double guard ensures badge only shows in voice mode with confirmed local model |
|
| VOICE-01 |
| VOICE-02 |
| VOICE-03 |
|
2min |
2026-04-04 |