Commit graph

146 commits

Author SHA1 Message Date
cogwheel
332f0c75bb
feat: unify app surfaces with native grouped design (#628)
Some checks failed
L10n / l10n (push) Has been cancelled
Squash-merge the reviewed native UI, sidebar, onboarding, direct connection, Hermes, workspace, theming, haptics, and consistency updates.
2026-08-15 18:37:46 +05:30
cogwheel
f6ea3f6719
Fix reasoning effort persistence for unsupported models (#613)
* 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
2026-08-04 22:47:31 +05:30
cogwheel
21ad9d4d33 fix: address Android edge-to-edge and R8 warnings 2026-08-01 22:48:10 +05:30
cogwheel
357c9aba47
Enable optimized R8 resource shrinking with AGP 9 (#607)
* build: enable optimized R8 resource shrinking

* build: refresh iOS WebView pod lock
2026-08-01 14:33:27 +05:30
cogwheel
677a20e2ba
Redesign the Conduit 4.0 release announcement (#602)
* 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
2026-07-31 21:54:47 +05:30
cogwheel
c5e4998e9a
feat: expand native Ollama and Direct connection support (#587)
* feat: add native Ollama Cloud support

* feat: unify model and backend settings UX

* feat: polish direct backend model and composer UX

* fix: gate attachments by backend capabilities

* feat: add trusted direct document attachments

* feat: show Ollama web search sources

* fix: address PR review feedback

* fix: address follow-up review feedback

* test: use checks for reasoning effort coverage

* fix: harden model effort selection

* fix: surface effort persistence failures
2026-07-24 19:03:55 +05:30
cogwheel
d5c6b11b28
Optimize performance and harden lifecycle handling (#581)
* 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
2026-07-20 21:04:28 +05:30
cogwheel
66308acf46
Optimize chat timeline, streaming, Hermes, and native navigation (#578)
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).
2026-07-18 09:19:41 +05:30
cogwheel
46a55b7d32
fix: restore knowledge, STT locale, and filter controls (#571)
Closes #555

Closes #551

Closes #519
2026-07-15 02:05:26 +05:30
cogwheel
6430a31851
Add native Workspace and unify settings navigation (#566)
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.
2026-07-13 03:10:14 +05:30
cogwheel
05b16cf266
Fix multi-attachment crash and speech-to-text regressions (#563)
* Support transcript events in voice STT and fix attachment type safety

* Enable automatic language detection for Android STT

* Address native STT review feedback

* Complete speech review fixes

* Avoid duplicate speech startup errors

* Require on-device recognizer for offline STT
2026-07-11 00:25:53 +05:30
cogwheel
efc893d584
Add native voice pipeline and voice UI polish 2026-06-24 18:53:06 +05:30
cogwheel
c4c0adab77 feat(audio): enhance audio recording service with background lease management
- 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.
2026-06-08 22:37:29 +05:30
cogwheel
83e9734477 feat(sharing): enhance share import functionality 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.
2026-06-08 19:21:00 +05:30
cogwheel
c15fd90577 feat(avatar): add avatarBytes property to PlatformNativeSheetModelOption 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.
2026-06-08 10:15:00 +05:30
cogwheel
e8a8042430 fix(sharing): integrate receive_sharing_intent package for enhanced sharing capabilities
- 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.
2026-06-07 15:20:11 +05:30
cogwheel
8cf7c9ae32 fix(android): update AndroidManifest.xml to refine foreground service permissions
- 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.
2026-06-05 00:53:32 +05:30
cogwheel
f337d88165 feat(tags): add support for model tags in platform APIs and UI components
- 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.
2026-06-04 21:23:40 +05:30
cogwheel
40a8103811 chore: update .gitignore, analysis options, and dependencies
- 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`.
2026-06-04 12:30:04 +05:30
cogwheel
64633207af feat(intent): enhance share payload handling and widget intent sanitization
- 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.
2026-06-03 13:24:52 +05:30
cogwheel
fb23d461af chore: update dependencies and remove share_handler
- 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.
2026-06-03 10:23:41 +05:30
cogwheel
7f1d8aa469 feat(location): integrate geolocation features and update user info handling
- 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.
2026-05-25 23:51:31 +05:30
cogwheel
c2b96d32b0 chore(android): update Gradle and Kotlin versions, and adjust properties
- 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.
2026-05-21 18:19:32 +05:30
cogwheel
7440dc1c02 feat(android): enforce specific version for glance-appwidget dependency
- 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.
2026-05-20 12:49:47 +05:30
cogwheel
f722a8b47f feat(android): add network security configuration to AndroidManifest.xml
- 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.
2026-05-17 16:02:03 +05:30
cogwheel
2738df9e57 fix(android): change launch mode to singleTask for MainActivity
- 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.
2026-05-06 18:08:12 +05:30
cogwheel
6a9600f877 feat(streaming): implement background streaming lease management
- 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.
2026-05-04 01:07:51 +05:30
cogwheel
ca6fae884c feat: add server file attachments and note pinning
- 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
2026-04-23 23:38:43 +05:30
cogwheel
61b9d165d5 Stop tracking fastlane directories 2026-03-31 11:10:07 +05:30
cogwheel
30e10d625c chore: bump version to 2.6.4 2026-03-28 22:19:51 +05:30
cogwheel
074d1beeaf chore: remove gradle wrapper tracking from android gitignore 2026-03-26 00:29:58 +05:30
cogwheel
b40e3348e1 chore: remove Android Gradle wrapper exceptions from .gitignore 2026-03-24 14:26:05 +05:30
cogwheel
fa2b44cefb chore: revert version to 2.6.2+103 2026-03-24 14:07:27 +05:30
cogwheel
a77013ec78 chore: bump version to 2.6.3 2026-03-24 13:54:00 +05:30
cogwheel
c5df28873d Refine app haptics with flutter_vibrate 2026-03-23 23:46:42 +05:30
cogwheel
e0c4d53d30 chore: bump version to 2.6.2 2026-03-22 15:11:27 +05:30
cogwheel
e0567611af feat(theme): update colors to true black for AMOLED display support
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.
2026-03-22 13:46:24 +05:30
cogwheel
94b64e406a chore: bump version to 2.6.1 2026-03-22 10:12:26 +05:30
cogwheel
84067dbd4d chore: bump version to 2.6.0 2026-03-22 00:05:45 +05:30
cogwheel
609bfd0d0f chore: bump version to 2.5.6 2026-03-14 14:05:09 +05:30
cogwheel
7006a78d21 chore: prepare for merge to main 2026-03-14 12:39:18 +05:30
cogwheel
878f633f1a chore: bump version to 2.5.5 2026-03-14 00:25:37 +05:30
cogwheel
4ea68f99fc chore: bump version to 2.5.4 2026-03-11 14:34:42 +05:30
cogwheel
c25e6efae7 chore: bump version to 2.5.3 2026-03-09 22:27:57 +05:30
cogwheel
b287bdf027 chore: bump version to 2.5.2 2026-03-04 23:33:40 +05:30
cogwheel
916a9f8f62 chore: bump version to 2.5.1 2026-03-04 15:02:00 +05:30
cogwheel
a59c3eebee chore: bump version to 2.5.0 2026-03-04 01:04:03 +05:30
cogwheel
26b0f3f8b5 feat: Enhance themed dialogs and add native chat input support
- 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.
2026-03-03 21:46:12 +05:30
cogwheel
fe604c6c57 chore: bump version to 2.4.4 2026-03-02 23:47:10 +05:30
cogwheel
4cbb8a623c feat: Implement voice call functionality with state management and audio session handling
- 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.
2026-03-02 21:47:21 +05:30