Skip to content

feat(web): add installable dashboard metadata - #60873

Closed
seagpt wants to merge 1 commit into
NousResearch:mainfrom
seagpt:fix/dashboard-pwa-metadata
Closed

feat(web): add installable dashboard metadata#60873
seagpt wants to merge 1 commit into
NousResearch:mainfrom
seagpt:fix/dashboard-pwa-metadata

Conversation

@seagpt

@seagpt seagpt commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

What

Adds focused installability metadata for the dashboard so the Hermes web UI can be saved/launched as a standalone browser app on desktop and mobile devices:

  • adds manifest.webmanifest
  • adds 192px and 512px PNG app icons
  • adds browser/mobile metadata in web/index.html
  • keeps manifest start_url, scope, and icon paths relative so installs work under a path-prefix reverse proxy/VPN URL
  • extends SPA prefix rewriting for root-absolute manifest/icon links in served index.html
  • adds JS and Python regression tests for metadata presence and X-Forwarded-Prefix safety

Related Issue

No issue. Follow-up from dashboard/desktop-as-webapp QA.

Related / overlap checked:

Type of Change

  • Bug fix
  • New feature
  • Refactor
  • Tests
  • Documentation

Verification

  • npm --workspace web run test -- src/lib/pwa-metadata.test.ts
  • npm --workspace web exec eslint -- src/lib/pwa-metadata.test.ts --max-warnings=0
  • npm --workspace web run typecheck
  • npm --workspace web run build
  • python -m py_compile hermes_cli/web_server.py
  • uv run --with pytest --with httpx --with starlette --with fastapi pytest -q tests/hermes_cli/test_web_server_spa_pwa_prefix.py
  • python scripts/check-windows-footguns.py $(git diff --cached --name-only) before commit
  • git diff --cached --check before commit
  • diff-only secret scan: 0 hits
  • visual check of generated 512px icon

Checklist

  • I searched existing open/closed PRs/issues for duplicates or overlap and noted related PRs above.
  • I added or updated tests for the changed behavior.
  • I verified the real build output includes manifest.webmanifest, icon-192.png, icon-512.png, and the metadata in built index.html.
  • I considered path-prefixed/VPN deployments and added a regression test for X-Forwarded-Prefix.
  • No secrets or credentials are included.
  • No user-facing env var was added.
  • Docs/config/tool-schema changes are not required for this focused metadata-only change.

@alt-glitch alt-glitch added type/feature New feature or request P3 Low — cosmetic, nice to have comp/cli CLI entry point, hermes_cli/, setup wizard comp/dashboard Web dashboard / control panel UI (dashboard/, landing) labels Jul 8, 2026
@seagpt
seagpt force-pushed the fix/dashboard-pwa-metadata branch from 82f1558 to b5b30b7 Compare July 8, 2026 12:51

@teknium1 teknium1 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the focused PWA metadata and prefix-aware coverage. Current main has no dashboard manifest or install icons, and the changes extend the existing prefix rewrite in hermes_cli/web_server.py:15695-15704 cleanly.

Problems

  • web/index.html:8 adds a root-level manifest, but the OAuth gate's public static allowlist in hermes_cli/dashboard_auth/middleware.py:43-55 does not include the manifest or either new icon. With auth_required, requests outside the allowlist enter the cookie gate at middleware.py:274-290. The new server test sets auth_required = False, so it does not cover that deployment mode. This overlaps the static-asset issue described in related PR #58532.

Suggested changes

  • Allowlist /manifest.webmanifest, /icon-192.png, and /icon-512.png, and add a gated regression test that fetches them without a session cookie.

Automated hermes-sweeper review.

Comment thread web/index.html
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
<link rel="icon" type="image/png" sizes="192x192" href="/icon-192.png" />
<link rel="apple-touch-icon" href="/icon-192.png" />
<link rel="manifest" href="/manifest.webmanifest" />

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For OAuth-gated dashboards, this root-level manifest (and the two new root-level icons) is not in _GATE_PUBLIC_PREFIXES at hermes_cli/dashboard_auth/middleware.py:43-55; unauthenticated static requests enter the cookie gate. Please allowlist these three paths and add a gated regression test.

@teknium1 teknium1 added sweeper:risk-compatibility Sweeper risk: may break existing users, config, migrations, defaults, or upgrades sweeper:blast-moderate Sweeper blast radius: moderate — a subsystem or single platform labels Jul 10, 2026
@teknium1 teknium1 added the area/install-update Installer, updater, packaging, wheels, doctor label Jul 19, 2026
@seagpt seagpt closed this Jul 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/install-update Installer, updater, packaging, wheels, doctor comp/cli CLI entry point, hermes_cli/, setup wizard comp/dashboard Web dashboard / control panel UI (dashboard/, landing) P3 Low — cosmetic, nice to have sweeper:blast-moderate Sweeper blast radius: moderate — a subsystem or single platform sweeper:risk-compatibility Sweeper risk: may break existing users, config, migrations, defaults, or upgrades type/feature New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants