diff --git a/.changeset/fn-7818-cursor-logo.md b/.changeset/fn-7818-cursor-logo.md new file mode 100644 index 0000000000..34064c73e1 --- /dev/null +++ b/.changeset/fn-7818-cursor-logo.md @@ -0,0 +1,7 @@ +--- +"@runfusion/fusion": patch +--- + +summary: Use the real Cursor logo in the usage dropdown, model selection, and other provider surfaces. +category: fix +dev: Replaces the placeholder CursorCliIcon SVG with the Cursor brand mark and adds a `cursor` → `cursor-cli` mapping in inferProviderIconKey. diff --git a/packages/dashboard/app/components/ProviderIcon.tsx b/packages/dashboard/app/components/ProviderIcon.tsx index 8c3ab8c7c1..c0cf113ffd 100644 --- a/packages/dashboard/app/components/ProviderIcon.tsx +++ b/packages/dashboard/app/components/ProviderIcon.tsx @@ -682,6 +682,10 @@ function DroidCliIcon({ size, color, label = "Factory AI — via Droid CLI" }: { ); } +/* +FNXC:ProviderIcons 2026-07-11-00:00: +FN-7818 replaced the hand-drawn Cursor placeholder with Cursor's official cube/arrow brand mark from cursor.com. This shared icon component is the single source for the Usage dropdown, model-selection surfaces, provider auth cards, and onboarding. +*/ function CursorCliIcon({ size, color, label = "Cursor — via Cursor CLI" }: { size: number; color: string; label?: string }) { return ( - - - - + + + + ); } diff --git a/packages/dashboard/app/components/__tests__/ProviderIcon.test.tsx b/packages/dashboard/app/components/__tests__/ProviderIcon.test.tsx index 08a9567e00..0eb638c3b6 100644 --- a/packages/dashboard/app/components/__tests__/ProviderIcon.test.tsx +++ b/packages/dashboard/app/components/__tests__/ProviderIcon.test.tsx @@ -58,16 +58,22 @@ describe("ProviderIcon", () => { expect(svg.parentElement).toHaveStyle({ color: "var(--provider-openai)" }); }); - it("renders cursor-cli icon with provider token color", () => { + it("renders cursor-cli icon with provider token color and official brand mark", () => { render(); const svg = screen.getByTestId("cursor-cli-icon"); expect(svg).toBeInTheDocument(); expect(screen.getByLabelText("Cursor — via Cursor CLI")).toBeInTheDocument(); - const badgeGlyph = svg.querySelector('path[stroke="var(--provider-icon-contrast)"]'); - expect(badgeGlyph).toBeInTheDocument(); + expect(svg.querySelector('path[data-cursor-brand-mark="cube"]')).toHaveAttribute("fill", "var(--provider-cursor-cli)"); + expect(svg.querySelector('path[data-cursor-brand-mark="arrow"]')).toHaveAttribute("fill", "var(--provider-icon-contrast)"); expect(svg.parentElement).toHaveStyle({ color: "var(--provider-cursor-cli)" }); }); + it("infers cursor provider strings to the cursor-cli brand icon", () => { + render(); + expect(screen.getByTestId("cursor-cli-icon")).toBeInTheDocument(); + expect(document.querySelector('[data-provider="cursor"] svg:not([data-testid])')).not.toBeInTheDocument(); + }); + it("renders grok-cli icon reusing the xAI brand mark", () => { render(); const svg = screen.getByTestId("xai-icon"); diff --git a/packages/dashboard/app/utils/__tests__/providerIconKey.test.ts b/packages/dashboard/app/utils/__tests__/providerIconKey.test.ts index b28691d98f..8b54994fe0 100644 --- a/packages/dashboard/app/utils/__tests__/providerIconKey.test.ts +++ b/packages/dashboard/app/utils/__tests__/providerIconKey.test.ts @@ -9,6 +9,10 @@ describe("inferProviderIconKey", () => { ["openai-codex", "openai"], ["gemini-2.5-pro", "google"], ["google-antigravity", "google"], + ["cursor", "cursor-cli"], + ["Cursor", "cursor-cli"], + ["cursor-agent", "cursor-cli"], + ["cursor/gpt-5", "cursor-cli"], ["ollama/llama3", "ollama"], ["minimax-text-01", "minimax"], ["zhipu-glm-4", "zai"], diff --git a/packages/dashboard/app/utils/providerIconKey.ts b/packages/dashboard/app/utils/providerIconKey.ts index a1b85c46d2..467e9ce23f 100644 --- a/packages/dashboard/app/utils/providerIconKey.ts +++ b/packages/dashboard/app/utils/providerIconKey.ts @@ -11,6 +11,14 @@ export function inferProviderIconKey(modelOrProviderName: string): string { const normalized = modelOrProviderName.toLowerCase(); // Map common provider/model names to their icon keys. + /* + FNXC:ProviderIcons 2026-07-11-00:00: + FN-7818: model-id-shaped Cursor provider strings (cursor, cursor-agent, cursor/) must resolve to the cursor-cli brand icon on model-selection surfaces instead of the generic CPU fallback, mirroring UsageIndicator's local mapping. + Run before broad model-family checks so cursor/gpt-5 stays Cursor-branded instead of OpenAI-branded. + */ + if (normalized.includes("cursor")) { + return "cursor-cli"; + } if (normalized.includes("claude") || normalized.includes("anthropic")) { return "anthropic"; }