From 26054de697226992f1cef00b736be4c7f9bc96c8 Mon Sep 17 00:00:00 2001 From: gsxdsm Date: Fri, 17 Jul 2026 23:59:58 -0700 Subject: [PATCH] feat(dashboard): OpenAI Codex subscription card in onboarding quick start Placed directly after the Anthropic subscription and before the API-key options; previously reachable only under Advanced. Co-Authored-By: Claude Fable 5 --- .changeset/codex-quick-start-placement.md | 7 +++++++ .../dashboard/app/components/ModelOnboardingModal.tsx | 5 ++++- .../components/__tests__/ModelOnboardingModal.test.tsx | 8 +++++++- 3 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 .changeset/codex-quick-start-placement.md diff --git a/.changeset/codex-quick-start-placement.md b/.changeset/codex-quick-start-placement.md new file mode 100644 index 0000000000..702257d65c --- /dev/null +++ b/.changeset/codex-quick-start-placement.md @@ -0,0 +1,7 @@ +--- +"@runfusion/fusion": minor +--- + +summary: The OpenAI Codex subscription sign-in now appears in onboarding quick start, right after the Anthropic subscription. +category: feature +dev: "ModelOnboardingModal QUICK_START_PROVIDER_IDS: openai-codex inserted between anthropic-subscription and anthropic-api-key; previously it was only reachable under Advanced." diff --git a/packages/dashboard/app/components/ModelOnboardingModal.tsx b/packages/dashboard/app/components/ModelOnboardingModal.tsx index 8c477dcfd2..9a60e92caf 100644 --- a/packages/dashboard/app/components/ModelOnboardingModal.tsx +++ b/packages/dashboard/app/components/ModelOnboardingModal.tsx @@ -266,8 +266,11 @@ function getProviderDisplayName(providerId: string): string { FNXC:Onboarding 2026-07-03-00:00: Onboarding quick start must show practical first-run choices beyond Anthropic, including OpenAI/ChatGPT, Google/Gemini, OpenRouter, and Ollama when those visible providers are configured. Keep Anthropic subscription OAuth and raw Anthropic API-key auth as separate first-class cards; use the legacy `anthropic` id only as a fallback for older status payloads. + +FNXC:Onboarding 2026-07-18-03:40: +The OpenAI Codex subscription card belongs in quick start (it was buried in Advanced), placed directly AFTER the Anthropic subscription and BEFORE the API-key options — subscription sign-ins are the primary first-run path, keys are the fallback. */ -const QUICK_START_PROVIDER_IDS = ["anthropic-subscription", "anthropic-api-key", "anthropic", "openai", "google", "gemini", "openrouter", "ollama"] as const; +const QUICK_START_PROVIDER_IDS = ["anthropic-subscription", "openai-codex", "anthropic-api-key", "anthropic", "openai", "google", "gemini", "openrouter", "ollama"] as const; const ONBOARDING_CURATED_PROVIDER_FAMILY_ORDER = [ "anthropic", diff --git a/packages/dashboard/app/components/__tests__/ModelOnboardingModal.test.tsx b/packages/dashboard/app/components/__tests__/ModelOnboardingModal.test.tsx index dba5f929c0..19fd9e35c9 100644 --- a/packages/dashboard/app/components/__tests__/ModelOnboardingModal.test.tsx +++ b/packages/dashboard/app/components/__tests__/ModelOnboardingModal.test.tsx @@ -651,9 +651,15 @@ describe("ModelOnboardingModal", () => { }); it("preserves split Anthropic quick-start cards and suppresses legacy Anthropic fallback", async () => { + /* + FNXC:Onboarding 2026-07-18-03:40: + The OpenAI Codex subscription card sits in quick start directly AFTER the + Anthropic subscription and BEFORE the API-key options. + */ mockFetchAuthStatus.mockResolvedValueOnce({ providers: [ { id: "openai", name: "OpenAI", authenticated: false, type: "api_key" }, + { id: "openai-codex", name: "OpenAI Codex", authenticated: false, type: "oauth" }, { id: "anthropic", name: "Anthropic", authenticated: false, type: "oauth" }, { id: "anthropic-api-key", name: "Anthropic API Key", authenticated: false, type: "api_key" }, { id: "anthropic-subscription", name: "Anthropic Subscription", authenticated: false, type: "oauth" }, @@ -663,7 +669,7 @@ describe("ModelOnboardingModal", () => { render(); const quickStartSection = await screen.findByTestId("onboarding-quick-start-providers"); - expect(getProviderOrderInSection(quickStartSection)).toEqual(["anthropic-subscription", "anthropic-api-key", "openai"]); + expect(getProviderOrderInSection(quickStartSection)).toEqual(["anthropic-subscription", "openai-codex", "anthropic-api-key", "openai"]); expect(within(quickStartSection).queryByTestId("onboarding-provider-card-anthropic")).toBeNull(); });