mirror of
https://github.com/openclaw/openclaw.git
synced 2026-06-21 06:22:28 +08:00
* fix(control-ui): make bootstrap config endpoint base-path-relative (#66946) CONTROL_UI_BOOTSTRAP_CONFIG_PATH embedded a hard-coded /__openclaw prefix instead of being base-path-relative. When the Control UI is served under /__openclaw__/, both the gateway and the browser loader compose ${basePath}${CONTROL_UI_BOOTSTRAP_CONFIG_PATH}, producing the doubled /__openclaw__/__openclaw/control-ui-config.json URL that 404s. Make the constant base-path-relative (/control-ui-config.json) so the composed URL is correct under any base path, align the Vite dev stub and the docs, and add gateway.controlUi.basePath "/__openclaw__" coverage. * fix(control-ui): serve bootstrap config at default __openclaw__ entry (#66946) The reporter runs the default deployment (no gateway.controlUi.basePath), so the Control UI SPA is mounted under the default /__openclaw__/ namespace. A browser opening that entry infers basePath="/__openclaw__" from the URL (inferBasePathFromPathname) and fetches /__openclaw__/control-ui-config.json, but an empty-base-path gateway only served the bare /control-ui-config.json, so the default-entry bootstrap request 404'd and chat never finished loading. Make handleControlUiHttpRequest also accept the default-namespace alias /__openclaw__/control-ui-config.json when no base path is configured. The alias is derived from the existing CONTROL_UI_NAMESPACE_PREFIX mount constant and is purely additive: the bare /control-ui-config.json endpoint and the configured-base-path endpoint are both preserved (no route removed). Add gateway HTTP coverage for the real default-entry scenario (empty base path + /__openclaw__/... request) that fails without the alias, alongside the configured-base-path, bare-path compatibility, and doubled-path 404 cases. * fix(control-ui): preserve legacy bootstrap endpoint as compat alias (#66946) Current main and v2026.6.1 serve and document the single-underscore /__openclaw/control-ui-config.json bootstrap endpoint under an empty base path (that literal was CONTROL_UI_BOOTSTRAP_CONFIG_PATH before the path was made base-path-relative). Making the constant relative dropped that match, so older bundles and clients hitting the documented endpoint would 404 after upgrading. Accept the legacy single-underscore path as an empty-base-path compatibility alias in matchesControlUiBootstrapConfigPath, derived from the legacy /__openclaw namespace joined with the canonical config constant (so it tracks any filename rename) and named LEGACY_BOOTSTRAP_CONFIG_PATH with a comment. The canonical /control-ui-config.json and the default-namespace /__openclaw__/control-ui-config.json aliases are unchanged; only this path is added. The doubled /__openclaw__/__openclaw/... path still 404s. Add a focused regression that the legacy endpoint returns config under an empty base path; it 404s without the alias (verified non-vacuous). * fix(control-ui): preserve legacy bootstrap route under configured base path (#66946) The previous revision preserved the single-underscore /__openclaw/control-ui-config.json bootstrap endpoint only under an empty base path. A deployment with a configured gateway.controlUi.basePath (e.g. /x) served and documented that endpoint at ${basePath}/__openclaw/control-ui-config.json before this PR made the config path base-path-relative, so configured-base-path users, older bundles, and clients that still request it would 404 after upgrading. Extend matchesControlUiBootstrapConfigPath so the legacy single-underscore suffix is accepted under every base path, not just the empty one. The matcher now checks the canonical and legacy suffixes uniformly as ${basePath}${CONTROL_UI_BOOTSTRAP_CONFIG_PATH} and ${basePath}${LEGACY_BOOTSTRAP_CONFIG_PATH} for both the empty and configured cases, reusing the existing LEGACY_BOOTSTRAP_CONFIG_PATH constant (no new hard-coded literal). The default-namespace /__openclaw__/control-ui-config.json alias stays empty-base-path-only (it is the path the inferred default entry requests when no base path is configured). All three empty-base-path behaviors are unchanged; the doubled /__openclaw__/__openclaw/... path still 404s under both an empty and a configured base path. Add a focused regression that the configured-base-path legacy endpoint returns the bootstrap config; it 404s without the alias (verified non-vacuous). No CHANGELOG.md change. * fix(ui): mount config stub under vite base * fix(ui): preserve default config stub route --------- Co-authored-by: Vincent Koc <vincentkoc@ieee.org>