Skip to content

feat(console): ProviderHealthPanel — inline login action + inactive provider collapse#295

Open
maxnoller wants to merge 3 commits intomainfrom
worktree-squishy-napping-floyd
Open

feat(console): ProviderHealthPanel — inline login action + inactive provider collapse#295
maxnoller wants to merge 3 commits intomainfrom
worktree-squishy-napping-floyd

Conversation

@maxnoller
Copy link
Copy Markdown
Member

Summary

  • Adds a shared ProviderHealthPanel component (provider-health.tsx + CSS module) used by both Dashboard and Gateway pages
  • Local providers that aren't running (ollama, lmstudio, llamacpp, vllm) collapse into a single quiet footer line instead of showing as red/failing rows
  • When a provider has loginRequired: true from the backend, its row gets an amber left-border accent, a pulsing warning dot, and an inline Log in → action chip — no provider name hardcoding
  • Backend: added loginRequired?: boolean to GatewayProviderHealthEntry and set it in buildGatewayProviderHealth when codex.reloginRequired

Visual states

State Appearance
Healthy Green dot, transparent left border
Warning (login required) Amber pulsing dot, amber left-border accent, inline "Log in →" chip
Down (remote, unreachable) Red pulsing dot, red left-border accent
Inactive (local, not running) Collapsed into footer: ollama · lmstudio not running locally

Test plan

  • Dashboard and Gateway render provider rows identical to before for healthy providers
  • With codex.reloginRequired = true: amber row + pulsing dot + "Log in →" chip appears; clicking navigates to /config
  • With Ollama/LMStudio not running: collapsed to footer line, not shown as a failing row
  • Dark mode: all states render correctly
  • npm run typecheck passes in console/

…ollapse

Adds a shared ProviderHealthPanel component used by both Dashboard and
Gateway pages to surface provider health with actionable UI.

- New component: console/src/components/provider-health.tsx
  - Shared ProviderHealthPanel with ProviderRow
  - Resolves status (healthy / warning / inactive / down) per provider
  - Inactive local providers (ollama, lmstudio, llamacpp, vllm) that are
    not running collapse into a single footer line instead of red rows
  - Warning rows get an amber left-border accent + pulsing status dot
  - "Log in →" appears inline as an action chip when loginRequired is true
    (no provider name hardcoding — driven by backend flag)

- Backend: adds loginRequired?: boolean to GatewayProviderHealthEntry
  and sets it in buildGatewayProviderHealth when codex.reloginRequired

- Console types: propagates loginRequired onto the providerHealth record

- gateway.tsx and dashboard.tsx replaced their list-stack provider rows
  with <ProviderHealthPanel>
After #289 added confirmation dialogs for destructive actions, the
restart-gateway and forget-token tests needed an extra click to confirm
through the dialog before the underlying action fires.
@maxnoller maxnoller force-pushed the worktree-squishy-napping-floyd branch from 6e3a5cb to 2ed5759 Compare April 13, 2026 11:23
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