feat(local): polish local app UI: artifact filtering, settings, and sidebar - #1779
Conversation
|
@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 |
Anish's artifact list work (MODSetter#1779) landed on dev while this branch was open, and both sides grew the same three features. Resolved by keeping one implementation of each, not both: - Retry/regenerate: dev added POST /artifacts/{id}/retry (failed only), this branch POST .../regenerate (failed or finished, checks the model is still selected, bumps generation so the row's files are re-read). Kept regenerate and pointed dev's retry affordances at it; the row still says "Retry" when it failed and "Regenerate" when it is ready. Carried dev's re-enqueue assertion into the regenerate test. - Format icons: dev extracted FORMAT_ICONS to studio-formats.ts, this branch to catalog.ts. Kept studio-formats.ts (already on dev), moved STUDIO_CATALOG into it, deleted catalog.ts and its now-unused formatLabel: the backend catalog supplies the filter's labels. - Type filter: kept dev's version (per-type counts, per-workspace persistence, clear-filter, its own empty state) over this branch's simpler one, plus this branch's two additions — the row's relative timestamp, and hiding the filter until a second type exists. Also carried by hand where the auto-merge produced valid-looking but broken files: one FilterIcon in icons.tsx (both sides added it), one artifact action prop in dashboard-page.tsx, and the artifacts test's queue import, which this branch split into ingest_queue and studio_queue. Backend 296 pass, frontend 121 pass. The one failing frontend test (app-bootstrap composer chip) and the lint errors in chat/use-chat-runtime and chat/inline-citation arrive with dev and fail there identically.
Description
Motivation and Context
FIX #
Screenshots
API Changes
Change Type
Testing Performed
Checklist
High-level PR Summary
This PR implements UI polish and fixes for the local app, focusing on three main areas: (1) Adding retry functionality for failed artifacts with both backend API support and frontend UI including retry buttons, error tooltips, and toast notifications; (2) Implementing artifact filtering by type with a dropdown filter in the artifacts panel that persists per workspace; (3) Adding various UI improvements including a combobox component with common model endpoints, better error messaging patterns (showing generic hints on hover with detailed errors on Ctrl/Cmd+hover), a Plugins navigation action with "Coming soon" badge, theme toggle keyboard shortcut refinement (now Cmd/Ctrl+Shift+D), artifact count badges, and numerous component styling fixes across buttons, checkboxes, and form elements.
⏱️ Estimated Review Time: 30-90 minutes
💡 Review Order Suggestion
surfsense_local/frontend/src/components/ui/button.tsxsurfsense_local/frontend/src/components/ui/input-group.tsxsurfsense_local/frontend/src/components/ui/combobox.tsxsurfsense_local/frontend/src/components/ui/icons.tsxsurfsense_local/frontend/src/hooks/use-modifier-held.tssurfsense_local/frontend/src/components/theme-provider.tsxsurfsense_local/frontend/src/components/ui/sonner.tsxsurfsense_local/backend/modules/artifacts/service.pysurfsense_local/backend/modules/artifacts/router.pysurfsense_local/backend/tests/integration/artifacts/test_routes.pysurfsense_local/frontend/src/features/studio/api.tssurfsense_local/frontend/src/features/studio/studio-formats.tssurfsense_local/frontend/src/features/studio/use-studio.tssurfsense_local/frontend/src/features/studio/use-studio.test.tssurfsense_local/frontend/src/features/studio/artifact-list.tsxsurfsense_local/frontend/src/features/studio/artifact-list.test.tsxsurfsense_local/frontend/src/features/studio/studio-panel.tsxsurfsense_local/frontend/src/features/studio/studio-panel.test.tsxsurfsense_local/frontend/src/features/sources/sources-panel.tsxsurfsense_local/frontend/src/features/sources/source-upload.test.tsxsurfsense_local/frontend/src/features/model-selection/connection-form.tsxsurfsense_local/frontend/src/features/egress/network-settings.tsxsurfsense_local/frontend/src/features/updates/update-settings.tsxsurfsense_local/frontend/src/features/updates/update-settings.test.tsxsurfsense_local/frontend/src/features/chat/thread-list.tsxsurfsense_local/frontend/src/features/chat/thread-list.test.tsxsurfsense_local/frontend/src/features/dashboard/right-panel.tsxsurfsense_local/frontend/src/features/dashboard/dashboard-page.tsxsurfsense_local/frontend/src/features/dashboard/dashboard-page.test.tsxsurfsense_local/frontend/src/features/workspaces/workspace-rail.tsxsurfsense_local/frontend/src/features/settings/settings-dialog.tsx