feat(local): gate egress-sensitive actions and refactor studio source selection - #1807
Conversation
Move Composer's local selected-documents Set into the workspace sources hook, passed down as selectedDocumentIds/onSelectionChange/onToggleAll, so selection state can be shared with the rest of the dashboard. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
The Composer dialog listed every ready document inline, pushing the prompt field and Generate button down as sources grew. Replace it with a compact "N sources" trigger that opens a dedicated sub-view (back button, select-all, full checklist), with a soft opacity/blur crossfade between the two and the Generate button pinned to the bottom of the main view. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…al pull
The Download button in the model catalog hits POST /llm/install, which
never called egress.require() — only the unused /providers/{provider}/pull
route did. Chat models installed through the catalog UI left silently,
with no consent popup and no destination logged. Also derive the actual
host from the resolved pull target, since Ollama's hf.co/<repo> fallback
installs go straight to huggingface.co, not registry.ollama.ai.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…n clearly The main/sources views shared one CSS grid cell so the row's height included both children's content size — a long source list could grow past its intended bound and spill out of the dialog instead of scrolling. Overlay sources with position:absolute instead: main alone (in normal flow) sets the dialog's height per format, and sources fills that box exactly via inset-0, so its list scrolls within whatever height that format's dialog has, however long the list gets. Also renames the Updates settings heading to "App updates", matching how it's already referred to in its own description and in Settings > Network. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…move-speaker destructive "Check now" now asks for App updates consent via the same egress prompt the sidebar's automatic check already uses, instead of being disabled until the automatic-updates switch is turned on elsewhere in the dialog. Also gives the remove-speaker button in the podcast brief form a destructive variant so a removal reads as such. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…t, bump list header text size Select now lives in components/ui so other forms can reuse the OS-native picker instead of a Radix/Base UI popup; Sources and Artifacts headers move from text-xs to text-sm to match the rest of the panel.
The list's top/bottom fade blended toward --background, but the dialog itself renders on --popover; the mismatch showed as a visible seam around the first row.
Biome's noLabelWithoutControl couldn't verify the label wrapping Radix's button-based Checkbox, so use useId + Label htmlFor/id instead of wrapping. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
@AnishSarkar22 is attempting to deploy a commit to the Rohan Verma's projects Team on Vercel. A member of the Team first needs to authorize it. |
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Advanced Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Description
noLabelWithoutControl)Motivation and Context
FIX #
Screenshots
API Changes
Change Type
Testing Performed
Checklist
High-level PR Summary
This PR enhances the egress control system to properly handle Ollama model pulls from different sources (Ollama registry vs Hugging Face). The backend now distinguishes between library pulls from
registry.ollama.aiandhf.co/*fallback pulls fromhuggingface.co, ensuring network permissions are checked with the correct host. The frontend improves the Studio artifact creation workflow by adding a dedicated sources selection view, extracting a reusableSelectcomponent, and refining various UI text and styling details across settings and panels.⏱️ Estimated Review Time: 30-90 minutes
💡 Review Order Suggestion
surfsense_local/backend/modules/egress/service.pysurfsense_local/backend/tests/unit/egress/test_service.pysurfsense_local/backend/modules/llm/router.pysurfsense_local/backend/modules/llm/recommendations/router.pysurfsense_local/backend/tests/integration/llm/test_egress.pysurfsense_local/backend/tests/integration/llm/test_routes.pysurfsense_local/frontend/src/features/egress/network-settings.tsxsurfsense_local/frontend/src/features/updates/update-settings.tsxsurfsense_local/frontend/src/components/ui/select.tsxsurfsense_local/frontend/src/features/studio/podcast-brief-form.tsxsurfsense_local/frontend/src/features/studio/studio-panel.tsxsurfsense_local/frontend/src/features/dashboard/dashboard-page.tsxsurfsense_local/frontend/src/features/settings/models-settings.tsxsurfsense_local/frontend/src/features/license/license-settings.tsxsurfsense_local/frontend/src/features/sources/sources-panel.tsxsurfsense_local/frontend/src/features/studio/artifact-list.tsxsurfsense_local/frontend/src/features/chat/chats-dialog.tsxsurfsense_local/frontend/src/features/chat/chats-dialog.tsxfromprop from ScrollShadow component, unrelated to egress/catalog or Studio workflow improvementssurfsense_local/frontend/src/features/sources/sources-panel.tsxsurfsense_local/frontend/src/features/studio/artifact-list.tsx