- 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
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