[eric] onboarding: clearer reveal (no leftover v2 tour, plain-english note + keep/remove copy)

This commit is contained in:
ciregenz
2026-07-15 17:30:21 -07:00
parent 4c912b17e5
commit 01ea10d888
3 changed files with 13 additions and 10 deletions
@@ -65,8 +65,8 @@ const OnboardingRoot: React.FC = () => {
!(s.onboardingProgress.completedSteps ?? []).includes('launch_agent') &&
Object.keys(s.agents?.sessions ?? {}).length === 0,
);
// Onboarding v3 owns the window on a fresh install; the v2 cursor tour stays dormant until the flow resolves.
const v3Owns = useAppSelector((s) => s.onboardingV3.flowActive);
// Onboarding v3 owns the window on a fresh install; the v2 cursor tour + panel stay dormant while the flow runs AND forever after it resolves (a v3'd user has already onboarded, so the v2 "connect your model / Show me" tour on top of the v3 reveal is contradictory clutter).
const v3Owns = useAppSelector((s) => s.onboardingV3.flowActive || !!s.settings.data.onboarding_v3);
const welcomeFiredRef = useRef(false);
const welcomeTimerRef = useRef<number | null>(null);
useEffect(() => {
@@ -58,15 +58,15 @@ const PrepKeepToast: React.FC = () => {
action={
<>
<Button size="small" onClick={finish} sx={{ color: c.accent.primary, fontWeight: 700 }}>
Keep
Keep them
</Button>
<Button size="small" onClick={discard} sx={{ color: c.text.tertiary }}>
Discard
Stop &amp; remove
</Button>
</>
}
>
{`I started ${names} while you set up. Keep going?`}
{`These are ${names}, which I started for you during setup. Keep them, or stop and remove them?`}
</Alert>
</Snackbar>
);
@@ -34,11 +34,14 @@ export function useOnboardingRevealSeed({ isActive, dashboardId, expandedSession
const cy = (vr.height / 2 - cs.panY) / cs.zoom;
const audit = prepped.find((j) => j.kind === 'audit');
const app = prepped.find((j) => j.kind === 'app');
const lines: string[] = ['While you were setting up, I got started.'];
if (scanSummary) lines.push(`Spotted on this Mac: ${scanSummary}.`);
if (audit) lines.push(`Already running: ${audit.title}.`);
if (app) lines.push(`Already building: ${app.title}.`);
if (starters.length > 0) lines.push(`Ready to run:\n${starters.slice(audit ? 1 : 0).map((s) => `- ${s.title}`).join('\n')}`);
const lines: string[] = ['Here is what I set up for you.'];
if (scanSummary) lines.push(`Looked around: ${scanSummary}.`);
const cards: string[] = [];
if (audit) cards.push(`- ${audit.title} (running now, on the left)`);
if (app) cards.push(`- ${app.title} (building now)`);
if (cards.length > 0) lines.push(`Working on:\n${cards.join('\n')}`);
if (starters.length > 0) lines.push(`Ready when you are:\n${starters.slice(audit ? 1 : 0).map((s) => `- ${s.title}`).join('\n')}`);
lines.push('Nothing is saved or deleted without you. Keep or discard anytime.');
dispatch(addNote({ x: cx + DEFAULT_CARD_W / 2 + 48, y: cy - 140, color: 'yellow', content: lines.join('\n\n') }));
prepped.forEach((job, i) => {
dispatch(placeCard({