Skip to content

fix: dashboard shows Nous Portal as 'not connected' despite active auth#9261

Merged
teknium1 merged 1 commit into
mainfrom
hermes/hermes-8f9acae3
Apr 13, 2026
Merged

fix: dashboard shows Nous Portal as 'not connected' despite active auth#9261
teknium1 merged 1 commit into
mainfrom
hermes/hermes-8f9acae3

Conversation

@teknium1

Copy link
Copy Markdown
Contributor

Summary

Fixes the bug where the dashboard Keys tab shows Nous Portal as "not connected" even when the backend is fully authenticated and working.

Root cause: The dashboard's device-code flow (_nous_poller in web_server.py) saved credentials to the credential pool only, but get_nous_auth_status() only checked the auth store (auth.json). The inference path worked because resolve_runtime_provider() checks the credential pool, but the status display didn't.

Changes

hermes_cli/auth.pyget_nous_auth_status() now checks the credential pool first (matching get_codex_auth_status()'s existing pattern), then falls back to the auth store.

hermes_cli/web_server.py_nous_poller() now also persists to the auth store after saving to the credential pool, matching what the CLI flow (_login_nous) does.

tests/hermes_cli/test_auth_nous_provider.py — 3 new tests:

  • Pool-only credentials → logged_in: True
  • Auth-store fallback when pool is empty → logged_in: True
  • Both empty → logged_in: False

Test plan

python -m pytest tests/hermes_cli/test_auth_nous_provider.py -o 'addopts=' -q  # 14 passed
python -m pytest tests/hermes_cli/test_web_server.py -o 'addopts=' -q          # 47 passed
python -m pytest tests/hermes_cli/test_status.py tests/hermes_cli/test_nous_subscription.py tests/hermes_cli/test_doctor.py -o 'addopts=' -q  # 25 passed

The dashboard device-code flow (_nous_poller in web_server.py) saved
credentials to the credential pool only, while get_nous_auth_status()
only checked the auth store (auth.json). This caused the Keys tab to
show 'not connected' even when the backend was fully authenticated.

Two fixes:
1. get_nous_auth_status() now checks the credential pool first (like
   get_codex_auth_status() already does), then falls back to the auth
   store.
2. _nous_poller now also persists to the auth store after saving to
   the credential pool, matching the CLI flow (_login_nous).

Adds 3 tests covering pool-only, auth-store-fallback, and empty-state
scenarios.
@teknium1 teknium1 merged commit 32cea0c into main Apr 13, 2026
5 of 6 checks passed
@teknium1 teknium1 deleted the hermes/hermes-8f9acae3 branch April 13, 2026 23:32
ulasbilgen pushed a commit to ulasbilgen/hermes-adhd-agent that referenced this pull request May 1, 2026
…th (NousResearch#9261)

The dashboard device-code flow (_nous_poller in web_server.py) saved
credentials to the credential pool only, while get_nous_auth_status()
only checked the auth store (auth.json). This caused the Keys tab to
show 'not connected' even when the backend was fully authenticated.

Two fixes:
1. get_nous_auth_status() now checks the credential pool first (like
   get_codex_auth_status() already does), then falls back to the auth
   store.
2. _nous_poller now also persists to the auth store after saving to
   the credential pool, matching the CLI flow (_login_nous).

Adds 3 tests covering pool-only, auth-store-fallback, and empty-state
scenarios.
aj-nt pushed a commit to aj-nt/hermes-agent that referenced this pull request May 1, 2026
…th (NousResearch#9261)

The dashboard device-code flow (_nous_poller in web_server.py) saved
credentials to the credential pool only, while get_nous_auth_status()
only checked the auth store (auth.json). This caused the Keys tab to
show 'not connected' even when the backend was fully authenticated.

Two fixes:
1. get_nous_auth_status() now checks the credential pool first (like
   get_codex_auth_status() already does), then falls back to the auth
   store.
2. _nous_poller now also persists to the auth store after saving to
   the credential pool, matching the CLI flow (_login_nous).

Adds 3 tests covering pool-only, auth-store-fallback, and empty-state
scenarios.
02356abc pushed a commit to 02356abc/hermes-agent that referenced this pull request May 14, 2026
…th (NousResearch#9261)

The dashboard device-code flow (_nous_poller in web_server.py) saved
credentials to the credential pool only, while get_nous_auth_status()
only checked the auth store (auth.json). This caused the Keys tab to
show 'not connected' even when the backend was fully authenticated.

Two fixes:
1. get_nous_auth_status() now checks the credential pool first (like
   get_codex_auth_status() already does), then falls back to the auth
   store.
2. _nous_poller now also persists to the auth store after saving to
   the credential pool, matching the CLI flow (_login_nous).

Adds 3 tests covering pool-only, auth-store-fallback, and empty-state
scenarios.
gweeteve pushed a commit to gweeteve/hermes-agent that referenced this pull request Jun 2, 2026
…th (NousResearch#9261)

The dashboard device-code flow (_nous_poller in web_server.py) saved
credentials to the credential pool only, while get_nous_auth_status()
only checked the auth store (auth.json). This caused the Keys tab to
show 'not connected' even when the backend was fully authenticated.

Two fixes:
1. get_nous_auth_status() now checks the credential pool first (like
   get_codex_auth_status() already does), then falls back to the auth
   store.
2. _nous_poller now also persists to the auth store after saving to
   the credential pool, matching the CLI flow (_login_nous).

Adds 3 tests covering pool-only, auth-store-fallback, and empty-state
scenarios.
Egavasyug pushed a commit to Egavasyug/hermes-agent that referenced this pull request Jun 10, 2026
…th (NousResearch#9261)

The dashboard device-code flow (_nous_poller in web_server.py) saved
credentials to the credential pool only, while get_nous_auth_status()
only checked the auth store (auth.json). This caused the Keys tab to
show 'not connected' even when the backend was fully authenticated.

Two fixes:
1. get_nous_auth_status() now checks the credential pool first (like
   get_codex_auth_status() already does), then falls back to the auth
   store.
2. _nous_poller now also persists to the auth store after saving to
   the credential pool, matching the CLI flow (_login_nous).

Adds 3 tests covering pool-only, auth-store-fallback, and empty-state
scenarios.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant