* fix: gate reasoning effort by model support
Automatic previously omitted the params key, so OpenWebUI's shallow settings merge retained the old reasoning_effort value. Explicitly replace the params map when clearing and fail closed at the request boundary for models that do not advertise support.
* address reasoning effort review feedback
* fix: hydrate workspace reasoning effort details
The earlier fix trusted the OpenWebUI model catalog, but current OpenWebUI deliberately strips workspace model params from /api/models. Fetch and cache the selected workspace model detail so its configured custom effort wins over the user-level fallback and reaches the native selector.
* fix: avoid workspace effort hydration race
Do not fall back to the user-level effort while private workspace model params are still loading. Omitting the override during that window lets OpenWebUI apply its model configuration, and the held-response regression test prevents the first-send race from returning.
* refactor: generate workspace effort provider
* fix: retry workspace effort after failures
* fix: handle unavailable workspace effort
* fix: hide unhydrated native effort controls
* fix: progressively hydrate native reasoning effort
* fix: guard native effort callback rollback
* fix: serialize native effort updates
* test: distinguish native effort update callbacks
* 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
* Optimize performance and harden lifecycle handling
* Address PR review feedback
* Clean up duplicate App Intent image retries
* Fix follow-up pin-to-top routing
* Restore no-jump pin dismissal on user scroll
A later timeline optimization kept the synthetic pin spacer active through every manual scroll, undoing the guarded dismissal from #560 and allowing iOS range correction to snap the viewport. Restore the phantom-free range guard and cover both unsafe and safe dismissal offsets so the regression cannot recur silently.
* Rebuild chat turn anchoring like T3 Code
Create the anchor from the exact optimistic user-message ID, replace the full-screen phantom range and capped physics with measured anchored end space, and use item-level layout correction until real content fills the viewport. Cancel automatic corrections on the first user gesture so streaming growth cannot reintroduce scroll jumps.
* Fix Android cookie-clear verification and allow https-upgrade capture origins
The verified cookie clear treated Android's unimplemented getAllCookies as
failure, blocking SSO sign-in on empty stores and permanently arming the
incomplete-logout fence. Exact-origin capture checks silently dropped token
capture for http-configured servers upgraded to https by their proxy; capture
now also trusts the default-port https upgrade of the configured origin.
Also stabilize the background-validation sanitization test's poll deadline.
* Restore same-origin redirect recovery, pool warmup, and native fixes
- Replay credential-safe 3xx hops (same origin or default-port https
upgrade) for idempotent methods on the shared API client; cross-origin
hops still surface to the caller.
- Warm the completion client's actual connection pool at startup again;
checkHealth's request-scoped probe no longer touches it.
- Graceful ApiService dispose so provider rebuilds cannot abort in-flight
SSE streams; cap connectivity failure backoff at the healthy interval.
- iOS: thread the trusted origin into native sheet avatar loads so auth
headers are attached again; let oversized STT tap buffers fall back to
one-off copies instead of being dropped.
* Harden PR re-application: auth, upload/share, and provider regression fixes
Auth: logout preserves connection prerequisites (custom headers, mTLS)
while still revoking session credentials (legacy apiKey, captured proxy
Cookie headers); config-header edits and legacy apiKey migration no
longer sign the user out; cold-start background validation retries for
~7s to cover slow tunnels; interactively reissued byte-identical tokens
are accepted after logout; SSO button failures surface visibly.
Uploads/share: native-share durable keys derive from payload id +
ordinal instead of mutable content checksums; Hermes/direct-model
shares route through the local composer path instead of retrying
forever; pre-connection network failures defer instead of failing
terminally; orphaned receipt-held rows are garbage collected once
native storage is confirmed drained; disposed-queue persistence reports
failure so staged files survive; legacy staging roots are reclaimable.
Providers/UI: queued-completion banner watches every ownership-fence
input so retry/cancel cannot silently no-op; drawer keeps previous rows
during pagination reloads; authenticated image cache keys derive from a
stable server+token digest so the disk cache survives restarts while
accounts stay isolated.
* Make share staging indeterminate-ownership test hermetic under concurrency
The test snapshotted the process-global staging temp root, so files staged
or cleaned by concurrently running suites broke exact set equality. Assert
only that this test's own artifact never appears.
* Stabilize streaming UI and pending share persistence
Persist Android pending-share state atomically with migration coverage. Keep prompt anchoring and streaming haptics stable across row remounts, and reduce markdown streaming churn while hardening placeholder cleanup.
* Make streaming Markdown preparation incremental
* Reuse stable Markdown render inputs
* Avoid cumulative structured stream rebuilds
* Instrument and streamline structured output
* Hide dismissed sidebar native chrome
* Reduce streaming platform view retention
Refactor chat timeline anchoring and streaming rendering, extend Hermes session and history support, and preserve stable native navigation and Liquid Glass controls.
Validated with flutter analyze and flutter test (4,012 passed; 2 skipped).
Adds capability-aware Workspace management for Models, Knowledge, Prompts, Skills, and Tools, and unifies settings navigation across Android and iOS. Includes native-sheet routing fixes, adaptive Workspace back navigation, Hermes settings integration, localization, and regression coverage.
- Introduced background lease management for microphone access in the AudioRecordingService to ensure uninterrupted recording during background execution.
- Refactored the service to utilize a new AudioRecordingBackgroundCoordinator for managing microphone leases on Android.
- Updated error handling to release background leases appropriately during recording operations.
- Enhanced the audio recording configuration to support high-quality audio capture with improved compatibility across platforms.
- Introduced new methods in MainActivity and AppDelegate to manage pending share imports, including status checks and payload retrieval.
- Updated share handling logic to accommodate staged share payloads, improving the user experience for shared content.
- Enhanced the share receiver service to support new import status tracking and error handling for shared attachments.
- Implemented a skeleton UI for file attachments during import, providing visual feedback to users.
- Updated tests to validate the new share import features and ensure robust handling of shared content across platforms.
- Introduced avatarBytes property to the PlatformNativeSheetModelOption data structure in Kotlin, Swift, Dart, and other related files.
- Updated serialization and deserialization logic to handle the new avatarBytes property.
- Enhanced the NativeSheetBridge and hydration service to support avatarBytes, allowing for improved avatar handling.
- Added a new fetchImageBytes method in ApiService to retrieve image data as bytes.
- Updated tests to validate the integration of avatarBytes in various components.
- Added the receive_sharing_intent package to manage shared content from other applications.
- Updated pubspec.yaml and pubspec.lock to include the new dependency.
- Refactored MainActivity and AppDelegate to remove deprecated share handling logic and streamline intent processing.
- Introduced ShareExtension for iOS to handle shared content effectively.
- Enhanced share receiver service to utilize the new package for processing shared media files.
- Updated tests to cover new sharing functionality and ensure proper handling of shared content.
- Removed unnecessary FOREGROUND_SERVICE_CAMERA permission as it is not utilized by Conduit.
- Added FOREGROUND_SERVICE_PHONE_CALL permission to support phone call functionality.
- Adjusted CallkitNotificationService to specify phoneCall and microphone as foreground service types, ensuring compliance with Play Console requirements.
- Updated the `PlatformNativeSheetModelOption` to include a `tags` field, allowing for better categorization and filtering of models.
- Enhanced serialization and deserialization logic to handle tags in both Dart and Swift implementations.
- Modified UI components to display tags, improving user experience by providing additional context for each model.
- Updated search functionality to include tags, enabling users to find models more efficiently based on associated tags.
- Added tests to ensure correct extraction and handling of tags from model data.
- Added an exception for `conduit_platform_apis.g.dart` in .gitignore to ensure it is tracked.
- Updated analysis options to exclude `pigeons/**` and added `riverpod_lint` plugin.
- Bumped versions of several dependencies in pubspec.lock, including `analyzer`, `flutter_riverpod`, and `json_serializable`, while removing outdated dependencies like `custom_lint`.
- Introduced methods for persisting and restoring pending share payloads in MainActivity, improving share functionality.
- Implemented intent sanitization for home widget launches to prevent unintended behavior when re-launching from history.
- Updated share handling logic to ensure accurate delivery and cleanup of share payloads across the application.
- Removed the deprecated HomeWidgetPlugin, streamlining the widget integration process.
- Refactored related services to support new share staging cleanup processes, enhancing file management during share operations.
- Bumped version of home_widget to 0.9.2 in pubspec files.
- Removed share_handler dependency from pubspec.yaml and related references.
- Refactored ConduitWidgetProvider and MainActivity to utilize new share handling logic.
- Implemented a new share receiver service to manage shared content more effectively.
- Updated iOS ShareExtension to handle shared files and text with improved constraints.
- Added geolocation dependencies in `pubspec.lock` and updated `pubspec.yaml` to include `geolocator`.
- Updated AndroidManifest.xml to request location permissions.
- Enhanced iOS Podfile to bypass location permission prompts for `geolocator_apple`.
- Modified Info.plist to clarify location usage description.
- Implemented `updateUserInfo` method in `ApiService` to handle user location updates.
- Refactored chat providers to resolve user location when needed and updated tests to validate new functionality.
- Updated Gradle wrapper to version 8.14.3 for improved performance and features.
- Upgraded Android Gradle Plugin to version 8.11.1 and Kotlin plugin to version 2.2.20 for better compatibility and enhancements.
- Added properties to maintain legacy Kotlin/AGP behavior until Flutter plugins fully migrate to built-in Kotlin.
- Refactored chat page and related widgets to utilize new scroll cache extent handling for improved performance and layout consistency.
- Configured resolution strategy in `build.gradle.kts` to use version 1.1.1 of `glance-appwidget` to prevent resolution to alpha versions that require newer Android tooling.
feat(chat): enhance chat page layout and button styles
- Updated chat page layout to ensure proper positioning of input elements, improving responsiveness.
- Adjusted button styles in `assistant_message_widget.dart` and `terminal_tab.dart` to differentiate between Android and other platforms, enhancing visual consistency.
- Added `textHeightBehavior` to `MiddleEllipsisText` for better text rendering control.
- Improved button styles in `openwebui_sources.dart` to adapt based on platform, ensuring a cohesive user experience.
- Included `android:networkSecurityConfig` attribute in AndroidManifest.xml to enhance app security.
- Updated socket TLS handling in `socket_tls_override_impl_io.dart` to utilize a custom HTTP client adapter for improved WebSocket connections.
- Refactored the socket connection logic to streamline the handling of server configurations and TLS settings.
- Updated the launch mode of MainActivity in AndroidManifest.xml from singleInstance to singleTask to improve task management.
feat(chat): enhance image picking functionality in FileAttachmentService
- Added platform-specific image picking logic for Android and iOS using ImagePicker and FilePicker.
- Implemented error handling for image picking failures to improve user experience.
- Introduced a new method for picking images with the ImagePicker for better compatibility across platforms.
- Introduced a new `StreamingLease` data class to encapsulate streaming lease details, including ID, kind, and microphone requirements.
- Refactored `BackgroundStreamingService` and `BackgroundStreamingHandler` to utilize the new lease management system, enhancing clarity and maintainability.
- Updated methods to handle multiple streaming leases, improving background execution handling for chat and voice streams.
- Enhanced socket management by removing reliance on legacy stream IDs and implementing a more structured approach to background execution.
- Add support for attaching previously uploaded server files via new
ServerFilePickerSheet, including UI integration in chat composer and
file attachment service updates
- Implement note pinning with isPinned field in Note model,
NotePinToggler provider, sorted notes list with pinned section first,
and UI updates in notes list and editor
- Improve Android background streaming lifecycle management using
DefaultLifecycleObserver to start/stop foreground service based on
activity visibility
- Update Android notifications to use ic_hub icon, set priority to LOW,
and handle notification channel recreation safely
- Prevent chat history truncation by removing unnecessary
syncConversationMessages calls after chat completion and follow-up
generation
- Add model terminal auto-selection provider and preserve direct server
tool selections when switching models
- Update FileInfo model with enhanced metadata parsing for OpenWebUI 0.9+
and legacy formats, add Note model tests
- Add new tests for
Change theme colors from dark gray (#0D0D0D, #0A0A0A) to pure black (#000000) across Android splash screens, iOS launch backgrounds, and Flutter theme configuration. Add Android configuration to force dark mode off and configure system UI behavior for proper splash screen display.
- Updated ThemedDialogs to utilize AdaptiveAlertDialog for confirmation and input dialogs.
- Introduced NativeChatInput for platform-specific chat input handling on iOS and Android.
- Added StreamingTitleText widget for animated title display in chat.
- Implemented NativeGlassContainer for iOS glass effect with Flutter overlay.
- Created GlassColors utility for native system colors on glass surfaces.
- Added native chat input view factory for better integration with platform views.
- Updated pubspec.yaml and pubspec.lock to include adaptive_platform_ui dependency.
- Added voice call models to represent call phases, failure reasons, and session state.
- Created infrastructure for voice call transport using socket service.
- Implemented background policy for managing call notifications and wake lock.
- Developed audio session coordinator for handling audio transitions during calls.
- Integrated permission orchestration for microphone and speech recognition.
- Added native call surface implementation using CallKit for iOS.
- Created voice input and output engines for speech recognition and text-to-speech.
- Developed voice call launcher for initiating calls from various entry points.
- Implemented tests for TTS manager, voice call controller, call state machine, and voice call page.