fix(captures): Play As autoplay + default voice + orphan recovery

- Hand /generate ids to the global SSE watcher so playback fires on completion. The mutation onSuccess was checking audio_path on a queued row, which is always empty — autoplay never ran.
- Bind the Play As voice selection to capture_settings.default_playback_voice_id, kept in sync with the Settings → Captures and Settings → MCP pickers. Picking from the split-button dropdown writes back to settings.
- Extract AudioBars from HistoryTable into a shared component; use it for the Play As generating state in place of Loader2.
- Stop the active-state hover from flashing white text when the button is in its lighter accent/10 fill.
- Drop the gradient avatar swatches from the Settings → Captures voice dropdown.
- Backend: when the gen worker exits without writing a terminal status (e.g. SQLite lock racing the failed-status write inside its own exception handler), the cancel endpoint now flips the row to failed instead of 409-ing. Worker also force-fails on its way out as a belt-and-suspenders.
This commit is contained in:
Jamie Pine
2026-04-24 19:49:36 -07:00
parent b97c565a45
commit 7ad91f5767
10 changed files with 123 additions and 104 deletions
@@ -29,7 +29,6 @@
"snippetEmpty": "(無轉錄文字)",
"noTranscriptError": "此擷取尚無轉錄文字",
"captureCardLabel": "擷取 · {{when}}",
"playerVoiceLabel": "{{voice}} · {{captureId}}",
"header": {
"modelSummary": "Whisper {{stt}} · Qwen3 · {{llm}}"
},