feat(onboarding): the connect step signs in from its own button (#12801)

Connect starts the sign-in; the card that appears is the sign-in rather
than an offer of one; success advances to Review rather than reporting
itself. The two logins end in different places and the button says which:
Claude submits a code back here, so it spins on "Connecting"; OpenAI
finishes in another tab, so it stays a still, disabled Next until the
poll lands.

AdapterLoginPanel grows autoStart / onCancel / onConnected / chrome
rather than a second implementation — the session start, both polls, the
server deadline, the one-shot completion read and the unmount release are
the parts onboarding needs unchanged. Every prop is off by default, so
the agent form and the new-agent page render what they did before.

Claude's code auto-submits on the paste, not on every change:
isValidBrowserCode accepts any printable ASCII from one character up, so
a value-driven submit fired on the first keystroke of anyone who typed.

Also orders the OpenAI card and the settings displayed-code panel
code-above-link, with the instruction worded to match, and releases the
displayed-code session on unmount so an abandoned login stops holding the
one-per-owner reservation.
This commit is contained in:
Tonio authored and GitHub committed 2026-09-03 21:45:45 -07:00
1 parent 9ef3b087c1
commit 1a74719309
12 files changed
+1534 -124

No files matched your search

+28
View File
@@ -0,0 +1,28 @@
<!DOCTYPE html>
<html lang="en" class="dark" style="color-scheme: dark">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
<meta name="theme-color" content="#18181b" />
<title>Connect flow — Paperclip onboarding</title>
<link rel="icon" href="/favicon.svg" type="image/svg+xml" />
<style>
/*
Unlayered, for the same reason `connect-model-preview.html` carries the
same rule: index.css pins `html, body` to viewport height with
`overflow: hidden` inside @layer base, which is right for the app shell
and clips this page's footer out of reach on a short window.
*/
html,
body {
height: auto;
min-height: 100%;
overflow-y: auto;
}
</style>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/connect-flow-preview-main.tsx"></script>
</body>
</html>