From 2a57e1a1af4502f9c7e1532a63a7477ba17dae5a Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sun, 9 Aug 2026 04:50:18 -0700 Subject: [PATCH] fix(github-copilot): preserve cumulative poll backoff (#103434) --- extensions/github-copilot/login.test.ts | 2 +- extensions/github-copilot/login.ts | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/extensions/github-copilot/login.test.ts b/extensions/github-copilot/login.test.ts index 7aeeb2194d39..20c434443fa8 100644 --- a/extensions/github-copilot/login.test.ts +++ b/extensions/github-copilot/login.test.ts @@ -370,7 +370,7 @@ describe("runGitHubCopilotDeviceFlow — polling intervals", () => { const pollTimes: number[] = []; const pollResponses = [ { error: "authorization_pending" }, - { error: "slow_down" }, + { error: "slow_down", interval: 7 }, { error: "slow_down" }, { access_token: "test-access-token", token_type: "bearer" }, ]; diff --git a/extensions/github-copilot/login.ts b/extensions/github-copilot/login.ts index ee0ae90807cc..8e9a371b5fd4 100644 --- a/extensions/github-copilot/login.ts +++ b/extensions/github-copilot/login.ts @@ -222,9 +222,11 @@ async function pollForAccessToken(params: { continue; } if (err === "slow_down") { - intervalMs = - positiveSecondsToSafeMilliseconds(json.interval) ?? - Math.min(Number.MAX_SAFE_INTEGER, intervalMs + GITHUB_DEVICE_FLOW_SLOW_DOWN_INCREMENT_MS); + // slow_down is cumulative; a returned interval may raise but never lower the required floor. + intervalMs = Math.max( + Math.min(Number.MAX_SAFE_INTEGER, intervalMs + GITHUB_DEVICE_FLOW_SLOW_DOWN_INCREMENT_MS), + positiveSecondsToSafeMilliseconds(json.interval) ?? 0, + ); continue; } if (err === "expired_token") {