Repository navigation
fix: the browser's approval reaches onboard on Windows (1.7.1) - #167
Merged
Merged
Conversation
There was a problem hiding this comment.
🟡 Changes recommended
Unexpected binding failures can still leave an IPv4-only listener while another program owns the matching IPv6 port, allowing browser callbacks to reach the wrong program.
1 open issue
What changed in this PR
This PR improves browser approval delivery for onboard, replacing its generated callback listener while leaving auth login unchanged.
Changes:
- Adds dual-loopback binding, concurrent request reads, and stale-callback handling.
- Lets Windows sign-in workers leave Job Objects when permitted and extends the Windows smoke test.
- Releases version 1.7.1 and updates
rustls-webpkito 0.103.16.
| File | Description |
|---|---|
cli/elevenlabs/workflow/onboard/session.rs |
Adds Windows worker breakaway with fallback. |
cli/elevenlabs/workflow/onboard/auth.rs |
Routes onboarding through the new sign-in implementation. |
cli/elevenlabs/workflow/mod.rs |
Registers the loopback module. |
cli/elevenlabs/workflow/loopback.rs |
Implements callback handling, token exchange, and regression tests. |
Cargo.toml |
Bumps the CLI version to 1.7.1. |
Cargo.lock |
Updates CLI and rustls-webpki versions. |
.github/workflows/windows-smoke.yml |
Checks port fallback when IPv6 port 8484 is occupied. |
Review effort: Balanced
bitpshr
added this pull request to stack #172
October 22, 2026 12:56
PaulAsjes
approved these changes
Oct 22, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Summary
On Windows, about 1 in 10
onboardAuthorize clicks never reaches the CLI. The page creates and copies a key, but the redirect tolocalhostdoesn't arrive, and most people then make a key by hand. I reproduced it on awindows-latestrunner (Chrome 155, Edge 155) with the released 1.7.0. The listeneronboardborrowed fromauth loginloses the callback in four ways:localhostresolves to. If another program already holds[::1]:8484, it quietly takes127.0.0.1:8484. Browsers dial[::1]first, so the redirect goes to that program.state, such as an old tab from an earlierconnect, ends the sign-in that's waiting. The right tab then gets "connection refused".It also waits on one connection at a time with no time limit, and gives up after 8 that aren't the callback.
So
onboardnow has its own listener inworkflow/loopback.rs:127.0.0.1and[::1], on the first registered port where neither is taken.stateno longer ends the sign-in. Neither the approval page's Deny nor the server's error redirects ever send one, so it could only come from some other page or program, which could end the sign-in or put its own text in the agent's reply. It gets the error page like any other callback that isn't ours.On Windows the worker leaves the agent's Job Object when the job allows it.
Token storage, the redirect URIs and the worker's replies are unchanged.
auth loginstill uses the generated listener. A CLI can't replace that flow today, so the new module is written soauth logincan switch to it later.The Windows smoke test now holds
[::1]:8484with another program before it starts, checks that the sign-in moved to 8483, and sends Deny with itsstatethe way the page does. Bumps the version to 1.7.1, andrustls-webpkito 0.103.16:auditnow flags 0.103.15 (RUSTSEC-2026-0382), onmaintoo.Testing
windows-latestrunner: 40 scenarios with real Chrome and Edge, before and after.[::1]:8484, with an older sign-in waiting, with an old tab approved first, after the agent terminates its job, and after 8 empty connections. One idle connection held it for 10 s.cargo test: the new listener tests and the 25 onboard integration tests pass on macOS. The Windows code type-checks forx86_64-pc-windows-msvc.