Commit graph

37941 commits

Author SHA1 Message Date
Cursor Agent
bfbd51945c
chore(ui): repair failing vitest tests after shadcn migration (batch B)
Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 15:16:16 +00:00
Cursor Agent
484741b5f7
chore(ui): repair failing vitest tests after shadcn migration (batch B)
Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 15:14:09 +00:00
Cursor Agent
a55a2bae7e
chore(ui): repair failing vitest tests after shadcn migration (batch B)
Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 15:08:37 +00:00
Cursor Agent
6df2178740
chore(ui): repair failing vitest tests after shadcn migration (batch B)
Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 15:02:23 +00:00
Cursor Agent
88ca3562a9
chore(ui): repair failing vitest tests after shadcn migration (batch B)
Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 14:56:48 +00:00
Cursor Agent
664e3ff98f
chore(ui): repair failing vitest tests after shadcn migration (batch B)
Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 14:51:54 +00:00
Cursor Agent
3500823aa3
chore(ui): repair failing vitest tests after shadcn migration (batch A)
Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 14:38:22 +00:00
cursor
4741e676fe
chore(ui): uninstall @heroicons/react @remixicon/react @headlessui/tailwindcss (0 src references)
Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 14:18:02 +00:00
Cursor Agent
05ffd0b9b5
chore(ui): drop antd Modal.confirm mock for migrated policies/index test
Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 14:14:25 +00:00
Cursor Agent
df917cb1ee
chore(ui): drop @ant-design/icons test mocks for migrated source files
Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 14:13:14 +00:00
Cursor Agent
69bf212b6f
chore(ui): drop @heroicons/react test mocks for migrated source files
Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 14:07:31 +00:00
Cursor Agent
d895ae5990
chore(ui): add user_agent_activity to chart-only eslint override; fix add_pass_through eslint-disable placement
Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 13:54:44 +00:00
Cursor Agent
b4441dca37
feat(ui): migrate advanced_date_picker tremor Button to shadcn Button
Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 13:50:55 +00:00
Cursor Agent
5a40bca0ce
feat(ui): migrate activity_metrics tremor Card/Grid/Text/Title to shadcn
Split the tremor import so only AreaChart/BarChart remain; replace the
Grid layout with Tailwind grid classes, Card with shadcn Card (adding
explicit p-6 to preserve tremor's default padding), Text with <p> tags,
and Title with <h3>. Swap raw text-gray-500/bg-gray-50 to semantic
text-muted-foreground/bg-muted. Update the test mock + heading level
query (Title used to render <h2>, now <h3>).

Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 13:49:29 +00:00
Cursor Agent
913030c3f5
feat(ui): migrate per_user_usage tremor table/tabs to shadcn; keep BarChart
Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 13:45:11 +00:00
Cursor Agent
7af17e56c2
feat(ui): migrate KeyModelUsageView tremor Card/Title to shadcn; keep BarChart
Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 13:43:31 +00:00
Cursor Agent
575aa1123b
feat(ui): migrate mcp_server_view tremor tabs to shadcn
Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 13:42:17 +00:00
Cursor Agent
2aefbb4129
feat(ui): migrate vector_store_management and RouterSettingsAccordion tremor tabs to shadcn
Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 13:40:32 +00:00
Cursor Agent
5afaf46f83
feat(ui): migrate teams TeamsHeaderTabs+TeamsView tremor tabs to shadcn
Refactors TeamsHeaderTabs to accept explicit panel props instead of
tremor-positional children, migrates the parent TeamsView to pass those
panels, and updates the TeamsHeaderTabs test to use the new API and
query by role.

Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 13:38:34 +00:00
Cursor Agent
5cd7a4189e
feat(ui): migrate models-and-endpoints tremor tabs to shadcn
Migrates the ModelsAndEndpointsView page Tab/TabGroup/TabList/TabPanel
to shadcn Tabs with explicit value props, and removes the TabPanel
wrappers from AllModelsTab/ModelRetrySettingsTab/PriceDataManagementTab
(they are now rendered directly inside TabsContent).

Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 13:36:27 +00:00
Cursor Agent
3f55d8d01b
feat(ui): migrate tremor pure-table files to shadcn table
Batch migration of files that only use Tremor for the Table family
(Table/TableHead/TableHeaderCell/TableBody/TableRow/TableCell).
Renames per shadcn: TableHead (thead wrapper) -> TableHeader, and
TableHeaderCell (th) -> TableHead. Updates related test mocks and
replaces the tremor Icon-based expand/collapse stub in ModelsCell.tsx
with semantic Expand/Collapse aria-labels.

Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 13:32:15 +00:00
Cursor Agent
d4371b67c7
feat(ui): migrate view_users and view_logs tremor table/select to shadcn
Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 13:25:10 +00:00
Cursor Agent
640bae5d08
feat(ui): migrate model_dashboard tremor tables to shadcn
Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 13:23:19 +00:00
Cursor Agent
a50bd7a412
feat(ui): migrate common_components/simple_table tremor table to shadcn
Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 13:21:29 +00:00
Cursor Agent
ed7e3c8888
chore(ui): add chart-only tremor files to eslint override list
Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 13:20:14 +00:00
Cursor Agent
05189c04dd
Migrate AllModelsTab and RouterConfigBuilder to shadcn (Phase 1)
- AllModelsTab.tsx: drop antd Badge/Button/Select/Skeleton/Space/Typography + @ant-design/icons -> shadcn Badge/Button/Select/Skeleton + lucide Info/Settings/Filter/RefreshCw/Search. Pagination buttons become shadcn Button variant=outline. Tremor Grid dropped (already a plain div). Kept Tremor TabPanel (still required wrapper for parent TabGroup).
- RouterConfigBuilder.tsx: antd Select/Collapse/Empty/InputNumber -> shadcn Accordion/Select + shadcn Input type=number + custom empty-state div. The tags-mode utterances picker becomes a small UtterancesInput with press-Enter/paste-multiline behavior preserved. Remove-route button is now aria-labeled 'Remove route' on the AccordionTrigger sibling.
- RouterConfigBuilder.test.tsx: two delete-button tests repaired to query by /remove route/i instead of the old antd 'delete' aria label. All 16 tests pass.

AllModelsTab is added to the raw-tailwind-colors eslint override for the categorical team/view-mode palette dots (bg-blue-500 / bg-emerald-500 / bg-purple-500).

Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 13:01:20 +00:00
Cursor Agent
7dae8f73aa
Migrate teams route chrome to shadcn (Phase 1)
- TeamsView.tsx: drop antd Form.useForm placeholders (never passed down), drop Tremor Card/Button/Col/Text/Grid -> Tailwind/shadcn. Keep Tremor TabPanel (still-required container for TeamsHeaderTabs which wraps Tremor TabGroup).
- CreateTeamModal.tsx: full RHF + Dialog + shadcn rewrite. Form.useForm -> useForm/FormProvider; Modal -> Dialog; Tremor Accordion -> shadcn Accordion; antd Select (single / multiple / tags) -> shadcn Select + custom MultiSelect/TagMultiSelect; antd Switch -> shadcn Switch; antd Input.TextArea -> shadcn Textarea; antd Tooltip -> shadcn Tooltip; Select2.Option trees -> SelectItem. Child selectors (VectorStoreSelector, MCPServerSelector, AgentSelector, MCPToolPermissions) drive Controllers instead of antd form.setFieldValue.
- TeamsTable.test.tsx / TeamsHeaderTabs.test.tsx: repair sibling tests. Drop obsolete antd and @heroicons mocks; rewrite TeamsTable admin/non-admin button assertions to semantic getByRole queries against aria-labeled shadcn buttons.

Notes: Tremor TabGroup/TabList/Tab/TabPanels still used inside TeamsHeaderTabs pending its own section (chrome-only imports kept behind eslint-disable directive already in the file). ModelsCell.test.tsx failures are pre-existing and out of scope.

Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 12:56:33 +00:00
Cursor Agent
43337912e1
Migrate top-level pages to shadcn (Phase 1)
- LoginPage.tsx: antd Form/Input/Select/Popover/Card/Alert/Space/Typography -> shadcn/Tailwind equivalents. Preserves SSO popover, worker selector, admin-disabled view, and credentials info banner. All 8 existing tests still pass.
- OnboardingFormBody.tsx: antd Form.useForm -> react-hook-form; antd Input.Password -> shadcn Input type=password. Retains aria-label='loading' spinner so existing test selector continues to work.
- src/app/page.tsx: drop antd ConfigProvider/theme wrapper; dark-mode state now toggles the 'dark' class on <html> so shadcn CSS variables switch. Removed unused QueryClient imports.

Adds src/app/onboarding/OnboardingFormBody.tsx to the raw-tailwind-colors lint exception list (SSO info-banner uses bg-blue-50 per existing design pattern).

Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 12:47:36 +00:00
Cursor Agent
0fd4379e32
feat(ui): migrate tool policies and organizations to shadcn
Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 12:39:00 +00:00
Cursor Agent
511049458d
feat(ui): migrate settings panels to shadcn
Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 12:32:31 +00:00
Cursor Agent
9028e69e76
feat(ui): migrate standalone modals to shadcn
Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 12:28:03 +00:00
Cursor Agent
75e172b0e0
feat(ui): migrate chat chrome to shadcn
- ChatMessages: chrome-only migration; antd Collapse/Panel -> shadcn Accordion for tool call card; antd Tooltip -> shadcn Tooltip for edit/copy action buttons. Message rendering, streaming state, markdown/syntax-highlighter internals untouched.
- ChatPage: antd Tooltip/Skeleton/Popover -> shadcn equivalents for sidebar nav items, model selector, MCP connect picker, and top-bar actions. Sidebar layout, storage banner, and chat input textarea preserved.
- ConversationList: antd Button/Input/Modal/Popconfirm/Tooltip/Avatar/Typography -> shadcn equivalents. Modal (Cmd+K search) -> Dialog; Popconfirm -> custom Popover with Cancel/Delete buttons; Avatar -> shadcn Avatar+Fallback.
- MCPAppsPanel: antd Spin/Input/Button/Skeleton -> shadcn Button/Input/Skeleton + LoaderCircle spinner shim; Input with prefix icon rebuilt as absolute-positioned icon + padded input.
- Add ChatMessages.tsx to no-raw-tailwind-colors override (inline code styling in markdown renderer uses raw palette).

Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 12:13:02 +00:00
Cursor Agent
a5b2a32b4a
feat(ui): migrate playground chrome to shadcn
- AgentBuilderView: antd Button/Input/Modal/Select/Spin/Tabs + Input.TextArea -> shadcn Button/Input/Select/Textarea/Tabs; Modal.confirm -> AlertDialog; added MCPServerMultiSelect chip-list pattern
- ChatUI message rendering/streaming untouched; chrome defer due to deeply-coupled antd Select.OptGroup + optionLabelProp patterns that require a searchable multi-select primitive. Deferred in BLOCKERS.
- CompareUI: antd Button/Input/Select/Tooltip -> shadcn equivalents; Input.Password -> Input type=password; retained Tooltip wrapper around disabled button via span trigger
- RealtimePlayground: antd Button/Input/Select/Typography -> shadcn equivalents; round mic Button implemented with size=icon; loading spinners use LoaderCircle
- ComparisonPanel: antd Slider -> shadcn Slider (value array)
- CompareUI.test: repaired ant-btn classname selector with semantic getByRole
- ESLint: exempt playground chrome files that retain status-color categorical palettes

Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 12:03:28 +00:00
Cursor Agent
10c89b4e83
feat(ui): migrate policies chrome to shadcn
- add_attachment_form: antd Form + Select -> RHF + shadcn Dialog + MultiSelect/SuggestibleTagInput
- add_policy_form: antd Form + Modal + TextInput/Textarea -> RHF + shadcn Dialog + Input/Textarea
- ai_suggestion_modal: antd Modal/Select/Checkbox/Tooltip/TextArea -> shadcn Dialog/Select/Checkbox/Tooltip/Textarea
- index: Tremor TabGroup + antd Alert -> shadcn Tabs + Alert
- pipeline_flow_builder: chrome-only migration; Tremor Button/TextInput + antd Select/Spin -> shadcn Button/Input/Select + LoaderCircle spinner (StepCard/Connector/PolicyVersionsSidebar internals untouched)
- policy_test_panel: antd Form + Select -> RHF + shadcn Select/TagInput
- template_parameter_modal: antd Modal/Radio/Select + Tremor Button/TextInput -> shadcn Dialog/RadioGroup/Select/Input/Button
- Add ai_suggestion_modal.tsx to no-raw-tailwind-colors override (status/result categorical palettes kept raw)

Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 11:51:52 +00:00
Cursor Agent
18bc2211ab
feat(ui): migrate model_info_view to shadcn + RHF
- Replace antd Form.useForm/Form.Item with react-hook-form + Controller
- Replace Tremor Card/Grid/TabGroup/TabList/TabPanels with shadcn Card + Tabs
- Replace Tremor Title/Text/TextInput/Button with native h/p + shadcn Input/Button + lucide icons
- Replace antd Button/Input/Select/Tooltip/Modal with shadcn equivalents
- Add TagsLikeMultiSelect (mirrors antd Select mode="tags") and
  SearchableSingleSelect (mirrors antd Select showSearch allowClear)
- VectorStoreSelector now receives value via Controller (field.value)
- credentials modals: switch UploadProps import from antd/es/upload to
  the local add_model_upload_types shim so eslint no-banned-ui-imports
  stays green
- model_info_view.test: mock vectorStoreListCall (now called in edit
  mode via VectorStoreSelector)

Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 11:30:58 +00:00
Cursor Agent
b34f9a118e
feat(ui): migrate model_add + model_dashboard to shadcn
- AddCredentialModal / EditCredentialModal / reuse_credentials: antd Form -> RHF
- credentials.tsx: Tremor Table -> shadcn Table, drop antd Form.useForm
- HealthCheckComponent: Tremor Title/Text/Button/Badge + antd Modal -> shadcn Dialog/Button/Badge
- ModelSettingsModal: antd Form.useForm + Form.Item -> RHF + Controller
- provider_specific_fields: restructure label so asterisk is outside <Label>
  so getByLabelText still matches the raw field label
- eslintrc override: add model_dashboard/HealthCheckComponent + model_info_view
  (for the categorical palette and existing raw tailwind colors)

Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 11:23:53 +00:00
cursor
298489075a
feat(ui): migrate SearchTools subtree to shadcn
Migrates the SearchTools CRUD surface:

- SearchToolColumn.tsx: antd ColumnsType -> tanstack-table
  ColumnDef<SearchTool>[] (matches the DataTable wrapper already used
  elsewhere; header/accessorKey/cell shape).
- SearchTools.tsx: antd Table -> shadcn DataTable (reusing
  view_logs/table.tsx which is already tremor-inside-shadcn-chrome).
  antd Form.useForm (edit modal) -> react-hook-form (FormProvider +
  register + Controller). antd Input/Select/TextArea -> shadcn Input/
  Select/Textarea with Label. Dialog wrapper unchanged.
- CreateSearchTools.tsx: antd Modal -> shadcn Dialog. antd
  Form.useForm + onValuesChange -> react-hook-form
  (watch() replaces the manual formValues state). antd Select +
  Option (with logo-prefixed label) -> shadcn Select + SelectItem
  rendering SearchProviderLabel directly. antd Tooltip +
  Typography.Link -> shadcn Tooltip + plain anchor. antd
  Input/Input.Password/Input.TextArea -> shadcn Input
  (type=password for API key) + Textarea. Form.Item info-icon helper
  tooltips preserved via shadcn Tooltip.
- SearchToolTester.tsx: antd Button/Input/Spin/Typography + tremor
  Card/Title -> shadcn Button/Input/Card + plain h3/p. Loader2 for
  the Spin replacement. Categorical palette (blue accent, green
  success) kept raw with eslint override.

SearchToolTester.tsx gets added to .eslintrc.json's
no-raw-tailwind-colors override list (blue accent / green success
palette on result cards).

Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 11:09:07 +00:00
cursor
68bbcae478
feat(ui): migrate prompts subtree to shadcn
Migrates the add/info/code-snippet surfaces of the prompts subtree:

- add_prompt_form.tsx: antd Form.useForm -> react-hook-form (FormProvider
  + register with RHF validation rules). antd Select -> shadcn Select +
  Controller. antd Upload -> native <input type=file> button (retains
  .prompt validation + single-file behavior). antd Option import removed.
- prompt_editor_view/PromptCodeSnippets.tsx: antd Tabs -> shadcn
  Tabs/TabsList/TabsTrigger (preserves controlled activeKey pattern).
- prompt_info.tsx: tremor Card/Title/Text/Grid/Badge/TremorButton/Tab*/
  Table* -> shadcn Card/Badge/Button/Tabs*/Table*. antd Button/Modal ->
  shadcn Button/Dialog. @ant-design/icons already lucide. text-gray-*
  -> text-muted-foreground; bg-gray-* -> bg-muted. Environment status
  palette (red/amber/green for production/staging/development) and
  copy-success palette kept raw with eslint override.

prompt_info.tsx gets added to .eslintrc.json's no-raw-tailwind-colors
override list where it keeps the environment status palette.

Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 11:03:35 +00:00
cursor
6badcee6c2
feat(ui): migrate UsagePage chrome to shadcn
Migrates the chrome of the UsagePage subtree to shadcn (tremor chart
widgets - BarChart, DonutChart - preserved behind eslint-disable):

- UsagePageView.tsx: tremor TabGroup/TabList/Tab/TabPanel -> shadcn
  Tabs/TabsList/TabsTrigger/TabsContent. tremor Card/Grid/Col/Title/
  Text -> shadcn Card + Tailwind grid. antd Alert/Button/Segmented/
  Select/Tooltip -> shadcn Alert/Button/ToggleGroup/Popover+Input/
  Tooltip. @ant-design/icons -> lucide. Custom UserFilterSelect built
  from Popover + Input to replace antd Select with popup scroll
  pagination (preserves placeholder + combobox role for tests).
- EntityUsage/EntityUsage.tsx: same tremor chrome -> shadcn; antd
  Alert/Button -> shadcn Alert/Button; Loader2 from lucide.
- EntityUsage/TopKeyView.tsx: antd Segmented -> shadcn ToggleGroup.
  BarChart preserved.
- UsageAIChatPanel.tsx: antd Button/Select/Input.TextArea/Spin ->
  shadcn Button/Select/Textarea + lucide Loader2. bg-gray-*/
  text-gray-* -> bg-muted/text-muted-foreground.

Repairs UsagePageView.test.tsx / EntityUsage.test.tsx / TopKeyView.test.tsx:
- EntityUsage tab-switch tests now use getByRole('tab',...) +
  userEvent.click() (radix Tabs requires pointer events for switching).
- TopKeyView test mockAuth extended with isLoading / isAuthorized to
  match updated useAuthorized return shape.
- TopKeyView Segmented test rewritten to click role=radio directly
  (ToggleGroup exposes radio semantics).

Adds the 3 migrated files to the .eslintrc.json override list where
they keep categorical status palettes (green/red/cyan/blue/purple for
success/failure/spend/token charts).

Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 10:59:54 +00:00
Cursor Agent
889d12f9b9
feat(ui): migrate view_logs page + modals to shadcn
Migrates the page-level chrome of the view_logs subtree:

- index.tsx: Tremor TabGroup/Tab/TabList/TabPanels/TabPanel -> shadcn
  Tabs/TabsList/TabsTrigger/TabsContent; Tremor Switch -> shadcn Switch;
  antd Button/Tag/Tooltip -> shadcn Button/Badge/Tooltip. Filter
  dropdowns, custom date range inputs, and pagination controls remain
  unchanged. The inline RequestViewer component (used by the legacy
  expanded-row view) also migrates its Tooltip/Tag usages.
- audit_logs.tsx: antd Table -> DataTable (shadcn Table driven by
  @tanstack/react-table) with ColumnDef<AuditLogEntry>[]; antd
  Input/Select/Button/Pagination/Spin -> shadcn Input/Select/Button +
  custom prev/next pagination per BLUEPRINT. Action palette (green/
  blue/red/orange for created/updated/deleted/rotated) kept raw.
- SpendLogsSettingsModal.tsx: antd Form.useForm -> react-hook-form
  with FormProvider + Controller; antd Form.Item tooltip -> shadcn
  Tooltip around a lucide HelpCircle; antd Switch -> shadcn Switch;
  antd-coupled button-class test (.ant-btn-loading) replaced with
  semantic data-loading attribute; skeleton selector updated to match
  shadcn's .animate-pulse class.

Adds index.tsx and audit_logs.tsx to the .eslintrc.json override list
(they keep categorical status palettes for log-level action badges).

Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 10:41:25 +00:00
Cursor Agent
d3708b967f
feat(ui): migrate view_logs drawer/detail chrome to shadcn
Migrates the drawer/detail-chrome side of the view_logs subtree (chrome
only; Monaco, JSON viewers, and other payload renderers preserved):

- columns.tsx: antd Tooltip -> shadcn Tooltip via local HoverTooltip
  helper; Tremor Button -> shadcn Button; Tremor Badge -> shadcn Badge.
  ColumnDef<T>[] structure preserved.
- CostBreakdownViewer.tsx: antd Collapse -> shadcn Accordion; text-gray-*
  -> text-muted-foreground semantic tokens.
- GuardrailViewer/GuardrailViewer.tsx: antd Tooltip -> shadcn Tooltip;
  text-gray-* -> text-muted-foreground. Status palettes (green/red/amber
  for pass/fail/warn) kept raw with eslint override.
- LogDetailsDrawer/LogDetailContent.tsx: antd Typography/Descriptions/
  Card/Tag/Tabs/Alert/Collapse/Radio/Space/Spin -> shadcn Alert/Badge/
  Card/Accordion/Tabs/RadioGroup. JSON viewer (JsonViewer) and
  PrettyMessagesView untouched.
- LogDetailsDrawer/LogDetailsDrawer.tsx: antd Drawer -> shadcn Sheet
  (DRAWER_WIDTH preserved as inline width); antd Button -> shadcn Button.
- LogDetailsDrawer/RealtimePrettyView.tsx: antd Typography.Text/Tag/
  Tooltip -> shadcn Badge/Tooltip + local SecondaryText helper.

Adds the migrated files to the .eslintrc.json override list where they
keep categorical status palettes (blue/green/red/amber for
success/failure/cached/warning states).

Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 10:33:18 +00:00
Cursor Agent
7546589e82
feat(ui): migrate users views + user_info detail to shadcn
Migrates view_users (list dashboard), view_users/user_info_view (user
detail + edit + add-to-team modal), and user_agent_activity (DAU/WAU/
MAU analytics) off Tremor TabGroup/Card/Grid/Text/Title/Metric and off
antd Modal/Form/Select/Tooltip/Button/Skeleton. All three now use
shadcn Tabs + Card + Dialog + react-hook-form (in the add-team modal),
keeping the existing Tremor BarChart (chart exemption) and Tag-chip
multi-select shim. Tests updated to use Radix tab roles and
role='alertdialog' for the DeleteResourceModal selector.

Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 10:15:29 +00:00
Cursor Agent
b861fd3fd4
feat(ui): migrate users forms + modals to shadcn
Migrates user_edit_view, CreateUserButton, BulkEditUsers,
bulk_create_users_button, and DefaultUserSettings off antd Form/Select/
Modal/Input/Typography and off Tremor Card/Text/Title. All five now use
shadcn Dialog + react-hook-form + shadcn Select/Input/Textarea/Badge/
Table, with a local multi-select shim (shadcn Select + badge chips).

The categorical status palette used by the CSV bulk import (red/green/
blue/yellow for invalid/success/pending/warning) and the bulk-edit
amber warning are preserved as raw Tailwind classes and the owning
files are added to the no-raw-tailwind-colors override list and
DEVIATIONS.md per blueprint rule 3.

Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 10:15:09 +00:00
cursor
26c6978808
feat(ui): migrate mcp_tools lists/panels to shadcn
- Migrate src/components/mcp_tools/mcp_servers.tsx from Tremor TabGroup/
  Tab/TabList/TabPanels + antd Modal/Descriptions/Select/Tooltip/Typography
  to shadcn Tabs/AlertDialog/Select/Tooltip/Separator. Delete confirm
  uses AlertDialog with a dl/dt/dd Descriptions replacement. The Team /
  Access Group filter dropdowns become shadcn Radix Selects with
  aria-label. Update mcp_servers.test.tsx to drive the new Radix Select
  via getByRole('combobox', { name: 'Team' }) and getAllByRole('option')
  instead of .ant-select class selectors.
- Migrate src/components/mcp_tools/mcp_tools.tsx from Tremor Card/Title/
  Text + antd Input/Button to shadcn Card/Input/Button. Retains the
  loader/selection visual treatment with lucide icons.
- Migrate src/components/mcp_tools/mcp_connect.tsx from antd Card/Alert/
  Button/Switch/Form/Collapse + Tremor TabGroup/Tab/Title/Text to
  shadcn Card/Alert/Button/Switch/Tabs (Form.Item replaced with a plain
  Switch + Label pair — the connect screens have no form submit).
- Migrate src/components/mcp_tools/mcp_discovery.tsx from antd Modal/
  Input.Search/Typography to shadcn Dialog + Input with an inline search
  icon. Inline styles replaced with Tailwind classes, keeping the custom
  2-column server grid and category pills.
- Migrate src/components/mcp_tools/MCPToolsetsTab.tsx from antd Modal/
  Form/Input/Typography/message/Spin + Tremor Button/Text/Title to
  shadcn Dialog/Input/Label/Button/AlertDialog and MessageManager for
  toasts. Form state moves to react-hook-form with register().
- Migrate src/components/mcp_tools/ToolTestPanel.tsx from antd Form.useForm
  + Form.Item + Tremor Button/TextInput to react-hook-form + Controller
  with shadcn Input/Textarea/Select/Label/Button. The ref-exposed
  boolean-select keeps its title attribute on the trigger so the
  existing ToolTestPanel.test.tsx getByTitle('True') assertion still
  matches. Categorical green palette retained per BLUEPRINT rule and
  added to the eslint overrides list for categorical-palette files
  (mcp_connect.tsx, mcp_tools.tsx, ToolTestPanel.tsx).
- Migrate src/components/mcp_tools/mcp_tools.tsx. Categorical palette
  overrides recorded in .eslintrc.json.
- MCPPermissionManagement.tsx is already in BLOCKERS.md from commit A as
  part of the antd Form cluster; no change required here.

Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 09:48:59 +00:00
cursor
a6e177e123
feat(ui): migrate mcp_tools configuration forms to shadcn
- Migrate src/components/mcp_tools/mcp_tool_configuration.tsx from
  Tremor Card/Title/Text + antd Badge/Spin/Checkbox/Input/Radio to shadcn
  Card/Input/Checkbox/Badge/ToggleGroup + lucide icons. Replaces the
  Radio.Group view-mode toggle with a shadcn ToggleGroup, and the
  antd Spin with a spinning lucide icon. Raw Tailwind colors swapped for
  semantic tokens (text-muted-foreground, bg-primary/5, border-primary,
  text-destructive).
- Migrate src/components/mcp_tools/MCPToolArgumentsForm.tsx from antd
  Form.useForm + Form.Item + antd Input/InputNumber/Select/Tooltip to
  react-hook-form with useForm + Controller and shadcn Input/Textarea/
  Select/Label/Tooltip. Ref-exposed getSubmitValues() now triggers RHF
  validation via trigger() + getValues() and still returns the typed,
  JSON-normalised payload expected by playground/chat_ui.
- Record create_mcp_server.tsx / mcp_server_edit.tsx / OAuthFormFields.tsx /
  StdioConfiguration.tsx / OpenAPIFormSection.tsx / MCPPermissionManagement.tsx
  in BLOCKERS.md. These form a single antd Form cluster (parent +
  Form.Item-based children registering into the parent's FormInstance)
  whose migration, including rewriting the antd-class-based test helpers
  in create_mcp_server.test.tsx / mcp_server_edit.test.tsx, exceeds the
  two-attempt budget for this batch.

Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 09:37:52 +00:00
cursor
a2f8c87e9f
feat(ui): migrate add_model subtree to shadcn
Migrate the add-model surface (AddModelForm, add_model_tab,
add_auto_router_tab, advanced_settings, cache_control_settings,
conditional_public_model_name, litellm_model_name,
provider_specific_fields) from antd Form + tremor to shadcn primitives
and react-hook-form.

- Root form state moves from antd FormInstance (Form.useForm) to RHF
  UseFormReturn, created in ModelsAndEndpointsView.tsx and threaded
  through AddModelTab / AddModelForm. Children use useFormContext /
  Controller / useWatch / useFieldArray.
- antd Modal -> shadcn Dialog; antd Tag -> Badge; antd Select -> shadcn
  Select; antd Radio.Group -> RadioGroup; antd Accordion (tremor) ->
  shadcn Accordion; antd Form.List -> RHF useFieldArray.
- Submit helpers (handle_add_model_submit, handle_add_auto_router_submit)
  feature-detect antd.resetFields vs RHF.reset so both paths keep
  working through the mixed migration window.
- UploadProps type import migrates from antd/es/upload to a local shim
  at add_model/add_model_upload_types.ts (structurally compatible with
  the antd shape still used by model_add/AddCredentialModal.tsx and
  model_add/EditCredentialModal.tsx).
- cache_control_settings ships both an RHF path (new callers) and a
  legacy antd bridge used by model_info_view.tsx so the out-of-scope
  detail view keeps working without cascading its migration.
- validateJsonValue added to utils/textUtils.ts to replace the antd
  Promise-style formItemValidateJSON for RHF rules.
- Tests repaired: AddModelForm, add_model_tab,
  conditional_public_model_name, litellm_model_name,
  provider_specific_fields, advanced_settings now wrap with RHF
  FormProvider instead of antd Form.

Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 09:23:03 +00:00
Cursor Agent
ce1c604be2
feat(ui): migrate guardrails forms + info to shadcn
Completed migrations in this batch:
- src/components/guardrails.tsx: antd Tabs -> shadcn Tabs+TabsList+TabsTrigger+TabsContent.
- src/components/guardrails/TeamGuardrailsTab.tsx: antd Modal + Form.useForm
  submission dialog -> shadcn Dialog + react-hook-form + shadcn Select/Textarea;
  existing categorical Tailwind palette preserved behind an eslint override.

Deferred to follow-up (entries added to docs/BLOCKERS.md):
- add_guardrail_form.tsx (1202 LoC, multi-step wizard w/ antd Form.useForm)
- edit_guardrail_form.tsx (antd Form mirror of add form)
- guardrail_info.tsx (888 LoC, Tremor tabs + antd Form settings panel)
- guardrail_provider_fields.tsx, guardrail_optional_params.tsx (render
  antd Form.Item keyed to the parent antd Form context; cannot be
  migrated independently of the above parents).

Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 08:48:53 +00:00
Cursor Agent
cf6493df11
feat(ui): migrate guardrails content_filter + custom_code + core to shadcn
Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 08:42:00 +00:00
Cursor Agent
c100c04688
feat(ui): migrate claude_code_plugins subtree to shadcn
- add_plugin_form: replace antd Modal/Form/Input/Select and Tremor
  Button with shadcn Dialog + react-hook-form + shadcn Input/Textarea/
  Select/Button. Validation messages now rendered inline via
  formState.errors instead of antd Form.Item's rules. URL preview keeps
  the categorical blue palette and is recorded in .eslintrc allowlist.
- MakeSkillPublicForm: drop antd Form wrapper + Steps. Replace with
  inline lucide-based Stepper; step state stays plain React useState.
  Dialog was already shadcn.

All 60 claude_code_plugins tests pass (AddPluginForm + helpers).
tsc --noEmit clean; eslint clean with categorical-palette
allowlist.

Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 08:28:28 +00:00
Cursor Agent
c2e8e4926b
feat(ui): migrate AIHub subtree to shadcn
- MakeAgentPublicForm, MakeMCPPublicForm, MakeModelPublicForm: drop
  antd Form + Steps shells. Replace with inline lucide-based Stepper
  component; step state stays plain React useState, dialog is already
  shadcn Dialog.
- ModelHubTable: replace antd Modal with shadcn Dialog, Tremor
  TabGroup/Tab/TabList/TabPanel with shadcn Tabs, Tremor Badge with
  shadcn Badge + semantic color helper, Tremor Card/Text/Title/Button
  with shadcn primitives + Tailwind, Ant icons with lucide Copy. Keep
  categorical palette (blue/green/purple/etc) classes for hub badges;
  file remains in .eslintrc allowlist.
- Tests: update mocks to stop stubbing antd (real shadcn Checkbox now
  exposes data-state="indeterminate" instead of the old
  data-indeterminate prop; tests assert against the Radix attribute).
  Split two-click "select/deselect" sequences into separate act()
  calls so state updates propagate between clicks.
- All 47 scoped tests pass (MakeAgentPublicForm, MakeMCPPublicForm,
  MakeModelPublicForm). ModelHubTable existing 8 tests still pass.

tsc --noEmit clean for migrated files. eslint clean.

Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
2026-04-24 08:25:24 +00:00