diff --git a/docs/screenshots/onboarding-improve/01-brand-new-ai-setup.png b/docs/screenshots/onboarding-improve/01-brand-new-ai-setup.png new file mode 100644 index 0000000000..24bd0e41c6 Binary files /dev/null and b/docs/screenshots/onboarding-improve/01-brand-new-ai-setup.png differ diff --git a/docs/screenshots/onboarding-improve/01-provider-ai-setup.png b/docs/screenshots/onboarding-improve/01-provider-ai-setup.png deleted file mode 100644 index 1e601f558c..0000000000 Binary files a/docs/screenshots/onboarding-improve/01-provider-ai-setup.png and /dev/null differ diff --git a/docs/screenshots/onboarding-improve/01-real-first-run-dashboard.png b/docs/screenshots/onboarding-improve/01-real-first-run-dashboard.png deleted file mode 100644 index 8094f0909f..0000000000 Binary files a/docs/screenshots/onboarding-improve/01-real-first-run-dashboard.png and /dev/null differ diff --git a/docs/screenshots/onboarding-improve/02-brand-new-github-setup.png b/docs/screenshots/onboarding-improve/02-brand-new-github-setup.png new file mode 100644 index 0000000000..5d8446a42f Binary files /dev/null and b/docs/screenshots/onboarding-improve/02-brand-new-github-setup.png differ diff --git a/docs/screenshots/onboarding-improve/02-provider-github.png b/docs/screenshots/onboarding-improve/02-provider-github.png deleted file mode 100644 index c6eecc2e1b..0000000000 Binary files a/docs/screenshots/onboarding-improve/02-provider-github.png and /dev/null differ diff --git a/docs/screenshots/onboarding-improve/02-real-auth-step.png b/docs/screenshots/onboarding-improve/02-real-auth-step.png deleted file mode 100644 index 8094f0909f..0000000000 Binary files a/docs/screenshots/onboarding-improve/02-real-auth-step.png and /dev/null differ diff --git a/docs/screenshots/onboarding-improve/03-brand-new-project-step.png b/docs/screenshots/onboarding-improve/03-brand-new-project-step.png new file mode 100644 index 0000000000..87cf32ab5f Binary files /dev/null and b/docs/screenshots/onboarding-improve/03-brand-new-project-step.png differ diff --git a/docs/screenshots/onboarding-improve/03-provider-project-setup.png b/docs/screenshots/onboarding-improve/03-provider-project-setup.png deleted file mode 100644 index 243657d67a..0000000000 Binary files a/docs/screenshots/onboarding-improve/03-provider-project-setup.png and /dev/null differ diff --git a/docs/screenshots/onboarding-improve/03-real-project-registration-empty.png b/docs/screenshots/onboarding-improve/03-real-project-registration-empty.png deleted file mode 100644 index ae3b8c88a4..0000000000 Binary files a/docs/screenshots/onboarding-improve/03-real-project-registration-empty.png and /dev/null differ diff --git a/docs/screenshots/onboarding-improve/04-brand-new-project-details.png b/docs/screenshots/onboarding-improve/04-brand-new-project-details.png new file mode 100644 index 0000000000..4a882272ab Binary files /dev/null and b/docs/screenshots/onboarding-improve/04-brand-new-project-details.png differ diff --git a/docs/screenshots/onboarding-improve/04-provider-agent-step.png b/docs/screenshots/onboarding-improve/04-provider-agent-step.png deleted file mode 100644 index 3ee02dd6d1..0000000000 Binary files a/docs/screenshots/onboarding-improve/04-provider-agent-step.png and /dev/null differ diff --git a/docs/screenshots/onboarding-improve/04-real-project-registration-filled.png b/docs/screenshots/onboarding-improve/04-real-project-registration-filled.png deleted file mode 100644 index db1395e7b3..0000000000 Binary files a/docs/screenshots/onboarding-improve/04-real-project-registration-filled.png and /dev/null differ diff --git a/docs/screenshots/onboarding-improve/05-brand-new-project-ready.png b/docs/screenshots/onboarding-improve/05-brand-new-project-ready.png new file mode 100644 index 0000000000..34759f11b4 Binary files /dev/null and b/docs/screenshots/onboarding-improve/05-brand-new-project-ready.png differ diff --git a/docs/screenshots/onboarding-improve/05-provider-first-task.png b/docs/screenshots/onboarding-improve/05-provider-first-task.png deleted file mode 100644 index 2b2bcd0518..0000000000 Binary files a/docs/screenshots/onboarding-improve/05-provider-first-task.png and /dev/null differ diff --git a/docs/screenshots/onboarding-improve/05-real-first-agent-ceo-default.png b/docs/screenshots/onboarding-improve/05-real-first-agent-ceo-default.png deleted file mode 100644 index 1c866ba6ba..0000000000 Binary files a/docs/screenshots/onboarding-improve/05-real-first-agent-ceo-default.png and /dev/null differ diff --git a/docs/screenshots/onboarding-improve/06-brand-new-agent-step.png b/docs/screenshots/onboarding-improve/06-brand-new-agent-step.png new file mode 100644 index 0000000000..624c3e6bb6 Binary files /dev/null and b/docs/screenshots/onboarding-improve/06-brand-new-agent-step.png differ diff --git a/docs/screenshots/onboarding-improve/06-real-first-agent-engineer-template.png b/docs/screenshots/onboarding-improve/06-real-first-agent-engineer-template.png deleted file mode 100644 index e8114935df..0000000000 Binary files a/docs/screenshots/onboarding-improve/06-real-first-agent-engineer-template.png and /dev/null differ diff --git a/docs/screenshots/onboarding-improve/07-brand-new-first-task-step.png b/docs/screenshots/onboarding-improve/07-brand-new-first-task-step.png new file mode 100644 index 0000000000..0fe2f107ce Binary files /dev/null and b/docs/screenshots/onboarding-improve/07-brand-new-first-task-step.png differ diff --git a/docs/screenshots/onboarding-improve/07-real-skip-complete-dashboard.png b/docs/screenshots/onboarding-improve/07-real-skip-complete-dashboard.png deleted file mode 100644 index 5237f5a4dd..0000000000 Binary files a/docs/screenshots/onboarding-improve/07-real-skip-complete-dashboard.png and /dev/null differ diff --git a/docs/screenshots/onboarding-improve/08-new-project-details.png b/docs/screenshots/onboarding-improve/08-new-project-details.png new file mode 100644 index 0000000000..b7b9df1514 Binary files /dev/null and b/docs/screenshots/onboarding-improve/08-new-project-details.png differ diff --git a/docs/screenshots/onboarding-improve/08-real-create-auth-step.png b/docs/screenshots/onboarding-improve/08-real-create-auth-step.png deleted file mode 100644 index 8094f0909f..0000000000 Binary files a/docs/screenshots/onboarding-improve/08-real-create-auth-step.png and /dev/null differ diff --git a/docs/screenshots/onboarding-improve/09-new-project-agent-step.png b/docs/screenshots/onboarding-improve/09-new-project-agent-step.png new file mode 100644 index 0000000000..b328bb61b0 Binary files /dev/null and b/docs/screenshots/onboarding-improve/09-new-project-agent-step.png differ diff --git a/docs/screenshots/onboarding-improve/09-real-create-project-empty.png b/docs/screenshots/onboarding-improve/09-real-create-project-empty.png deleted file mode 100644 index ae3b8c88a4..0000000000 Binary files a/docs/screenshots/onboarding-improve/09-real-create-project-empty.png and /dev/null differ diff --git a/docs/screenshots/onboarding-improve/10-real-create-project-filled.png b/docs/screenshots/onboarding-improve/10-real-create-project-filled.png deleted file mode 100644 index d4772ba0c8..0000000000 Binary files a/docs/screenshots/onboarding-improve/10-real-create-project-filled.png and /dev/null differ diff --git a/docs/screenshots/onboarding-improve/11-real-create-agent-ceo-default.png b/docs/screenshots/onboarding-improve/11-real-create-agent-ceo-default.png deleted file mode 100644 index c143ffcd1a..0000000000 Binary files a/docs/screenshots/onboarding-improve/11-real-create-agent-ceo-default.png and /dev/null differ diff --git a/docs/screenshots/onboarding-improve/12-real-create-agent-complete-dashboard.png b/docs/screenshots/onboarding-improve/12-real-create-agent-complete-dashboard.png deleted file mode 100644 index 81af09f5eb..0000000000 Binary files a/docs/screenshots/onboarding-improve/12-real-create-agent-complete-dashboard.png and /dev/null differ diff --git a/packages/dashboard/app/components/AppModals.tsx b/packages/dashboard/app/components/AppModals.tsx index 442edf3372..69d0d0bf5f 100644 --- a/packages/dashboard/app/components/AppModals.tsx +++ b/packages/dashboard/app/components/AppModals.tsx @@ -475,11 +475,13 @@ export function AppModals({ onProjectRegistered={projectActions.handleSetupComplete} onClose={closeSetupWizardWithNav} agentOnboardingEnabled={agentOnboardingEnabled} + includeAgentStep={!modalManager.modelOnboardingOpen} /> )} - {modalManager.modelOnboardingOpen && ( + {/* FNXC:Onboarding 2026-06-22-05:06: Brand-new onboarding owns AI/GitHub first, then opens the project setup wizard only as the Project step sub-flow. Hide model onboarding while that project wizard is mounted so users never see both flows at once. */} + {modalManager.modelOnboardingOpen && !modalManager.setupWizardOpen && ( void; /** Enables the existing AI interview entry point for first-agent drafting. */ agentOnboardingEnabled?: boolean; + /** When false, register the project and return control to a parent onboarding flow. */ + includeAgentStep?: boolean; } -type WizardStep = "auth" | "manual" | "agent" | "complete"; +type WizardStep = "manual" | "agent" | "complete"; type ManualSetupMode = "existing" | "clone"; type AgentOutcome = "created" | "skipped" | null; @@ -54,22 +55,27 @@ interface WizardState { } /** - * Setup wizard for first-run project registration. + * Setup wizard for project registration. * - * Provides a polished onboarding experience with a directory picker - * for selecting the project directory and auto-name suggestion. + * Provides a focused project-details -> project-agent flow with a directory + * picker for selecting the project directory and auto-name suggestion. */ export function SetupWizardModal({ onProjectRegistered, onClose, agentOnboardingEnabled = false, + includeAgentStep = true, }: SetupWizardModalProps) { const { t } = useTranslation("app"); const helpUrl = "https://discord.gg/ksrfuy7WYR"; /* FNXC:Onboarding 2026-06-22-03:11: - First-run project setup must offer a first persistent agent after registration, defaulting to the CEO preset while still letting users choose another template or skip creation. + New-project setup must collect project details first, then offer a project-specific persistent agent after registration, defaulting to the CEO preset while still letting users choose another template or skip creation. The AI interview entry point is feature-flagged by `agentOnboardingEnabled`; preset creation and skip remain available without it. + + FNXC:Onboarding 2026-06-22-05:16: + Brand-new onboarding already has its own Agent step after AI, GitHub, and Project setup. + When this wizard is opened as that Project sub-flow, register the project and return immediately so users do not see two agent prompts. */ const ceoPreset = useMemo( () => getPresetById("ceo") ?? AGENT_PRESETS[0]!, @@ -77,7 +83,7 @@ export function SetupWizardModal({ ); const [isOpen, setIsOpen] = useState(true); const [state, setState] = useState(() => ({ - step: getAuthToken() ? "manual" : "auth", + step: "manual", manualMode: "existing", manualPath: "", manualCloneUrl: "", @@ -94,8 +100,6 @@ export function SetupWizardModal({ agentOutcome: null, })); const [showAdvancedSettings, setShowAdvancedSettings] = useState(false); - const [authTokenInput, setAuthTokenInput] = useState(""); - const [storedAuthToken, setStoredAuthToken] = useState(() => getAuthToken()); const [isInterviewOpen, setIsInterviewOpen] = useState(false); const agentErrorRef = useRef(null); @@ -153,6 +157,11 @@ export function SetupWizardModal({ const result = await registerProject(input); + if (!includeAgentStep) { + onProjectRegistered(result); + return; + } + setState((prev) => ({ ...prev, step: "agent", @@ -166,27 +175,7 @@ export function SetupWizardModal({ error: err instanceof Error ? err.message : "Failed to register project", })); } - }, [state.manualPath, state.manualName, state.manualCloneUrl, state.manualMode, state.manualIsolationMode, state.manualNodeId]); - - const handleSetAuthToken = useCallback(() => { - const token = authTokenInput.trim(); - if (!token) return; - setAuthToken(token); - setStoredAuthToken(token); - setAuthTokenInput(""); - // If we're on the auth step, advance to the manual step - setState((prev) => prev.step === "auth" ? { ...prev, step: "manual" } : prev); - }, [authTokenInput]); - - const handleResetAuthToken = useCallback(() => { - clearAuthToken(); - setStoredAuthToken(undefined); - setAuthTokenInput(""); - }, []); - - const handleSkipAuth = useCallback(() => { - setState((prev) => ({ ...prev, step: "manual" })); - }, []); + }, [includeAgentStep, onProjectRegistered, state.manualPath, state.manualName, state.manualCloneUrl, state.manualMode, state.manualIsolationMode, state.manualNodeId]); const handlePresetSelect = useCallback((presetId: string) => { const preset = getPresetById(presetId); @@ -310,7 +299,6 @@ export function SetupWizardModal({ {t("setup.brandName", "Fusion")}

- {state.step === "auth" && t("setup.setAuthToken", "Set Auth Token")} {state.step === "manual" && t("setup.welcomeToFusion", "Welcome to Fusion")} {state.step === "agent" && t("setup.firstAgentTitle", "Create your first agent")} {state.step === "complete" && t("setup.setupCompleteTitle", "Setup Complete!")} @@ -329,36 +317,6 @@ export function SetupWizardModal({ {/* Content */}
- {/* Auth Step */} - {state.step === "auth" && ( -
-

- {t("setup.authDescription", "This dashboard requires an auth token to communicate with the Fusion daemon. Paste the token below to continue.")} -

-
- - setAuthTokenInput(e.target.value)} - placeholder={t("setup.pasteTokenPlaceholder", "Paste the daemon auth token")} - autoComplete="off" - spellCheck={false} - autoFocus - /> -

- {t("setup.tokenEnvVar", "The token was set via the {{env}} environment variable when starting the dashboard.", { env: "FUSION_DAEMON_TOKEN" })} -

-
- {state.error && ( -
- {state.error} -
- )} -
- )} - {/* Manual Step */} {state.step === "manual" && (
@@ -511,44 +469,6 @@ export function SetupWizardModal({
-
- -
- setAuthTokenInput(e.target.value)} - placeholder={storedAuthToken ? t("setup.replaceTokenPlaceholder", "Enter a new token to replace the stored one") : t("setup.pasteTokenForBrowserPlaceholder", "Paste the auth token for this browser")} - autoComplete="off" - spellCheck={false} - /> -
- - {storedAuthToken && ( - - )} -
-
-

- {storedAuthToken - ? t("setup.tokenStoredHint", "A token is already stored in this browser. You can update or reset it below.") - : t("setup.noTokenHint", "No token is stored. Use the auth prompt at the top of the wizard, or set one here.")} -

-
)} @@ -682,23 +602,6 @@ export function SetupWizardModal({ > {t("setup.needHelp", "Need help?")} - {state.step === "auth" && ( - <> - - - - )} {state.step === "manual" && (