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 <noreply@anthropic.com>
This commit is contained in:
7
.changeset/codex-quick-start-placement.md
Normal file
7
.changeset/codex-quick-start-placement.md
Normal file
@@ -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."
|
||||||
@@ -266,8 +266,11 @@ function getProviderDisplayName(providerId: string): string {
|
|||||||
FNXC:Onboarding 2026-07-03-00:00:
|
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.
|
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.
|
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 = [
|
const ONBOARDING_CURATED_PROVIDER_FAMILY_ORDER = [
|
||||||
"anthropic",
|
"anthropic",
|
||||||
|
|||||||
@@ -651,9 +651,15 @@ describe("ModelOnboardingModal", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("preserves split Anthropic quick-start cards and suppresses legacy Anthropic fallback", async () => {
|
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({
|
mockFetchAuthStatus.mockResolvedValueOnce({
|
||||||
providers: [
|
providers: [
|
||||||
{ id: "openai", name: "OpenAI", authenticated: false, type: "api_key" },
|
{ 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", name: "Anthropic", authenticated: false, type: "oauth" },
|
||||||
{ id: "anthropic-api-key", name: "Anthropic API Key", authenticated: false, type: "api_key" },
|
{ id: "anthropic-api-key", name: "Anthropic API Key", authenticated: false, type: "api_key" },
|
||||||
{ id: "anthropic-subscription", name: "Anthropic Subscription", authenticated: false, type: "oauth" },
|
{ id: "anthropic-subscription", name: "Anthropic Subscription", authenticated: false, type: "oauth" },
|
||||||
@@ -663,7 +669,7 @@ describe("ModelOnboardingModal", () => {
|
|||||||
render(<ModelOnboardingModal onComplete={vi.fn()} addToast={vi.fn()} projectId="proj_123" />);
|
render(<ModelOnboardingModal onComplete={vi.fn()} addToast={vi.fn()} projectId="proj_123" />);
|
||||||
|
|
||||||
const quickStartSection = await screen.findByTestId("onboarding-quick-start-providers");
|
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();
|
expect(within(quickStartSection).queryByTestId("onboarding-provider-card-anthropic")).toBeNull();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user