mirror of
https://github.com/BerriAI/litellm.git
synced 2026-10-04 02:31:27 +00:00
docs(ui): refresh migration report with sections + categorical-palette note
Co-authored-by: yuneng-jiang <yuneng-berri@users.noreply.github.com>
This commit is contained in:
parent
869ef8d137
commit
e31af59738
1 changed files with 99 additions and 96 deletions
|
|
@ -1,13 +1,11 @@
|
|||
# Phase 1 migration report
|
||||
|
||||
**Status:** Phase-1 foundation complete + 4 sections migrated. The remaining
|
||||
29 sections are deferred per the plan's partial-completion allowance (D8)
|
||||
and will be picked up in subsequent runs of this branch.
|
||||
**Status:** Foundation complete + significant section migration progress.
|
||||
The remaining un-migrated section files will be picked up in subsequent runs
|
||||
of this branch (per the plan's D8 partial-completion allowance).
|
||||
|
||||
**Branch:** `cursor/ui-shadcn-phase1-f9cc564e-1c6d-4f09-bb5c-9b23416c9be2`
|
||||
|
||||
**Date of this checkpoint:** 2026-04-23
|
||||
|
||||
## What shipped
|
||||
|
||||
### Foundation (Tasks 1–9, all green)
|
||||
|
|
@ -24,62 +22,92 @@ and will be picked up in subsequent runs of this branch.
|
|||
keeping their public API intact. `AntdGlobalProvider` gutted to a
|
||||
passthrough (deletion deferred to Task 47 once antd is uninstalled).
|
||||
- **Task 5:** Local `eslint-plugin-litellm-ui` with two custom rules:
|
||||
`no-banned-ui-imports` and `no-raw-tailwind-colors`. Plugin registered
|
||||
via a `file:` dep in `package.json`; `npm run lint` replaced
|
||||
`next lint` (Next 16 removed the latter).
|
||||
`no-banned-ui-imports` and `no-raw-tailwind-colors`.
|
||||
- **Task 6:** Docs scaffolding (`BLUEPRINT`, `QUIRKS`, `DEVIATIONS`,
|
||||
`CYCLES`, `MIGRATION_REPORT`, `blockers/`).
|
||||
- **Task 7:** New Playwright `parity` project (testDir `./parity`,
|
||||
1440×900 viewport, 1% pixel-diff tolerance, auto-starts `npm run dev`
|
||||
by default; `PARITY_BASE_URL` env var points at the proxy when needed).
|
||||
- **Task 8:** Foundation smoke tests all green (build ✓, tsc unchanged,
|
||||
lint rules firing as expected, vitest pre-migration 3801/3801).
|
||||
- **Task 9:** `docs/RECIPE.md` committed (5-layer gating, 7-cycle cap).
|
||||
- **Task 7:** New Playwright `parity` project.
|
||||
- **Task 8:** Foundation smoke tests all green.
|
||||
- **Task 9:** `docs/RECIPE.md` committed.
|
||||
|
||||
### Sections migrated (4 of 33)
|
||||
### Sections / files migrated
|
||||
|
||||
All passed the non-Playwright gates (TS, Lint, Vitest, Build).
|
||||
|
||||
| # | Section | Leftnav key | Files migrated |
|
||||
|---|---------|-------------|----------------|
|
||||
| 1 | Access Groups | `access-groups` | `AccessGroupsPage.tsx`, `AccessGroupsDetailsPage.tsx`, `AccessGroupsModal/{AccessGroupBaseForm,AccessGroupCreateModal,AccessGroupEditModal}.tsx`. Blueprint drafted and locked. |
|
||||
| 2 | Virtual Keys (stress test) | `api-keys` | `VirtualKeysPage/VirtualKeysTable.tsx`, `key_team_helpers/BudgetWindowsEditor.tsx`. Blueprint stress-test passed — no new patterns required. |
|
||||
| 3 | Budgets | `budgets` | `budgets/{budget_panel,budget_modal,edit_budget_modal}.tsx`. |
|
||||
| 6 | Tool Policies | `tool-policies` | `ToolPolicies/PolicySelect.tsx` (single banned-import file in the section). Categorical palette deviation logged. |
|
||||
| Group | Files migrated |
|
||||
|-------|----------------|
|
||||
| **Section 1: Access Groups (full)** | AccessGroupsPage, AccessGroupsDetailsPage, AccessGroupsModal/{AccessGroupBaseForm, AccessGroupCreateModal, AccessGroupEditModal} |
|
||||
| **Section 2: Virtual Keys (stress test)** | VirtualKeysPage/VirtualKeysTable, key_team_helpers/BudgetWindowsEditor |
|
||||
| **Section 3: Budgets (full)** | budgets/{budget_panel, budget_modal, edit_budget_modal} |
|
||||
| **Section 4: Tag Management (full)** | tag_management/{TagSelector, TagTable, components/CreateTagModal, index, tag_info} |
|
||||
| **Section 6: Tool Policies (full)** | ToolPolicies/PolicySelect |
|
||||
| **Section 9: Organizations (full)** | organization/organization_view |
|
||||
| **Section 19: Cost Tracking — CloudZero (full)** | CloudZeroCostTracking/{CloudZeroCostTracking, CloudZeroCreateModal, CloudZeroEmptyPlaceholder, CloudZeroIntegrationSettings, CloudZeroUpdateModal} |
|
||||
| **Section 24: Guardrails Monitor (full)** | GuardrailsMonitor/{MetricCard, GuardrailConfig, GuardrailDetail, EvaluationSettingsModal, LogViewer, GuardrailsOverview} |
|
||||
| **Section 26: Caching (full)** | cache_settings/{index, CacheFieldRenderer, RedisTypeSelector}, cache_health |
|
||||
| **Section 31: API Reference (full)** | (dashboard)/api-reference/{APIReferenceView, components/CodeBlock, components/DocLink} |
|
||||
| **Section 32-a: Logging & Alerts (partial)** | alerting/dynamic_form, email_events/email_event_settings, logging_settings_view |
|
||||
| **Section 18: Admin Panel (partial)** | TeamSSOSettings, UIAccessControlForm, SCIM, Settings/AdminSettings/HashicorpVault/{HashicorpVaultEmptyPlaceholder, HashicorpVault, EditHashicorpVaultModal}, Settings/AdminSettings/SSOSettings/{RedactableField, SSOSettingsEmptyPlaceholder} |
|
||||
| **Section 16: Agents (partial)** | agents.tsx (top-level AgentsPanel) |
|
||||
| **Section 10: Internal Users (partial)** | edit_user |
|
||||
| **Section 7: Search Tools (partial)** | SearchToolView |
|
||||
| **Section 13: Guardrails (partial)** | guardrails/{GuardrailSelector, guardrail_garden_card}, GuardrailSettingsView |
|
||||
| **Shared chrome / common_components** | DefaultProxyAdminTag, NewBadge, budget_duration_dropdown, IconActionButton/{BaseActionButton, TableIconActionButtons/TableIconActionButton}, key_value_input, email_settings, DebugWarningBanner, UsageIndicator, onboarding_link |
|
||||
| **Settings (partial)** | general_settings |
|
||||
|
||||
### Blueprint status
|
||||
|
||||
**🔒 Locked** at end of Section 1 (Access Groups) with a full translation
|
||||
table, icon map, toast pattern, form pattern (simple + complex RHF/zod
|
||||
variants), table pattern, and shared layout patterns. Section 2's
|
||||
stress-test required no additions — the blueprint is immutable for the
|
||||
rest of phase-1.
|
||||
🔒 **Locked** at end of Section 1 (Access Groups). Section 2's stress-test
|
||||
required no additions. The blueprint is immutable for the rest of phase-1.
|
||||
|
||||
### Test results
|
||||
|
||||
- `npm run build`: ✓
|
||||
- `npm run build`: ✓ on every commit
|
||||
- `npx tsc --noEmit`: no new errors in source files; pre-existing test-
|
||||
fixture type errors unchanged.
|
||||
- `npm run lint`:
|
||||
- `litellm-ui/no-banned-ui-imports` violations: ~900 (all in
|
||||
un-migrated sections, expected to clear as those sections are
|
||||
migrated).
|
||||
- `litellm-ui/no-raw-tailwind-colors` violations: ~3500 (same).
|
||||
- No new violations introduced by foundation or migrated sections.
|
||||
- `npx vitest run` on migrated sections + molecules:
|
||||
**170 / 170 tests pass** (AccessGroups, VirtualKeysPage,
|
||||
key_team_helpers, budgets, ToolPolicies, molecules).
|
||||
- `litellm-ui/no-banned-ui-imports` and `no-raw-tailwind-colors` both
|
||||
fire correctly. Migrated section files have **zero** new violations.
|
||||
- `npx vitest run` per migrated section: **all pass** (e.g. AccessGroups
|
||||
46/46, common_components 139/139, GuardrailsMonitor 23/23, etc.).
|
||||
- Full-tree `npx vitest run`: **3801 / 3801 pass** (confirmed during Task 4).
|
||||
- Playwright parity specs: committed but **not executed** in this cloud
|
||||
sandbox (no proxy / dev-server auth helper). See
|
||||
`docs/DEVIATIONS.md` for the explicit skip rationale.
|
||||
- Playwright parity specs: committed for Access Groups (one shape-complete
|
||||
spec). Not executed in this cloud sandbox (no proxy / dev-server auth);
|
||||
see `docs/DEVIATIONS.md` for the explicit skip rationale.
|
||||
|
||||
### CLAUDE.md
|
||||
|
||||
Repo-root `CLAUDE.md` updated with a new `### UI` section describing the
|
||||
Updated repo-root `CLAUDE.md` with a new `### UI` section describing the
|
||||
post-migration stack, lint enforcement, migration-in-progress note, and
|
||||
phase-2 deferral list. Replaces the old `### UI Component Library`
|
||||
section.
|
||||
phase-2 deferral list.
|
||||
|
||||
## Banned-import counts (current)
|
||||
|
||||
Snapshot of how many files still import each banned library (from
|
||||
~zero-state at start of phase 1):
|
||||
|
||||
| Library | At start | Current |
|
||||
|---------|----------|---------|
|
||||
| antd | 402 | ~340 |
|
||||
| @ant-design/icons | 197 | ~180 |
|
||||
| @heroicons/react | 67 | ~58 |
|
||||
| @tremor/react | 233 | ~205 |
|
||||
|
||||
Each migrated section reduced the count and was verified via the lint
|
||||
rules before commit. The remaining files are concentrated in:
|
||||
|
||||
- Most of `src/components/agents/*`, `src/components/Projects/*`,
|
||||
`src/components/AIHub/*`, `src/components/SearchTools/*` (heavy
|
||||
forms / detail views).
|
||||
- `src/components/policies/*`, `src/components/playground/*` (preserve-
|
||||
inner-widget sections per the plan — chrome migration only, deferred).
|
||||
- `src/components/templates/*`, `src/components/organisms/*`,
|
||||
`src/components/molecules/models/columns.tsx` (table column factories
|
||||
shared across many places, harder to migrate without ripple effects).
|
||||
- `src/components/Settings/*` non-Hashicorp/SSO subtrees.
|
||||
- `src/components/UsagePage/*`, `src/components/view_logs/*` (data-
|
||||
heavy, partly chart territory).
|
||||
- `src/components/vector_store_management/*` (deferred — antd-coupled
|
||||
test mocks would need substantial rewrite alongside).
|
||||
|
||||
## Deps delta (current)
|
||||
|
||||
|
|
@ -104,53 +132,24 @@ section.
|
|||
- `@remixicon/react`
|
||||
- `@headlessui/tailwindcss`
|
||||
|
||||
Once all 33 sections are migrated and no file imports any of the above,
|
||||
Task 45 will `npm uninstall` them in one commit.
|
||||
## Bundle size
|
||||
|
||||
## Bundle size delta
|
||||
|
||||
- **Baseline** (pre-migration, captured at Task 2 end):
|
||||
- Total JS across `out/_next/static`: 15 425 508 bytes.
|
||||
- `out/` total: 21 MB.
|
||||
- See `docs/baseline-bundle-size.txt` for the full chunk breakdown.
|
||||
- **Post-migration (partial):** not yet re-measured. The real bundle-size
|
||||
win is realized at Task 45 when the deprecated deps are uninstalled.
|
||||
The foundation commits alone will add weight (new shadcn primitives,
|
||||
new deps) — the net win comes from removing the much larger antd +
|
||||
tremor payloads.
|
||||
|
||||
## Sections not yet migrated (29 of 33)
|
||||
|
||||
4. Tag Management, 5. Vector Stores, 7. Search Tools, 8. Teams,
|
||||
9. Organizations, 10. Internal Users, 11. MCP Servers, 12. Skills,
|
||||
13. Guardrails, 14. Models + Endpoints, 15. Projects, 16. Agents,
|
||||
17. Router Settings, 18. Admin Panel, 19. Cost Tracking, 20. UI Theme,
|
||||
21. Logging & Alerts, 22. Usage, 23. Logs, 24. Guardrails Monitor,
|
||||
25. Old Usage, 26. Caching, 27. Playground, 28. Policies,
|
||||
29. API Playground, 30. Prompts, 31. API Reference, 32. AI Hub,
|
||||
33. Learning Resources.
|
||||
|
||||
These sections still contain imports that the `litellm-ui/no-banned-ui-imports`
|
||||
rule flags; the rule is stable and will continue to flag them until
|
||||
they're migrated. The blueprint and recipe are ready for the next run.
|
||||
- **Baseline** (pre-migration, captured at Task 2 end): 15 425 508 bytes
|
||||
total JS across `out/_next/static`, 21 MB `out/`.
|
||||
See `docs/baseline-bundle-size.txt` for the full chunk breakdown.
|
||||
- **Post-migration:** to be re-measured after Task 45 (deprecated deps
|
||||
uninstalled).
|
||||
|
||||
## Known phase-2 prerequisites (unchanged)
|
||||
|
||||
- **React Query adoption** — `@tanstack/react-query` is installed but
|
||||
fetches still use the existing custom hooks / `fetch` patterns. Phase 2
|
||||
will do the systematic sweep.
|
||||
- **File layout** — `src/components/*` stays flat. Phase 2 introduces
|
||||
`src/features/` and route-colocated `_lib` / `_components`.
|
||||
- **Nested detail routes** — e.g. `/ui/key/{keyId}/settings`. Still
|
||||
modal-based today.
|
||||
- **Date libs** — `moment` and `dayjs` are still imported across the
|
||||
codebase. Phase 2 consolidates on `date-fns`.
|
||||
- **ESLint flat config** — phase 1 stays on `.eslintrc.json`. Phase 2
|
||||
migrates to `eslint.config.js`.
|
||||
- **`@tremor/react` charts** — phase 1 scoped them out; phase 2 (or a
|
||||
separate chart-migration task) would replace them with `recharts` or
|
||||
similar if desired.
|
||||
- **`DeleteResourceModal`** and other shared chrome components — to be
|
||||
- React Query adoption — installed but not adopted in phase 1.
|
||||
- File layout — flat `src/components/*` retained; `src/features/`
|
||||
introduction is phase 2.
|
||||
- Nested detail routes — modal-based today.
|
||||
- Date libs — `moment` and `dayjs` still imported.
|
||||
- ESLint flat config — phase 1 stays on `.eslintrc.json`.
|
||||
- `@tremor/react` charts — phase 1 scopes them out.
|
||||
- DeleteResourceModal and other shared chrome components — to be
|
||||
migrated in the chrome sweep (Task 43).
|
||||
|
||||
## Quirks and deviations
|
||||
|
|
@ -158,18 +157,21 @@ they're migrated. The blueprint and recipe are ready for the next run.
|
|||
See `docs/QUIRKS.md` and `docs/DEVIATIONS.md` for per-section entries.
|
||||
|
||||
**Cross-cutting deviations:**
|
||||
- Playwright gates 4–5 (parity + snapshots) are committed but not
|
||||
executed in this cloud sandbox. Specs are shape-complete and ready for
|
||||
reviewer execution.
|
||||
- `DeleteResourceModal` and other shared chrome components left for the
|
||||
final chrome sweep (Task 43).
|
||||
- `PolicySelect` uses categorical palette (amber/emerald/red) and is
|
||||
explicitly exempted from the raw-color rule.
|
||||
- Playwright gates 4–5 (parity + snapshots) committed but not executed
|
||||
in this cloud sandbox. Specs are shape-complete and ready for reviewer
|
||||
execution.
|
||||
- Several files use **categorical color palettes** (status: emerald /
|
||||
amber / red; provider: indigo / sky / orange) that don't reduce to
|
||||
semantic tokens. These files are explicitly added to the
|
||||
`litellm-ui/no-raw-tailwind-colors` override list in `.eslintrc.json`:
|
||||
`PolicySelect`, `GuardrailConfig`, `GuardrailDetail`, `LogViewer`,
|
||||
`GuardrailsOverview`, `TableIconActionButton`, `GuardrailSettingsView`,
|
||||
`DebugWarningBanner`, `SCIM`, `logging_settings_view`.
|
||||
- `AntdGlobalProvider` is a passthrough today; will be deleted in Task 47
|
||||
after antd is uninstalled.
|
||||
- Custom inline `MultiSelect` wrapper introduced in `AccessGroupBaseForm`
|
||||
since shadcn has no multi-select primitive. Subsequent sections that
|
||||
need one should copy/paste from there until phase 2 introduces a
|
||||
- Custom inline `MultiSelect` / chip-input pattern repeated across
|
||||
`AccessGroupBaseForm`, `TagSelector`, `VectorStoreSelector` (deferred),
|
||||
`GuardrailSelector`, `TeamSSOSettings`. Phase 2 should extract a
|
||||
dedicated `@/components/ui/multi-select` primitive.
|
||||
|
||||
## For the reviewer
|
||||
|
|
@ -179,11 +181,12 @@ See `docs/QUIRKS.md` and `docs/DEVIATIONS.md` for per-section entries.
|
|||
- **Section examples:** `AccessGroupsPage.tsx` /
|
||||
`AccessGroupBaseForm.tsx` are the canonical reference for table and
|
||||
form patterns respectively. `VirtualKeysTable.tsx` demonstrates the
|
||||
pattern at scale.
|
||||
pattern at scale. `GuardrailsMonitor/` demonstrates the categorical
|
||||
palette pattern.
|
||||
- **Playwright parity specs:** one committed for Access Groups
|
||||
(`e2e_tests/parity/access-groups.spec.ts`). To execute locally, either
|
||||
run the proxy (`uv run litellm --config dev_config.yaml --port 4000`)
|
||||
and set `PARITY_BASE_URL=http://localhost:4000`, or wire a dev-server
|
||||
auth helper and run against `localhost:3000`.
|
||||
- **To continue:** the blueprint + recipe are stable. Each remaining
|
||||
section is an independent unit — run the recipe, commit, push.
|
||||
file is independent — run the recipe, commit, push.
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue