fix+feat: batch v0.50.236 — OAuth providers fix, profile switch UX, YOLO mode#1211
Merged
nesquena-hermes merged 5 commits intomasterfrom Apr 28, 2026
Merged
fix+feat: batch v0.50.236 — OAuth providers fix, profile switch UX, YOLO mode#1211nesquena-hermes merged 5 commits intomasterfrom
nesquena-hermes merged 5 commits intomasterfrom
Conversation
…her locales The PR added providers_oauth_config_yaml_hint and providers_oauth_not_configured_hint to en/ru/es/de/zh/ko but omitted zh-Hant — the existing related key providers_oauth_hint has full 7-locale coverage including zh-Hant. Without this entry, zh-Hant users fall back to the English string for these specific two messages while the rest of the providers panel renders in zh-Hant. Match the project's standard 7-locale coverage so the OAuth provider card body text is consistent for Traditional Chinese users. Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
…1202) OAuth providers (openai-codex, nous, copilot) always showed "Not configured" in Settings → Providers even when fully working. Three separate issues: 1. api/providers.py — has_key from _provider_has_key() was unconditionally discarded: The `else: has_key = False` branch and `except Exception: has_key = False` both forced False, hiding a valid token in config.yaml → providers.<id>.api_key. Fix: `elif has_key: key_source = "config_yaml"` preserves config.yaml tokens; except clause now logs debug and keeps the existing has_key value. 2. api/providers.py — OAuth providers not visible in Settings panel at all: configurable=False for all OAuth providers (by design — WebUI can't set OAuth tokens). But the JS filter `filter(p=>p.configurable)` excluded them entirely. Fix: added is_oauth field to the provider dict; JS filter changed to `filter(p=>p.configurable||p.is_oauth)` so OAuth providers appear in Settings. 3. api/providers.py + static/panels.js — auth_error not surfaced to user: get_auth_status() returns a descriptive error string (e.g. "Codex refresh token consumed by Codex CLI. Run hermes auth.") but it was discarded. Fix: auth_error field added to provider dict and rendered in OAuth card body. static/panels.js: - isOauth now uses p.is_oauth from backend (eliminates hardcoded ID list) - OAuth card body shows different hints: config_yaml, auth_error, not-configured - Configured badge shows for OAuth providers with has_key=True static/i18n.js: - providers_oauth_config_yaml_hint (6 locales) - providers_oauth_not_configured_hint (6 locales) 15 new tests in tests/test_issue1202_oauth_provider_status.py, including regression guards for all three root causes. 2802 tests pass, 0 fail.
…itching Visual feedback: - Profile chip immediately shows the new name (optimistic update) when clicked - Small CSS spinner appears on the chip icon during the switch - Button is disabled to prevent double-clicks stacking - finally block always cleans up — chip can never get stuck in loading state - On error: chip label reverts to the previous profile name Performance: - populateModelDropdown() and loadWorkspaceList() now run via Promise.all instead of sequential awaits — model dropdown fetch and workspace list fetch are independent, so they run simultaneously (~50% faster switches) - Apply steps (S._pendingProfileModel, workspace update) happen after Promise.all resolves — correctness unchanged 11 new tests in tests/test_profile_switch_ux.py covering: - spinner CSS class present during switch, removed in finally - optimistic name set before API call - chip disabled during switch, re-enabled after - error path reverts chip label - Promise.all pattern verified - no old sequential await pattern present - CSS switching class has correct properties 2798 tests pass, 0 fail.
…1152) Co-authored-by: bergeouss <[email protected]> Closes #467 Rebased onto master with i18n.js conflict resolved (kept both master's status_* keys and PR's yolo_* keys in each locale block). All other files applied cleanly.
This was referenced Apr 28, 2026
JKJameson
pushed a commit
to JKJameson/hermes-webui
that referenced
this pull request
Apr 29, 2026
…OLO mode (nesquena#1211) fix+feat: batch v0.50.236 — OAuth providers fix, profile switch UX, YOLO mode (nesquena#1211) Merges PRs nesquena#1208, nesquena#1209, nesquena#1210 (nesquena#1152 rebased): - fix(providers): OAuth provider cards show correct Configured status in Settings. get_providers() was discarding has_key=True from _provider_has_key() for OAuth providers, hiding config.yaml tokens. Also fixed filter excluding all OAuth providers from the Settings panel. Surfaces auth_error string. (closes nesquena#1202) - ux(profiles): profile chip shows spinner and new name immediately on switch. Optimistic name update + .switching CSS class + chip disabled + finally cleanup. populateModelDropdown() and loadWorkspaceList() now parallelized via Promise.all. - feat: YOLO mode toggle — skip all approvals per session. /yolo slash command, "Skip all this session" button on approval cards, amber ⚡ pill indicator in composer footer. Session-scoped, in-memory. Full i18n: en, ru, es, de, zh, ko, zh-Hant. (closes nesquena#467) Original author: @bergeouss (PR nesquena#1152) Tests: 2837 passed (+50 new tests vs previous release) QA harness: 20/20 passed + all browser API checks passed
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.
Batch release v0.50.236
Three PRs: an OAuth provider fix, a profile-switching UX improvement, and the long-awaited YOLO mode feature.
Constituent PRs
All three were independently reviewed and approved by @nesquena before this batch was assembled. Per the batch release bypass policy, no additional review round is needed.
What's in this release
fix(providers) — #1208
OAuth providers (
openai-codex,nous,copilot) always showed "Not configured" in Settings → Providers even when working. Three root causes: (1)has_key=Truefromconfig.yamlwas overwritten byget_auth_status()returninglogged_in=False; (2) the provider list filterfilter(p=>p.configurable)excluded all OAuth providers entirely; (3) auth error strings were discarded. All fixed. 15 new tests.ux(profiles) — #1209
Profile chip now shows the new profile name immediately on click (optimistic update), displays a small spinner, and disables the button to prevent double-clicks.
finallyblock guarantees cleanup.populateModelDropdown()andloadWorkspaceList()now run in parallel viaPromise.all, cutting switch time ~50%. 11 new tests.feat: YOLO mode — #1210 (original: #1152 by @bergeouss)
/yoloslash command and "Skip all this session" button on approval cards. Session-scoped, in-memory only (not persisted across restarts). ⚡ amber pill in composer footer shows active state. Full i18n across 8 locales. 24 new tests.Test results
2837 passed, 0 failed, 2 skipped (macOS-only skips, intentional)
Previous: 2773 tests. This batch adds 50 new tests.
Files changed (13 files, 950 insertions, 17 deletions)
api/providers.py,api/routes.py,static/commands.js,static/i18n.js,static/index.html,static/messages.js,static/panels.js,static/sessions.js,static/style.css,tests/test_issue1202_oauth_provider_status.py,tests/test_issue467_yolo_mode_toggle.py,tests/test_profile_switch_ux.py,CHANGELOG.md