Fix/493 profile sync on desktop not working with old already existing profiles#504
Conversation
…t and improve filename generation feat(api): enhance profile synchronization to allow media backfill for missing icons and thumbnails fix(ui): adjust mobile header and sidebar padding for safe area insets feat(ui): add remote execution support indicators in model cards and detail sheets style(ui): improve global CSS for iOS Tauri app compatibility and scroll containment refactor(oauth): streamline OAuth service to handle API proxying for web platforms and improve error handling
…APIs - Moved the "url" and "path" properties within their respective objects to improve clarity and structure in the desktop and macOS schemas. - Updated descriptions for "url" and "path" properties to maintain consistency. - Reintroduced the "ShellScopeEntryAllowedArgs" definition to ensure command argument validation is properly documented and structured.
… components - Changed sticky top positioning from var(--fl-safe-top) to 0 in PatManagementPage, layout, and runtime-vars page components for consistent behavior. - Adjusted padding in AppSidebar components to account for safe bottom variable.
- Updated AppSidebar to include safe area insets for mobile devices. - Modified getProfileBits method to include profile ID in the API call and handle cases where the profile ID is not available. - Added auth_method configuration to flow-like.config.json for better OAuth flexibility. - Implemented new route for retrieving profile bits in the API. - Enhanced OAuth token exchange to support both Basic JSON and Form POST methods based on provider configuration. - Introduced a new caching mechanism for profile bits retrieval to improve performance. - Updated UI components to handle new state management for bit selection and chat interfaces. - Improved styling and layout for mobile headers and sidebars to accommodate safe area insets. - Added support for Tauri in multiple Cargo.toml files across the project.
- Updated `write_cell.rs` and `write_cell_html.rs` to utilize a cached workbook approach for improved performance and reduced memory usage. - Implemented `flush_workbook` function to handle workbook saving more efficiently. - Enhanced `insert_db.rs` to support Arrow-based batch inserts from TDMS files, including new iterator structures for reading TDMS channel data. - Refined metadata handling in `metadata.rs` to align with the new TDMS library structure. - Added error handling improvements across ONNX nodes to provide clearer execution failure messages. - Introduced a safe conversion function in `markitdown.rs` to handle potential panics during document conversion. - Updated LanceDB integration to support record batch insertion, improving database interaction efficiency.
- Renamed Blog.css to blog.css for consistency. - Enhanced blog post layout with improved header and content sections. - Added responsive design adjustments for better viewing on various devices. - Updated structured data scripts to use inline attributes for better performance. - Improved accessibility by adding alt text to images. - Refined tag and RSS feed presentation for clarity and usability. - Fixed minor CSS issues to ensure consistent styling across blog components.
…ort across multiple components
…lt features feat: add loading state to TableView component in explore page feat: enhance package.json scripts for Android development chore: update @xyflow/react to version 12.10.0 across multiple packages chore: update blog post for new features and improvements fix: adjust Cargo.toml for various packages to use rustls variants fix: modify log aggregation state to include loading state management style: improve global CSS for safe area insets refactor: update IMAP and SMTP connections to use tokio-rustls
- Android App Setup - Fixed IOS App Save Spaces - Added Data Deletion Page on Website - Performance Improvements for Embedding, Chunking and Chat
| "Content-Type": file.type || "application/octet-stream", | ||
| }; | ||
|
|
||
| if (url.includes(".blob.core.windows.net")) { |
Check failure
Code scanning / CodeQL
Incomplete URL substring sanitization High
Show autofix suggestion
Hide autofix suggestion
Copilot Autofix
AI about 2 months ago
In general, to fix this kind of issue you should parse the URL and inspect its host (and optionally protocol) instead of checking for a substring on the full URL. That way, .blob.core.windows.net appearing in the path or query string does not affect the logic, and you can ensure the host truly is (or ends with) the Azure Blob Storage domain.
The best fix here is to parse the url with the standard URL constructor available in the browser, retrieve hostname, and only add the x-ms-blob-type header when the hostname is exactly an Azure Blob host or a subdomain under blob.core.windows.net. This preserves the current intended behavior (“apply Azure-specific header for Azure Blob URLs”) while avoiding matches on arbitrary hosts that merely contain the substring.
Concretely, in apps/web/app/settings/profiles/page.tsx within uploadToSignedUrl, replace the if (url.includes(".blob.core.windows.net")) check with code that:
- Safely constructs a
URLobject from the string. - Extracts
hostname. - Checks
hostname === "blob.core.windows.net"orhostname.endsWith(".blob.core.windows.net"). - Only then sets
headers["x-ms-blob-type"] = "BlockBlob".
If parsing fails (malformed URL), we can simply skip setting the Azure-specific header and let the upload proceed with generic headers, which is safer than guessing based on a substring. No new imports are necessary; the global URL API is available in the browser environment where this code runs ("use client" React component).
| @@ -138,8 +138,17 @@ | ||
| "Content-Type": file.type || "application/octet-stream", | ||
| }; | ||
|
|
||
| if (url.includes(".blob.core.windows.net")) { | ||
| headers["x-ms-blob-type"] = "BlockBlob"; | ||
| try { | ||
| const parsedUrl = new URL(url); | ||
| const hostname = parsedUrl.hostname.toLowerCase(); | ||
| if ( | ||
| hostname === "blob.core.windows.net" || | ||
| hostname.endsWith(".blob.core.windows.net") | ||
| ) { | ||
| headers["x-ms-blob-type"] = "BlockBlob"; | ||
| } | ||
| } catch { | ||
| // If the URL cannot be parsed, fall back to generic headers. | ||
| } | ||
|
|
||
| const response = await fetch(url, { |
Summary of ChangesHello @felix-schultz, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! This pull request significantly advances the Flow-Like project by expanding its mobile capabilities, bolstering network security, and refining the user experience. The changes ensure a more consistent and secure environment across platforms, particularly for mobile users, while also streamlining the contribution process for developers. Highlights
Changelog
Activity
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here. You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension. Footnotes
|
There was a problem hiding this comment.
Pull request overview
This PR addresses desktop profile sync issues with existing/legacy profiles while also hardening cross-platform behavior (iOS/Android/desktop app), standardizing Rust networking dependencies on rustls, and improving UI loading/error states across the UI packages and apps.
Changes:
- Fix/profile-sync enhancements: media backfill, canonical
.webphandling, and a new profile-bits API endpoint consumed by web/UI. - Security/consistency: migrate multiple Rust crates from native-tls/default features to rustls-based TLS and adjust platform-specific ML/dependency gating.
- UX/platform hardening: add safe-area handling, skeleton/loading states, routing fallbacks, and deep link / universal link support.
Reviewed changes
Copilot reviewed 238 out of 262 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| packages/ui/state/log-aggregation-state.ts | Add loading state + error-safe refetch behavior for log aggregation. |
| packages/ui/package.json | Bump @xyflow/react. |
| packages/ui/global.css | Desktop-app safe-area + scroll containment hardening CSS. |
| packages/ui/components/ui/sidebar.tsx | Apply safe-area padding to sidebar. |
| packages/ui/components/ui/model-detail-sheet.tsx | Add “Remote” / “Local only” capability badges. |
| packages/ui/components/pages/home/tutorial-dialog.tsx | Use shared safe-area var for padding. |
| packages/ui/components/interfaces/chat-default/message.tsx | Replace timeout-based measurement with ResizeObserver. |
| packages/ui/components/interfaces/chat-default/chatbox.tsx | Tweak placeholder + sizing/spacing for chat input UI. |
| packages/ui/components/flow/flow-runs.tsx | Show loading indicator while runs are being fetched. |
| packages/ui/components/flow/flow-pin/variable-types/bit-select.tsx | Fetch profile bits on-demand when selector opens. |
| packages/types/Cargo.toml | Switch reqwest to rustls (disable default features). |
| packages/storage/src/lib.rs | Export Android store module + expose lance crates. |
| packages/storage/Cargo.toml | Add lance/lance-io deps + async-trait. |
| packages/model-provider/Cargo.toml | Treat Android as “mobile target” for ort download-binary disabling. |
| packages/executor/src/streaming.rs | Pass optional Lance write options into log flushing. |
| packages/executor/src/execute.rs | Pass optional Lance write options into log flushing. |
| packages/executor/Cargo.toml | Add tauri feature + switch reqwest to rustls. |
| packages/core/src/utils/http.rs | Lazily init reqwest client (OnceLock) to avoid iOS runloop issues. |
| packages/core/src/utils/cache.rs | Add $HOME/.cache fallback for cache directory. |
| packages/core/src/state.rs | Add lance_write_options callback registration. |
| packages/core/src/models/image_embedding/local.rs | Move embedding to spawn_blocking to avoid blocking async runtime. |
| packages/core/src/models/embedding/local.rs | Move embedding to spawn_blocking to avoid blocking async runtime. |
| packages/catalog/web/src/mail/smtp.rs | Replace async-native-tls with tokio-rustls for SMTP node. |
| packages/catalog/web/Cargo.toml | Add rustls deps; switch serenity/teloxide to rustls-friendly configs. |
| packages/catalog/std/src/utils/string/unescape.rs | Add new “String Unescape” node. |
| packages/catalog/std/src/utils/string/replace.rs | Add optional regex replace support + node version bump. |
| packages/catalog/std/src/utils/string/escape.rs | Add new “String Escape” node. |
| packages/catalog/std/src/utils/string.rs | Export new string nodes (escape/unescape). |
| packages/catalog/std/src/control/while_loop.rs | Re-trigger missing dependencies inside loop iterations. |
| packages/catalog/onnx/src/utils.rs | Use flow_like_types::anyhow! in non-execute code paths. |
| packages/catalog/onnx/src/ocr.rs | Use flow_like_types::anyhow! in non-execute code paths. |
| packages/catalog/onnx/src/batch.rs | Use flow_like_types::anyhow! in non-execute code paths. |
| packages/catalog/onnx/Cargo.toml | Dev-dep reqwest switched to rustls. |
| packages/catalog/llm/src/llm/find_llm.rs | Restrict to hosted models on mobile / non-tauri builds. |
| packages/catalog/llm/src/embedding/text/chunk_text_char.rs | Run chunking in spawn_blocking. |
| packages/catalog/llm/src/embedding/text/chunk_text.rs | Run chunking in spawn_blocking. |
| packages/catalog/llm/Cargo.toml | Add tauri feature wiring. |
| packages/catalog/data/src/data/tdms/metadata.rs | Switch TDMS implementation to tdms-rs and update parsing logic. |
| packages/catalog/data/src/data/excel/write_cell_html.rs | Use cached workbook helpers instead of re-reading/writing per op. |
| packages/catalog/data/src/data/excel/write_cell.rs | Use cached workbook helpers instead of re-reading/writing per op. |
| packages/catalog/data/src/data/excel/remove_row.rs | Use cached workbook helpers instead of re-reading/writing per op. |
| packages/catalog/data/src/data/excel/remove_column.rs | Use cached workbook helpers instead of re-reading/writing per op. |
| packages/catalog/data/src/data/excel/new_worksheet.rs | Use cached workbook helpers; improve sheet creation behavior. |
| packages/catalog/data/src/data/excel/insert_row.rs | Use cached workbook helpers; keep ref-adjust behavior. |
| packages/catalog/data/src/data/excel/insert_column.rs | Use cached workbook helpers; keep ref-adjust behavior. |
| packages/catalog/data/src/data/db/vector/list_tables.rs | Apply Lance write options when listing tables. |
| packages/catalog/data/src/data/db/vector.rs | Apply Lance write options when creating cached DB. |
| packages/catalog/data/Cargo.toml | Switch TDMS dep; use rustls DB provider feature variants; reqwest rustls dev-dep. |
| packages/catalog/core/Cargo.toml | Add tauri feature wiring. |
| packages/catalog/Cargo.toml | Add tauri feature wiring. |
| packages/api/src/routes/profile/sync_profiles.rs | Add “one-time” media backfill when timestamps prevent metadata updates. |
| packages/api/src/routes/profile.rs | Canonical .webp DB filename handling + add /profile/{id}/bits route. |
| packages/api/src/openapi.rs | Include new profile bits endpoint in OpenAPI. |
| packages/api/src/routes/profile/get_profile_bits.rs | New endpoint: list bits for a profile with language/limit/offset. |
| packages/api/Cargo.toml | Switch reqwest blocking client to rustls. |
| package.json | Add Android dev/build scripts; remove hard-coded ORT path in build:xcode script. |
| flow-like.config.json | Add Notion auth_method. |
| apps/website/src/sections/reading.astro | Improve image alt text for accessibility. |
| apps/website/src/sections/hero.astro | Update CTAs (download, web app link) and messaging. |
| apps/website/src/pages/zh/index.astro | Inline structured data scripts via set:html. |
| apps/website/src/pages/zh/data-deletion.astro | Add localized data deletion page. |
| apps/website/src/pages/thirdparty/callback.astro | Improve desktop/iOS deep link vs universal link fallback behavior. |
| apps/website/src/pages/tags/index.astro | Redesign tags index + rename CSS import casing. |
| apps/website/src/pages/tags/[tag].astro | Redesign tag page + lead/compact post layout. |
| apps/website/src/pages/sv/index.astro | Inline structured data scripts via set:html. |
| apps/website/src/pages/sv/data-deletion.astro | Add localized data deletion page. |
| apps/website/src/pages/rss.xml.js | Brand RSS + fix blog link prefix. |
| apps/website/src/pages/pt/index.astro | Inline structured data scripts via set:html. |
| apps/website/src/pages/pt/data-deletion.astro | Add localized data deletion page. |
| apps/website/src/pages/nl/index.astro | Inline structured data scripts via set:html. |
| apps/website/src/pages/nl/data-deletion.astro | Add localized data deletion page. |
| apps/website/src/pages/ko/index.astro | Inline structured data scripts via set:html. |
| apps/website/src/pages/ko/data-deletion.astro | Add localized data deletion page. |
| apps/website/src/pages/ja/index.astro | Inline structured data scripts via set:html. |
| apps/website/src/pages/ja/data-deletion.astro | Add localized data deletion page. |
| apps/website/src/pages/it/index.astro | Inline structured data scripts via set:html. |
| apps/website/src/pages/it/data-deletion.astro | Add localized data deletion page. |
| apps/website/src/pages/index.astro | Update SEO copy + add FAQ structured data + inline JSON-LD scripts. |
| apps/website/src/pages/fr/index.astro | Inline structured data scripts via set:html. |
| apps/website/src/pages/fr/data-deletion.astro | Add localized data deletion page. |
| apps/website/src/pages/es/index.astro | Inline structured data scripts via set:html. |
| apps/website/src/pages/es/data-deletion.astro | Add localized data deletion page. |
| apps/website/src/pages/desktop/callback.astro | Universal link + legacy deep link fallback for iOS. |
| apps/website/src/pages/de/index.astro | Inline structured data scripts via set:html. |
| apps/website/src/pages/de/data-deletion.astro | Add localized data deletion page. |
| apps/website/src/pages/data-deletion.astro | Add English data deletion page entrypoint. |
| apps/website/src/pages/callback.astro | Universal link + legacy deep link fallback for iOS. |
| apps/website/src/lib/seo.ts | Add alternate hreflang link builder + OG locale helper. |
| apps/website/src/layouts/home-layout.astro | Inline structured data scripts via set:html. |
| apps/website/src/i18n/locales/pages/index.ts | Export data deletion translations. |
| apps/website/src/i18n/locales/pages/data-deletion.ts | Add translation registry + tDataDeletion(). |
| apps/website/src/i18n/locales/pages/common-zh.ts | Add footer “data deletion” translation. |
| apps/website/src/i18n/locales/pages/common-sv.ts | Add footer “data deletion” translation. |
| apps/website/src/i18n/locales/pages/common-pt.ts | Add footer “data deletion” translation. |
| apps/website/src/i18n/locales/pages/common-nl.ts | Add footer “data deletion” translation. |
| apps/website/src/i18n/locales/pages/common-ko.ts | Add footer “data deletion” translation. |
| apps/website/src/i18n/locales/pages/common-ja.ts | Add footer “data deletion” translation. |
| apps/website/src/i18n/locales/pages/common-it.ts | Add footer “data deletion” translation. |
| apps/website/src/i18n/locales/pages/common-fr.ts | Add footer “data deletion” translation. |
| apps/website/src/i18n/locales/pages/common-es.ts | Add footer “data deletion” translation. |
| apps/website/src/i18n/locales/pages/common-en.ts | Add footer “data deletion” translation. |
| apps/website/src/i18n/locales/pages/common-de.ts | Add footer “data deletion” translation. |
| apps/website/src/i18n/locales/en.ts | Update marketing copy strings. |
| apps/website/src/content/blog/2026-02-26-alpha-0-0-9.mdx | Expand draft release notes. |
| apps/website/src/components/pricing/PricingPage.astro | Add hreflang alternates + OG locale + i18n-based title/desc. |
| apps/website/src/components/post-card.astro | Prevent underline styling on clickable cards. |
| apps/website/src/components/header.tsx | Add “Open Web App” link + “Studio” labeling. |
| apps/website/src/components/footer.tsx | Add data deletion footer link. |
| apps/website/src/components/download/Hero.astro | Add “Studio” naming + styling tweaks. |
| apps/website/src/components/download/DownloadPage.astro | Add hreflang alternates + canonical handling. |
| apps/website/src/components/compare/ComparePage.astro | Add hreflang alternates + OG locale. |
| apps/website/src/components/blog-footer.tsx | Add data deletion footer link. |
| apps/website/src/components/bi/ModernBI.astro | Add hreflang alternates + OG locale. |
| apps/website/src/components/24h/Solution24h.astro | Add hreflang alternates + OG locale. |
| apps/website/public/robots.txt | Add robots + sitemap reference. |
| apps/website/package.json | Increase Node heap for astro build. |
| apps/website/astro.config.mjs | Expand i18n locales; adjust integrations list. |
| apps/web/public/_headers | Set content-types for well-known association files. |
| apps/web/public/.well-known/assetlinks.json | Add Android app links association file. |
| apps/web/public/.well-known/apple-app-site-association | Add Apple universal links association file. |
| apps/web/package.json | Bump @xyflow/react. |
| apps/web/lib/web-states/event-state.ts | Instantiate OAuth service with hub-derived API base URL. |
| apps/web/lib/web-states/board-state.ts | Instantiate OAuth service with hub-derived API base URL; update copilot URL. |
| apps/web/lib/web-states/bit-state.ts | Fetch profile bits via new API endpoint. |
| apps/web/lib/oauth-service.ts | Normalize API base URL and create per-base-url OAuth service instances. |
| apps/web/components/oauth-callback-handler.tsx | Use OAuth service derived from pending callback base URL. |
| apps/web/components/app-sidebar.tsx | Apply safe-area padding to main/inset containers. |
| apps/web/app/use/page.tsx | Improve reroute behavior while queries are pending. |
| apps/web/app/store/page.tsx | Pass canUseApp into Store UI components. |
| apps/web/app/store/components/StoreInfo.tsx | Hide “Use App” when not applicable; refine CTA states/labels. |
| apps/web/app/sitemap.ts | Add static sitemap routes. |
| apps/web/app/robots.ts | Add static robots metadata with sitemap. |
| apps/web/app/library/config/pages/page.tsx | Use hub-derived OAuth service in config pages. |
| apps/web/app/library/config/layout.tsx | Refine “Use App” link logic to consider active routes/events only. |
| apps/web/app/library/config/explore/page.tsx | Add table view skeleton loading state. |
| apps/web/app/library/config/events/page.tsx | Use hub-derived OAuth service in events settings page. |
| apps/web/app/layout.tsx | Improve SEO metadata (title/description/robots/alternates). |
| apps/embedded/package.json | Bump @xyflow/react. |
| apps/docs/src/pages/index.astro | Update docs landing SEO copy. |
| apps/docs/public/robots.txt | Add robots + sitemap reference. |
| apps/docs/astro.config.mjs | Update docs site title/description and add robots meta. |
| apps/desktop/src-tauri/tauri.conf.json | Add universal link deep-link config + bump version. |
| apps/desktop/src-tauri/src/functions/settings/profiles.rs | Fix updated timestamps + handle asset proxy icon paths. |
| apps/desktop/src-tauri/src/functions/flow/run.rs | Pass optional Lance write options into log flush. |
| apps/desktop/src-tauri/src/functions/app/tables.rs | Apply Lance write options for vector DB usage. |
| apps/desktop/src-tauri/src/event_bus.rs | Pass optional Lance write options + add HOME fallback. |
| apps/desktop/src-tauri/gen/apple/flow-like-desktop_iOS/flow-like-desktop_iOS.entitlements | Add associated domains (universal links). |
| apps/desktop/src-tauri/gen/apple/flow-like-desktop_iOS/Info.plist | Bump version + add URL scheme + status bar config. |
| apps/desktop/src-tauri/gen/android/settings.gradle | Android project wiring for Tauri build. |
| apps/desktop/src-tauri/gen/android/gradlew.bat | Add gradle wrapper for Windows. |
| apps/desktop/src-tauri/gen/android/gradle/wrapper/gradle-wrapper.properties | Configure gradle wrapper distribution. |
| apps/desktop/src-tauri/gen/android/gradle.properties | Android gradle defaults (AndroidX, JVM args, etc.). |
| apps/desktop/src-tauri/gen/android/buildSrc/src/main/java/com/flow_like/app/kotlin/RustPlugin.kt | Custom Gradle plugin to build Rust libs per ABI. |
| apps/desktop/src-tauri/gen/android/buildSrc/src/main/java/com/flow_like/app/kotlin/BuildTask.kt | Gradle task to invoke Tauri CLI for Rust builds. |
| apps/desktop/src-tauri/gen/android/buildSrc/build.gradle.kts | BuildSrc plugin configuration for Android project. |
| apps/desktop/src-tauri/gen/android/build.gradle.kts | Root gradle buildscript for Android. |
| apps/desktop/src-tauri/gen/android/app/src/main/res/xml/file_paths.xml | FileProvider paths for Android. |
| apps/desktop/src-tauri/gen/android/app/src/main/res/values/themes.xml | Android theme including cutout/status bar transparency. |
| apps/desktop/src-tauri/gen/android/app/src/main/res/values/strings.xml | Android app strings. |
| apps/desktop/src-tauri/gen/android/app/src/main/res/values/colors.xml | Android color resources. |
| apps/desktop/src-tauri/gen/android/app/src/main/res/values-night/themes.xml | Night theme variant. |
| apps/desktop/src-tauri/gen/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp | Android launcher assets. |
| apps/desktop/src-tauri/gen/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp | Android launcher assets. |
| apps/desktop/src-tauri/gen/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp | Android launcher assets. |
| apps/desktop/src-tauri/gen/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml | Adaptive icon config. |
| apps/desktop/src-tauri/gen/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml | Adaptive icon config. |
| apps/desktop/src-tauri/gen/android/app/src/main/res/layout/activity_main.xml | Android main activity layout. |
| apps/desktop/src-tauri/gen/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml | Vector foreground icon resource. |
| apps/desktop/src-tauri/gen/android/app/src/main/AndroidManifest.xml | Android manifest including deep links + FileProvider. |
| apps/desktop/src-tauri/gen/android/app/proguard-rules.pro | Proguard rules stub. |
| apps/desktop/src-tauri/gen/android/app/build.gradle.kts | Android app Gradle config + rust plugin wiring. |
| apps/desktop/src-tauri/gen/android/app/.gitignore | Ignore generated Android artifacts. |
| apps/desktop/src-tauri/gen/android/.gitignore | Ignore Android workspace/build artifacts. |
| apps/desktop/src-tauri/gen/android/.editorconfig | Editor config for generated Android project. |
| apps/desktop/src-tauri/Info.plist | Add URL scheme + formatting cleanup. |
| apps/desktop/src-tauri/Cargo.toml | Add plist dep; enable catalog tauri feature; switch sentry to rustls. |
| apps/desktop/package.json | Add Android dev/build scripts; bump @xyflow/react. |
| apps/desktop/index.html | Mark desktop app + add early safe-area probe script. |
| apps/desktop/components/add-profile.tsx | Set created/updated timestamps on profile creation. |
| apps/desktop/app/use/page.tsx | Improve reroute behavior while queries are pending. |
| apps/desktop/app/store/page.tsx | Pass canUseApp into Store UI components. |
| apps/desktop/app/store/components/StoreInfo.tsx | Hide “Use App” when not applicable; refine CTA states/labels. |
| apps/desktop/app/store/components/StoreHero.tsx | UI tweaks for avatar + share button. |
| apps/desktop/app/settings/profiles/page.tsx | Update updated timestamps on local profile edits. |
| apps/desktop/app/onboarding/layout.tsx | Use shared safe-area vars for padding. |
| apps/desktop/app/library/config/explore/page.tsx | Add table view skeleton loading + count error UI. |
| apps/desktop/app/layout.tsx | Add data-desktop-app attribute + iOS webview hardening component. |
| apps/backend/kubernetes/executor/Cargo.toml | Switch reqwest to rustls. |
| apps/backend/docker-compose/sink-services/Cargo.toml | Switch reqwest to rustls. |
| apps/backend/docker-compose/api/Cargo.toml | Switch reqwest to rustls. |
| Cargo.toml | Switch sea-orm runtime to rustls, standardize rustls-based deps, add dev profile tuning for Android APK size/ZIP32. |
| let tcp_stream = inner_plain.into_inner(); | ||
| let tls_stream = tls().connect(&host, tcp_stream).await?; | ||
| let connector = rustls_connector(true); | ||
| let server_name = rustls_pki_types::ServerName::try_from(host.clone())?; | ||
| let tls_stream = connector.connect(server_name, tcp_stream).await?; |
There was a problem hiding this comment.
In the STARTTLS path, the TLS connector is created with certificate verification disabled (custom NoVerifier). This makes the SMTP connection vulnerable to MITM attacks. Use a verifying rustls config by default (root store + hostname validation) and only allow the insecure mode behind an explicit opt-in input (e.g. accept_invalid_tls, default false) for local/testing use cases.
| let chunks = tokio::task::spawn_blocking(move || -> flow_like_types::Result<Vec<String>> { | ||
| if markdown { | ||
| let config = ChunkConfig::new(capacity as usize).with_overlap(overlap as usize)?; | ||
| let splitter = TextSplitter::new(config); | ||
| Ok(splitter | ||
| .chunks(&text) | ||
| .map(|c| c.to_string()) | ||
| .collect::<Vec<String>>()) | ||
| } else { | ||
| let config = ChunkConfig::new(capacity as usize).with_overlap(overlap as usize)?; | ||
| let splitter = MarkdownSplitter::new(config); | ||
| Ok(splitter |
There was a problem hiding this comment.
ChunkTextChar uses TextSplitter when markdown is true and MarkdownSplitter when false, which is the opposite of what the pin description says (Markdown-aware splitting when true). Swap the splitter selection so markdown=true uses MarkdownSplitter and markdown=false uses TextSplitter.
| let models = bit::Entity::find() | ||
| .filter(bit::Column::Id.is_in(paginated)) | ||
| .filter( | ||
| meta::Column::Lang | ||
| .is_null() | ||
| .or(meta::Column::Lang.eq(language)) | ||
| .or(meta::Column::Lang.eq("en")), | ||
| ) |
There was a problem hiding this comment.
The query filters meta.lang to (null | requested | en). With find_with_related, this can exclude an entire bit if it only has metadata in other languages (because no joined rows match the filter). To avoid missing bits, don’t filter the joined metadata rows this way; instead fetch bits first and then fetch/select the best metadata in code (or fetch all meta rows for those bits and pick the best match).
| } else if let Some(home) = std::env::var_os("HOME") { | ||
| PathBuf::from(home).join("flow-like").join("event-bus") |
There was a problem hiding this comment.
event_bus_dir() falls back to $HOME/flow-like/event-bus, whereas other cache/data fallbacks use $HOME/.cache/... (e.g. packages/core/src/utils/cache.rs and Android cache root). Consider aligning this fallback to use $HOME/.cache/flow-like/event-bus to avoid cluttering the home directory and to keep cache paths consistent.
| "package_name": "com.flow-like.app", | ||
| "sha256_cert_fingerprints": [ | ||
| "REPLACE_WITH_RELEASE_CERT_SHA256_FINGERPRINT" | ||
| ] |
There was a problem hiding this comment.
assetlinks.json still contains a placeholder SHA-256 cert fingerprint ("REPLACE_WITH_RELEASE_CERT_SHA256_FINGERPRINT"). This will cause Android App Links verification to fail in production. Replace it with the real release keystore fingerprint, or generate this file during deployment so it stays in sync with signing credentials.
There was a problem hiding this comment.
Code Review
This is an extensive and high-quality pull request that delivers significant improvements across the entire project. The core fix for profile syncing appears to be correctly implemented by updating timestamps to trigger synchronization. Beyond the main fix, the PR introduces major enhancements including robust Android support, a complete migration from native-tls to rustls for better security and compatibility, and substantial performance and UX improvements for mobile platforms. The refactoring of the OAuth service, Excel node handling, and the TDMS import node are particularly impressive, making the codebase more modular, capable, and efficient. The attention to detail in areas like build automation, SEO, and mobile-specific UI hardening is commendable. I have one medium-severity suggestion regarding a potential limitation in fetching profile bits, but overall, this is an excellent contribution.
| const profileBits = useInvoke( | ||
| backend.bitState.getProfileBits, | ||
| backend.bitState, | ||
| [], | ||
| true, | ||
| open, | ||
| ); |
There was a problem hiding this comment.
This component fetches a list of profile bits to populate the dropdown. However, the underlying API call in both the web and desktop backends appears to be limited to fetching a maximum of 100 bits, and this component doesn't seem to implement any pagination to fetch more.
If a user has more than 100 bits in their profile, this dropdown will be incomplete, preventing them from selecting some of their bits. This could be a frustrating limitation.
To address this, you could either fetch all bits at once (if the number is expected to be reasonably small) or implement a paginated/infinite-scroll mechanism within the SelectContent to load more bits as the user scrolls.
This pull request includes several important improvements across the codebase, focusing on enhanced documentation for contributors, improved dependency security and consistency, and UI/UX enhancements for the desktop app. The most significant changes are a major rewrite of the
CONTRIBUTING.mdfor clarity and onboarding, a switch to Rustls-based TLS for all network dependencies, and improvements to loading/error states and iOS-specific navigation in the desktop app.Documentation & Contributor Experience:
CONTRIBUTING.mdto provide clearer onboarding instructions, project structure overview, contribution areas, workflow, code guidelines, and links to resources. The new guide is more concise, beginner-friendly, and actionable.Dependency Security & Consistency:
reqwest,lettre, and related dependencies to userustls-tlsinstead of native-tls, improving security and cross-platform compatibility. Also updatedmarkitdown,rig-core, andsentrycrates to disable default features and enable Rustls-related features. [1] [2] [3] [4] [5] [6] [7]Desktop App UI/UX Improvements:
TableViewLoadingState) for the table view and improved error handling for table counts inapps/desktop/app/library/config/explore/page.tsx, resulting in a smoother user experience during data loads. [1] [2] [3]apps/desktop/app/library/config/layout.tsx. [1] [2]Desktop App Platform Hardening:
IOSWebviewHardeningcomponent and newdata-desktop-app="true"attributes inapps/desktop/app/layout.tsxto improve platform detection and security for iOS webviews. [1] [2] [3]Build & Debug Configuration:
[profile.dev]section inCargo.tomlto reduce debug info and optimize build size for Android APKs, helping avoid ZIP32 limits.