Phone-only audio was telephone audio, and the assistant was ducked. Both fixed, verified on an iPhone 12 / iOS 26.1 against the live gateway, on a bare phone, on AirPods and on Ray-Ban Meta.
Fixed
Full-band audio by default. outgoingAudioFidelity defaulted to .narrowband, and SystemAudioTransport declared it outright. That flag selects the realtime session INPUT format as well as playback, so the speaker own voice was decimated to 8 kHz mu-law before being sent and transcription read telephone audio. The default is now .hiFi with no override; a narrow wire is a specific fact a transport declares, and Brilliant declares it.
No crash when the audio route changes. installTap raises an ObjC exception on an unusable format, which Swift cannot catch, so the process aborted when a session started with glasses connected. The format is validated and a Swift error thrown instead; the existing 1 Hz retry then succeeds once the route settles.
The assistant is audible. Instantiating the Voice-Processing I/O unit attenuates playback on the output scope — Apple behaviour, unfixed since iOS 6, and invisible to the API. Fixed with the iOS 17 ducking configuration plus a category re-assert, scoped to built-in outputs so it never pulls audio off a connected device.
Breaking
Two source-breaking removals land in this minor, both with one-line replacements:
AssistantConfig.wakeSoundEnabledis removed on both platforms.- The named-sound registry is removed —
audio.playSound,registerSoundandsoundNamesare gone. Useaudio.sendAudio(pcm16:sampleRate:)/audio.stopAudio(), and readaudio.outputFidelityto ask your model for the right format.
The wake PHRASE engine is untouched — the two features share a name and nothing else.
Android ships in lockstep at com.extentos:glasses:2.8.0 on Maven Central.