- Remove synthetic "default" thinking option ID, use concrete option IDs from providers
- Normalize thinking option IDs to undefined when "default" or empty string
- Update app UI to display "Model default" label for fallback thinking option
- Fix Codex thinking option round-trip through app-server turn context
- Add test for thinking option ID persistence across Codex sessions
- Update test helpers to use actual default thinking option IDs
- Update OpenCode label consistency to match app display logic
Introduce `paseo daemon pair` CLI command that generates a local pairing offer URL with QR code without requiring a running daemon. Update message input to support mute/unmute toggle during realtime voice sessions with visual feedback (MicOff icon). Fix android:prod build script to use prebuild + assembleRelease flow.
* Update files
* Git panel: share checkout actions
Hoist checkout-scoped async git actions into a shared store and keep primary Push CTA loading in-place. Also stabilize e2e git flows.
* Stabilize git panel async actions and fix e2e flakes
- Add provider-agnostic streaming speech interfaces
- Local STT via Sherpa (Zipformer/Paraformer) + Parakeet v3 (offline)
- Local TTS via Pocket TTS ONNX (onnxruntime-node) with chunked streaming
- Auto-download models into PASEO_HOME and add Node download script
- Add E2E download test that round-trips TTS->STT
Implements E2EE for relay connections only, keeping direct connections
and CLI plaintext. The relay acts as a dumb byte forwarder with no
access to decrypted messages.
Key changes:
- Daemon keypair persistence in $PASEO_HOME/daemon-keypair.json
- Encrypted relay transport using ECDH P-256 + AES-256-GCM
- Client-side E2EE using daemon's public key from pairing offer
- WebCrypto compatibility for React Native