The mic button failed on Linux with a chain of distinct problems, each
hidden behind the previous one:
- The AppImage bundled GStreamer libraries but no plugins, so WebKitGTK
found 0 capture devices. Enable bundleMediaFramework and install the
GStreamer plugin packages on the CI runners.
- The bundled libpipewire had the builder's SPA plugin paths compiled in
and failed on hosts with a different layout. finalize-appimage.sh now
drops it so the host's is used (host-coupled, like libwayland-client).
- WebKitGTK denies getUserMedia until the embedder enables media streams
and answers the permission request; wry does neither. Add a Linux-only
handler for the main window that grants audio-only requests and denies
everything else.
- getUserMedia now steps down from the saved device to the default device
to bare audio:true on OverconstrainedError/NotFoundError, and the STT
error shows the DOMException name.
Verified on CachyOS: permission request allowed, recording works.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>