mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-05-30 06:41:51 +00:00
Phase 7 surfaces the OAuth gate state to users.
web/src/components/AuthWidget.tsx (new):
Sidebar widget that fetches /api/auth/me on mount and renders a
compact 'Logged in as <user_id…> via <provider>' row with a logout
icon. Contract V1 (Nous Portal) emits no email/display_name claims,
so user_id is the display value (truncated to 14 chars + ellipsis);
display_name and email fallthroughs are forward-compat for OQ-C1.
Renders nothing on 401 from /api/auth/me — that's the signal the
gate isn't engaged (loopback mode), in which case the widget would
be confusing.
Logout POSTs /auth/logout (which clears cookies + redirects to
/login) then full-page-navigates to /login itself; the SPA's fetch
wrapper doesn't follow that redirect, so the navigation is explicit.
web/src/App.tsx: mounts <AuthWidget /> above <SidebarFooter />.
Component is self-hiding in loopback mode so there's no need for a
conditional mount.
web/src/lib/api.ts:
- getAuthMe() + logout() helpers
- AuthMeResponse type
- StatusResponse gets optional auth_required + auth_providers fields
so the existing StatusPage can render a gated/loopback badge.
hermes_cli/web_server.py: /api/status payload now includes
- auth_required: bool — whether app.state.auth_required is True
- auth_providers: list[str] — registered DashboardAuthProvider names
Lazy-imports list_providers so early-startup status calls don't
crash if the dashboard_auth module is still being set up.
tests/hermes_cli/test_dashboard_auth_status_endpoint.py: 3 new tests
covering the new status fields in both gated and loopback modes plus
a regression that no existing field got dropped from the payload.
The hermes status CLI is unchanged in this commit — that command
tracks model providers + OAuth credentials, not running-dashboard
state. The /api/status endpoint is the canonical place to query
dashboard auth-gate state, consumed by the React StatusPage already.
|
||
|---|---|---|
| .. | ||
| ui | ||
| AuthWidget.tsx | ||
| AutoField.tsx | ||
| Backdrop.tsx | ||
| BottomPickSheet.tsx | ||
| ChatSidebar.tsx | ||
| DeleteConfirmDialog.tsx | ||
| LanguageSwitcher.tsx | ||
| Markdown.tsx | ||
| ModelInfoCard.tsx | ||
| ModelPickerDialog.tsx | ||
| NouiTypography.tsx | ||
| OAuthLoginModal.tsx | ||
| OAuthProvidersCard.tsx | ||
| PlatformsCard.tsx | ||
| SidebarFooter.tsx | ||
| SidebarStatusStrip.tsx | ||
| SlashPopover.tsx | ||
| ThemeSwitcher.tsx | ||
| Toast.tsx | ||
| ToolCall.tsx | ||