inspector/clients
Repository files (latest commit first)
Filename Latest commit message Latest commit date
cliffhall 26b6f03b69 fix(oauth): filter the step-up scope union too, not just the provider
Copilot review round 8 on #2114.

The provider's `scope` getter is not the only request path. Mid-session
`insufficient_scope` recovery builds its union from *raw* storage in
`enrichChallengeWithScopes` and hands it to `mcpAuth` directly, so it
never reads that getter. An `offline_access` inherited from an earlier
grant therefore reappeared during step-up and the SDK re-added
`prompt=consent` with the setting off — the failure this option exists
to prevent, on the one path that bypassed it. The comment claiming the
getter was "the one seam both readers go through" was wrong, and is
corrected to name both.

`handleAuthChallenge` now applies the same filter, gated on the setting
so the default path is untouched. The forced-retry reuses that value,
so filtering once at the computation site covers it.

`scopeForDeclinedRefreshGrant` gains the scopes a challenge requires,
honored exactly like a configured one: stripping a scope the server is
asking for would loop — re-authorize, earn the same challenge, strip it
again.

Three regressions; the inherited-scope one fails when the filter is
reverted.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013hzwzS8UvBsr4yZm7o7sev
Signed-off-by: cliffhall <cliff@futurescale.com>
2026-08-24 23:05:14 -04:00
..
cli chore: pin esbuild past the GHSA-g7r4-m6w7-qqqr range in web/cli/tui 2026-08-24 20:26:43 -04:00
launcher chore(lint): fail lint on warnings (--max-warnings 0) 2026-08-23 10:47:29 -04:00
tui chore: pin esbuild past the GHSA-g7r4-m6w7-qqqr range in web/cli/tui 2026-08-24 20:26:43 -04:00
web fix(oauth): filter the step-up scope union too, not just the provider 2026-08-24 23:05:14 -04:00