diff --git a/ui/src/client.tsx b/ui/src/client.tsx index da232592..4bdeadd3 100644 --- a/ui/src/client.tsx +++ b/ui/src/client.tsx @@ -3,9 +3,12 @@ import { StrictMode } from "react" import { hydrateRoot } from "react-dom/client" import { registerSW } from "virtual:pwa-register" -// prompt mode: a new SW installs in the background and takes over on the next -// load, so deploys never reload a tab mid-agent-run. Skip in dev — the SW -// precaches production-only build artifacts that 404 against the dev server. +// autoUpdate: vite-plugin-pwa generates a SW that calls skipWaiting and +// clientsClaim, so a new deploy activates for existing tabs. Open dashboard +// tabs may reload when the service worker takes over; this is acceptable for +// a dev/internal dashboard where silent updates are preferred over stale +// bundles. Skip in dev — the SW precaches production-only build artifacts that +// 404 against the dev server. if (import.meta.env.PROD) { registerSW() } diff --git a/ui/vite.config.ts b/ui/vite.config.ts index 7b377067..4e2ea978 100644 --- a/ui/vite.config.ts +++ b/ui/vite.config.ts @@ -173,7 +173,7 @@ const config = defineConfig({ tanstackStart({ spa: { enabled: true } }), VitePWA({ injectRegister: false, - registerType: "prompt", + registerType: "autoUpdate", outDir: ".output/public", devOptions: { enabled: true,