* feat: bundled JSON release notes for 4.0, polished changelog sheet, remove IAP
- Move release-note content from ARB to assets/release_notes/<locale>.json
with locale-fallback repository and schema-checked validator
- Polish the release notes sheet (staggered reveal, version badge,
feature glyph bullets, action cards) and add the 4.0 note in 13 locales
- Prune pre-4.0 notes
- Remove in_app_purchase and the tip jar entirely; keep the Buy Me a
Coffee donation link on all platforms
* Refresh release notes sheet and localized copy
* Add release notes banner and native review support
* Redesign release announcement sheet
* Target release announcement to 4.0.1
* Address release announcement review feedback
* Tighten release note locale handling
* feat: render Mermaid diagrams natively
* fix: apply CodeRabbit auto-fixes
* ci: harden submodule checkout credentials
* fix: hide persistent glass controls under sheets
Route-level scroll controls were not subscribed to tracked sheet coverage, so their UIKit compositor layers could bleed through modal routes. Centralize pre-presentation native chrome suppression and add a regression guard.
* fix: respect Dynamic Type in chat chrome
Cupertino navigation bars suppress inherited scaling and the composer used fixed control extents. Restore the route text scaler, bound control geometry to 1.5x, and add a regression guard.
* fix: honor accessibility settings across custom chrome
Match native Bold Text for Flutter icon glyphs and route every custom Cupertino toolbar through the shared Dynamic Type-aware shell. Keep route content and refresh offsets aligned with the scaled toolbar height.
* fix: scale sidebar navigation with Dynamic Type
The native iOS 26 tab bar applies Bold Text but keeps fixed label and symbol metrics. Retain it at normal size and use the bounded, scalable Flutter navigation bar for enlarged accessibility categories.
* Revert "fix: scale sidebar navigation with Dynamic Type"
This reverts commit 048e9de00b.
* fix: address accessibility review feedback
Use adaptive note editor insets, hide the workspace native section menu beneath tracked sheets, and align the new accessibility assertions with the test suite's checks convention.
* test: use checks for workspace sheet coverage
Remove the prepare-generated-sources job that was generating and packaging code artifacts separately. Move build_runner execution directly into build-android and build-ios jobs, and switch to using Flutter's native build commands (flutter build apk/appbundle) instead of direct Gradle invocations. This simplifies the CI pipeline and removes unnecessary artifact transfer steps.
Removes the Ruby setup step from the release workflow as it's unnecessary for the iOS build process. Also simplifies the pod install command by removing the bundle exec prefix, since CocoaPods doesn't require Bundler in this context.
* feat(chat): add isVoiceMode parameter to message sending functions
* ci(release): optimize build pipeline by pre-generating sources in separate job
Add prepare-generated-sources job to run build_runner once and share generated code across Android and iOS build jobs, reducing redundant code generation time. Also add Android local.properties setup and switch to Gradle wrapper for building.
* feat(tts): add backend voice configuration with multiple split modes
Add support for backend-provided TTS voices and configurable text split modes
that mirror OpenWebUI behavior. Introduces `BackendTtsVoice` model, adds
`ttsSplitOn` and `ttsVoices` to `BackendConfig`, and implements split modes
(punctuation, paragraphs, none) in TTS manager. Refactors voice fetching to
use consolidated backend config instead of separate API calls. Adds markdown
preprocessing utilities (`cleanText`, `removeAllDetails`) for TTS text handling.
* refactor(notes): refactor floating action button to use AdaptiveButton
Extract floating button building logic into dedicated _buildAdaptiveFloatingButton method and replace custom Container/InkWell implementation with AdaptiveButton for improved consistency and maintainability.
* Stream chat UI completion on terminal chunks
- Split UI completion from transport teardown
- Improve streaming list virtualization and scroll follow
- Add coverage for terminal finish_reason handling
- Added permissions for write access to contents in both Android and iOS jobs.
- Updated artifact name for Android release from 'Releases' to 'Android-Release'.
- Configured Gradle caching to be read-write.
- Specified exact IPA artifact name for iOS release and added options to omit body and name during updates.
- Introduced a new job in the GitHub Actions workflow to build the iOS app, including steps for checking out the repository, setting up Flutter, installing dependencies, and generating Freezed classes.
- Implemented versioning logic to derive the release tag and build number dynamically based on the event type (manual or tag push).
- Added steps for setting up Xcode, installing CocoaPods, building the iOS app without signing, creating an IPA from the app bundle, and uploading artifacts.
- Enhanced release updates with the ability to handle both tag pushes and manual rebuilds, ensuring a more efficient release process.