mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-05-08 03:01:47 +00:00
The Hermes dashboard previously assumed it was served at the root of its host (e.g. https://kanban.tilos.com/). When mounted behind a path-prefix reverse proxy (e.g. https://mission-control.tilos.com/hermes/), the SPA 404'd because: - index.html shipped absolute /assets/index-*.js URLs - React Router had no basename - The plugin loader hit /dashboard-plugins/<name>/... at the root host - CSS in the bundle had absolute url(/fonts/...) references This patch makes the dashboard prefix-aware at runtime, no rebuild required. The proxy injects 'X-Forwarded-Prefix: /hermes' on every request and the Python server: - Rewrites href/src in served index.html to '${prefix}/assets/...' - Injects 'window.__HERMES_BASE_PATH__="${prefix}"' for the SPA to read - Rewrites url() refs in CSS at serve time The SPA reads window.__HERMES_BASE_PATH__ once at boot and: - Prefixes all /api/... fetches via api.ts - Prefixes all /dashboard-plugins/... script/css URLs in usePlugins - Sets <BrowserRouter basename={...}> so client-side routing works When no X-Forwarded-Prefix header is present, behavior is unchanged (empty prefix => serves at root, kanban.tilos.com keeps working). Refs: MC-AUTO-13
25 lines
829 B
TypeScript
25 lines
829 B
TypeScript
import { createRoot } from "react-dom/client";
|
|
import { BrowserRouter } from "react-router-dom";
|
|
import "./index.css";
|
|
import App from "./App";
|
|
import { SystemActionsProvider } from "./contexts/SystemActions";
|
|
import { I18nProvider } from "./i18n";
|
|
import { exposePluginSDK } from "./plugins";
|
|
import { ThemeProvider } from "./themes";
|
|
import { HERMES_BASE_PATH } from "./lib/api";
|
|
|
|
// Expose the plugin SDK before rendering so plugins loaded via <script>
|
|
// can access React, components, etc. immediately.
|
|
exposePluginSDK();
|
|
|
|
createRoot(document.getElementById("root")!).render(
|
|
<BrowserRouter basename={HERMES_BASE_PATH || undefined}>
|
|
<I18nProvider>
|
|
<ThemeProvider>
|
|
<SystemActionsProvider>
|
|
<App />
|
|
</SystemActionsProvider>
|
|
</ThemeProvider>
|
|
</I18nProvider>
|
|
</BrowserRouter>,
|
|
);
|