From a1734da7ebb125fd00a884332440a92652b0b332 Mon Sep 17 00:00:00 2001 From: mira-2026 Date: Tue, 28 Jul 2026 07:43:43 +0200 Subject: [PATCH 1/8] perf: split and cache frontend assets --- backend/src/server.ts | 47 +++- backend/src/staticFileResponse.ts | 164 ++++++++++++ backend/test/bunNativeServerBehavior.test.ts | 14 +- backend/test/httpApiBehavior.test.ts | 72 +++++- index.html | 2 +- public/favicon.png | Bin 246704 -> 11147 bytes scripts/frontendBuild.ts | 27 ++ scripts/frontendBuildArtifacts.ts | 236 ++++++++++++++++++ src/components/features/chat/ChatMarkdown.tsx | 10 +- .../features/chat/ChatMessagesList.tsx | 18 +- .../features/files/viewers/CodePreview.tsx | 11 +- src/components/layout/Layout.tsx | 1 + src/lib/syntaxHighlighter.ts | 63 +++++ src/router.tsx | 34 +-- src/test/frontendBuildArtifacts.test.ts | 172 +++++++++++++ 15 files changed, 820 insertions(+), 51 deletions(-) create mode 100644 backend/src/staticFileResponse.ts create mode 100644 scripts/frontendBuildArtifacts.ts create mode 100644 src/lib/syntaxHighlighter.ts create mode 100644 src/test/frontendBuildArtifacts.test.ts diff --git a/backend/src/server.ts b/backend/src/server.ts index 19fee468c..6414313ff 100644 --- a/backend/src/server.ts +++ b/backend/src/server.ts @@ -25,6 +25,7 @@ import { routes } from "./routes.ts"; import { isProductionDeploymentCutoverActive } from "./services/deploymentCutoverState.ts"; import { validateTotpStorageConfig } from "./services/multiFactorAuth.ts"; import { validateWebAuthnConfig } from "./services/webAuthn.ts"; +import { staticFileResponse } from "./staticFileResponse.ts"; interface DashboardSocketData { closeHandlers: Array<() => void>; @@ -45,6 +46,9 @@ interface DashboardSocketRequest { const SERVER_IDLE_TIMEOUT_SECONDS = 240; const DEPLOYMENT_CUTOVER_SOCKET_CLOSE_CODE = 1012; const DEPLOYMENT_CUTOVER_SOCKET_CLOSE_REASON = "Dashboard release cutover in progress"; +const IMMUTABLE_ASSET_CACHE_CONTROL = "public, max-age=31536000, immutable"; +const REVALIDATED_ASSET_CACHE_CONTROL = "no-cache"; +const HASHED_ASSET_NAME = /-[\da-z]{8}\.[\da-z]+$/iu; function dashboardSocketRequest(data: string | Buffer): DashboardSocketRequest { try { @@ -265,7 +269,7 @@ export function createServer( } return withRequestSecurity( request, - await staticResponse(url.pathname), + await staticResponse(request, url.pathname), server ); }, @@ -273,13 +277,29 @@ export function createServer( }); } -async function fileResponse(filePath: string, contentType?: string): Promise { - const headers: Record = { "Cache-Control": "no-store" }; - if (contentType) headers["Content-Type"] = contentType; - return new Response(Bun.file(filePath), { headers }); +function cacheControlForStaticFile(frontendRoot: string, filePath: string): string { + const relativePath = path.relative(frontendRoot, filePath); + const isHashedAsset = + relativePath.startsWith(`assets${path.sep}`) && + HASHED_ASSET_NAME.test(path.basename(relativePath)); + return isHashedAsset + ? IMMUTABLE_ASSET_CACHE_CONTROL + : REVALIDATED_ASSET_CACHE_CONTROL; } -async function staticResponse(pathname: string): Promise { +async function fileResponse( + request: Request, + frontendRoot: string, + filePath: string, + contentType?: string +): Promise { + return staticFileResponse(request, filePath, { + cacheControl: cacheControlForStaticFile(frontendRoot, filePath), + contentType, + }); +} + +async function staticResponse(request: Request, pathname: string): Promise { let decodedPath: string; try { decodedPath = decodeURIComponent(pathname.replace(/^\/+/u, "")).replace( @@ -296,6 +316,9 @@ async function staticResponse(pathname: string): Promise { if (decodedPathname === "/health") { return new Response("Not found", { status: 404 }); } + if (/\.(?:br|gz)$/iu.test(decodedPathname)) { + return new Response("Not found", { status: 404 }); + } const frontendPath = resolveFrontendPath(); const indexPath = path.join(frontendPath, "index.html"); @@ -335,7 +358,9 @@ async function staticResponse(pathname: string): Promise { !hasHiddenStaticSegment(relativeRealPath) ) { const stat = await fsp.stat(realDirectPath); - if (stat.isFile()) return fileResponse(realDirectPath); + if (stat.isFile()) { + return fileResponse(request, realRoot, realDirectPath); + } } } catch { // Continue with hashed asset lookup or SPA routing below. @@ -357,7 +382,9 @@ async function staticResponse(pathname: string): Promise { return new Response("Not found", { status: 404 }); } const stat = await fsp.stat(realAssetPath); - if (stat.isFile()) return fileResponse(realAssetPath); + if (stat.isFile()) { + return fileResponse(request, realRoot, realAssetPath); + } } catch { return new Response("Not found", { status: 404 }); } @@ -377,7 +404,9 @@ async function staticResponse(pathname: string): Promise { return new Response("Not found", { status: 404 }); } const stat = await fsp.stat(realIndexPath); - if (stat.isFile()) return fileResponse(realIndexPath, "text/html"); + if (stat.isFile()) { + return fileResponse(request, realRoot, realIndexPath, "text/html"); + } } catch { // Fall through to a generic not-found response. } diff --git a/backend/src/staticFileResponse.ts b/backend/src/staticFileResponse.ts new file mode 100644 index 000000000..d21517357 --- /dev/null +++ b/backend/src/staticFileResponse.ts @@ -0,0 +1,164 @@ +import type { Stats } from "node:fs"; +import fs from "node:fs/promises"; + +interface StaticFileResponseOptions { + cacheControl: string; + contentType?: string; +} + +type ContentEncoding = "br" | "gzip"; + +interface StaticRepresentation { + contentEncoding?: ContentEncoding; + filePath: string; + stat: Stats; +} + +const COMPRESSION_SIDECARS: ReadonlyArray<{ + contentEncoding: ContentEncoding; + extension: ".br" | ".gz"; +}> = [ + { contentEncoding: "br", extension: ".br" }, + { contentEncoding: "gzip", extension: ".gz" }, +]; + +function encodingQuality(headerValue: string | null, encoding: string): number { + if (!headerValue) return 0; + + let explicitQuality: number | undefined; + let wildcardQuality: number | undefined; + for (const item of headerValue.split(",")) { + const [rawEncoding = "", ...parameters] = item.split(";"); + const normalizedEncoding = rawEncoding.trim().toLowerCase(); + let quality = 1; + for (const parameter of parameters) { + const normalizedParameter = parameter.trim().toLowerCase(); + if (normalizedParameter.startsWith("q")) { + const match = normalizedParameter.match( + /^q\s*=\s*(0(?:\.\d{0,3})?|1(?:\.0{0,3})?)$/u + ); + quality = match ? Number(match[1]) : 0; + } + } + if (normalizedEncoding === encoding) explicitQuality = quality; + if (normalizedEncoding === "*") wildcardQuality = quality; + } + + return explicitQuality ?? wildcardQuality ?? 0; +} + +async function compressedRepresentations( + filePath: string +): Promise { + const representations: StaticRepresentation[] = []; + for (const { contentEncoding, extension } of COMPRESSION_SIDECARS) { + const sidecarPath = `${filePath}${extension}`; + try { + const stat = await fs.lstat(sidecarPath); + if (stat.isFile()) { + representations.push({ + contentEncoding, + filePath: sidecarPath, + stat, + }); + } + } catch { + // This representation was not generated for the source file. + } + } + return representations; +} + +function preferredRepresentation( + request: Request, + source: StaticRepresentation, + compressed: StaticRepresentation[] +): StaticRepresentation { + return ( + compressed + .map((representation, priority) => ({ + priority, + quality: encodingQuality( + request.headers.get("accept-encoding"), + representation.contentEncoding ?? "" + ), + representation, + })) + .filter(({ quality }) => quality > 0) + .toSorted( + (left, right) => + right.quality - left.quality || left.priority - right.priority + )[0]?.representation ?? source + ); +} + +function entityTagFor(representation: StaticRepresentation): string { + const encodingSuffix = representation.contentEncoding + ? `-${representation.contentEncoding}` + : ""; + return `W/"${representation.stat.size.toString(16)}-${Math.trunc( + representation.stat.mtimeMs + ).toString(16)}${encodingSuffix}"`; +} + +function normalizedEntityTag(entityTag: string): string { + return entityTag.trim().replace(/^W\//iu, ""); +} + +function isEntityTagMatch(headerValue: string, entityTag: string): boolean { + const normalizedCurrent = normalizedEntityTag(entityTag); + return headerValue.split(",").some((candidate) => { + const trimmed = candidate.trim(); + return trimmed === "*" || normalizedEntityTag(trimmed) === normalizedCurrent; + }); +} + +function isNotModified(request: Request, entityTag: string, modifiedAt: Date): boolean { + if (!["GET", "HEAD"].includes(request.method.toUpperCase())) return false; + + const ifNoneMatch = request.headers.get("if-none-match"); + if (ifNoneMatch !== null) { + return isEntityTagMatch(ifNoneMatch, entityTag); + } + + const ifModifiedSince = request.headers.get("if-modified-since"); + if (!ifModifiedSince) return false; + const conditionalTimestamp = Date.parse(ifModifiedSince); + return ( + Number.isFinite(conditionalTimestamp) && + Math.floor(modifiedAt.getTime() / 1000) <= Math.floor(conditionalTimestamp / 1000) + ); +} + +/** + * Serves a verified static file with conditional requests and negotiated + * precompressed representations. + */ +export async function staticFileResponse( + request: Request, + filePath: string, + { cacheControl, contentType }: StaticFileResponseOptions +): Promise { + const sourceStat = await fs.stat(filePath); + const source: StaticRepresentation = { filePath, stat: sourceStat }; + const compressed = await compressedRepresentations(filePath); + const representation = preferredRepresentation(request, source, compressed); + const entityTag = entityTagFor(representation); + const headers = new Headers({ + "Cache-Control": cacheControl, + ETag: entityTag, + "Last-Modified": sourceStat.mtime.toUTCString(), + }); + + const resolvedContentType = contentType ?? Bun.file(filePath).type; + if (resolvedContentType) headers.set("Content-Type", resolvedContentType); + if (compressed.length > 0) headers.set("Vary", "Accept-Encoding"); + if (representation.contentEncoding) { + headers.set("Content-Encoding", representation.contentEncoding); + } + + if (isNotModified(request, entityTag, sourceStat.mtime)) { + return new Response(undefined, { headers, status: 304 }); + } + return new Response(Bun.file(representation.filePath), { headers }); +} diff --git a/backend/test/bunNativeServerBehavior.test.ts b/backend/test/bunNativeServerBehavior.test.ts index 079ab5382..4d7f75b34 100644 --- a/backend/test/bunNativeServerBehavior.test.ts +++ b/backend/test/bunNativeServerBehavior.test.ts @@ -520,6 +520,9 @@ describe("Bun-native dashboard backend", () => { const appRoute = await fetch(`${state.baseUrl}/tasks`); expect(appRoute.status).toBe(200); expect(appRoute.headers.get("content-type")).toContain("text/html"); + expect(appRoute.headers.get("cache-control")).toBe("no-cache"); + expect(appRoute.headers.get("etag")).toBeTruthy(); + expect(appRoute.headers.get("last-modified")).toBeTruthy(); expect(appRoute.headers.get("content-security-policy")).toContain( `connect-src 'self' ${state.baseUrl.replace(/^http/u, "ws")}` ); @@ -530,11 +533,20 @@ describe("Bun-native dashboard backend", () => { const rootChunk = await fetch(`${state.baseUrl}/index-fixture.js`); expect(rootChunk.status).toBe(200); - expect(rootChunk.headers.get("cache-control")).toBe("no-store"); + expect(rootChunk.headers.get("cache-control")).toBe("no-cache"); + expect(rootChunk.headers.get("etag")).toBeTruthy(); + expect(rootChunk.headers.get("last-modified")).toBeTruthy(); expect(rootChunk.headers.get("x-request-id")).not.toBe( appRoute.headers.get("x-request-id") ); + const cachedRootChunk = await fetch(`${state.baseUrl}/index-fixture.js`, { + headers: { + "If-None-Match": rootChunk.headers.get("etag") ?? "", + }, + }); + expect(cachedRootChunk.status).toBe(304); + const missingChunk = await fetch( `${state.baseUrl}/assets/index-missing-after-deploy.js` ); diff --git a/backend/test/httpApiBehavior.test.ts b/backend/test/httpApiBehavior.test.ts index 0b6d72083..3ece11697 100644 --- a/backend/test/httpApiBehavior.test.ts +++ b/backend/test/httpApiBehavior.test.ts @@ -1,6 +1,7 @@ import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; +import { brotliCompressSync, gzipSync } from "node:zlib"; import type { Server } from "bun"; import { afterAll, beforeAll, describe, expect, it } from "bun:test"; @@ -266,14 +267,17 @@ describe("Mira Dashboard backend integration", () => { ); await fs.writeFile(composeWrapper, "#!/bin/sh\nprintf 'compose:%s\\n' \"$*\"\n"); await fs.chmod(composeWrapper, 0o755); - await fs.writeFile( - path.join(frontendRoot, "index.html"), - '
' - ); - await fs.writeFile( - path.join(frontendRoot, "assets", "index-fixture.js"), - "export const isOk = true;\n" - ); + const frontendIndexPath = path.join(frontendRoot, "index.html"); + const frontendIndex = + '
'; + await fs.writeFile(frontendIndexPath, frontendIndex); + await fs.writeFile(`${frontendIndexPath}.br`, brotliCompressSync(frontendIndex)); + await fs.writeFile(`${frontendIndexPath}.gz`, gzipSync(frontendIndex)); + const frontendChunkPath = path.join(frontendRoot, "assets", "index-a1b2c3d4.js"); + const frontendChunk = "export const isOk = true;\n".repeat(32); + await fs.writeFile(frontendChunkPath, frontendChunk); + await fs.writeFile(`${frontendChunkPath}.br`, brotliCompressSync(frontendChunk)); + await fs.writeFile(`${frontendChunkPath}.gz`, gzipSync(frontendChunk)); process.env.MIRA_DASHBOARD_DB_PATH = path.join( testState.temporaryRoot, @@ -423,18 +427,62 @@ describe("Mira Dashboard backend integration", () => { }); it("serves the app shell only for app routes, not missing assets", async () => { - const appRoute = await fetch(`${testState.baseUrl}/tasks`); + const appRoute = await fetch(`${testState.baseUrl}/tasks`, { + headers: { "Accept-Encoding": "br, gzip" }, + }); expect(appRoute.status).toBe(200); expect(appRoute.headers.get("content-type")).toContain("text/html"); + expect(appRoute.headers.get("cache-control")).toBe("no-cache"); + expect(appRoute.headers.get("content-encoding")).toBe("br"); + expect(appRoute.headers.get("vary")).toContain("Accept-Encoding"); + expect(appRoute.headers.get("etag")).toBeTruthy(); + expect(appRoute.headers.get("last-modified")).toBeTruthy(); + expect(await appRoute.text()).toContain('
'); + const revalidatedAppRoute = await fetch(`${testState.baseUrl}/tasks`, { + headers: { + "Accept-Encoding": "br, gzip", + "If-Modified-Since": appRoute.headers.get("last-modified") ?? "", + }, + }); + expect(revalidatedAppRoute.status).toBe(304); const assetsPath = path.join(testState.temporaryRoot, "frontend", "assets"); const builtAssets = await fs.readdir(assetsPath); - const builtChunk = builtAssets.find((file) => /^index-.+\.js$/u.test(file)); + const builtChunk = builtAssets.find((file) => + /^index-[\da-z]{8}\.js$/u.test(file) + ); expect(builtChunk).toBeDefined(); - const rootChunk = await fetch(`${testState.baseUrl}/assets/${builtChunk}`); + const chunkUrl = `${testState.baseUrl}/assets/${builtChunk}`; + const rootChunk = await fetch(chunkUrl, { + headers: { "Accept-Encoding": "br, gzip" }, + }); expect(rootChunk.status).toBe(200); - expect(rootChunk.headers.get("cache-control")).toBe("no-store"); + expect(rootChunk.headers.get("cache-control")).toBe( + "public, max-age=31536000, immutable" + ); + expect(rootChunk.headers.get("content-encoding")).toBe("br"); + expect(rootChunk.headers.get("vary")).toContain("Accept-Encoding"); + expect(rootChunk.headers.get("etag")).toBeTruthy(); + expect(rootChunk.headers.get("last-modified")).toBeTruthy(); + expect(await rootChunk.text()).toContain("export const isOk = true"); + + const cachedChunk = await fetch(chunkUrl, { + headers: { + "Accept-Encoding": "br, gzip", + "If-None-Match": rootChunk.headers.get("etag") ?? "", + }, + }); + expect(cachedChunk.status).toBe(304); + + const gzipChunk = await fetch(chunkUrl, { + headers: { "Accept-Encoding": "br;q=0, gzip;q=1" }, + }); + expect(gzipChunk.headers.get("content-encoding")).toBe("gzip"); + expect(await gzipChunk.text()).toContain("export const isOk = true"); + + const directSidecar = await fetch(`${chunkUrl}.br`); + expect(directSidecar.status).toBe(404); const missingChunk = await fetch( `${testState.baseUrl}/assets/index-missing-after-deploy.js` diff --git a/index.html b/index.html index e157c7c04..a06002b5f 100644 --- a/index.html +++ b/index.html @@ -2,7 +2,7 @@ - + diff --git a/public/favicon.png b/public/favicon.png index ef92187b8b8139eacacfdbe833935aee64aa4dab..18b0eaf82085fcf3898a924c2313c3b509b93c5a 100644 GIT binary patch literal 11147 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 Vbz6M-)&E9n6=YPUt0mus{vSR>ychrg literal 246704 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%0Dk-c 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 diff --git a/scripts/frontendBuild.ts b/scripts/frontendBuild.ts index 5fa247ab5..64b7436f4 100644 --- a/scripts/frontendBuild.ts +++ b/scripts/frontendBuild.ts @@ -7,6 +7,11 @@ import { isReleaseBuildCommit, resolveBuildSourceIdentity, } from "../backend/scripts/buildSourceIdentity.ts"; +import { + assertFrontendBundleBudgets, + measureFrontendBundle, + writePrecompressedFrontendAssets, +} from "./frontendBuildArtifacts"; import reactCompilerPlugin from "./reactCompilerPlugin"; type FrontendBuildMode = "development" | "production"; @@ -55,6 +60,7 @@ export async function buildFrontend({ entrypoints: ["./index.html"], env: "PUBLIC_*", minify: isProduction, + metafile: true, naming: { asset: "assets/[name]-[hash].[ext]", chunk: "assets/[name]-[hash].[ext]", @@ -74,6 +80,9 @@ export async function buildFrontend({ if (!result.success) { throw new AggregateError(result.logs, "Frontend build failed"); } + if (!result.metafile) { + throw new Error("Frontend build did not produce bundle metadata"); + } await writeFile( path.join(resolvedOutdir, "build-identity.json"), @@ -88,4 +97,22 @@ export async function buildFrontend({ 2 )}\n` ); + + if (isProduction) { + const bundleMetrics = await measureFrontendBundle( + result.metafile, + resolvedOutdir + ); + await writeFile( + path.join(resolvedOutdir, "frontend-bundle-metrics.json"), + `${JSON.stringify(bundleMetrics, undefined, 2)}\n` + ); + assertFrontendBundleBudgets(bundleMetrics.measurements); + const compressedFileCount = await writePrecompressedFrontendAssets( + result.outputs.map(({ path: outputPath }) => outputPath) + ); + console.log( + `Frontend bundle: ${bundleMetrics.measurements.initialJavaScriptGzipBytes} bytes initial JS gzip, ${bundleMetrics.measurements.totalJavaScriptGzipBytes} bytes total JS gzip, ${compressedFileCount} compressed sidecars` + ); + } } diff --git a/scripts/frontendBuildArtifacts.ts b/scripts/frontendBuildArtifacts.ts new file mode 100644 index 000000000..325318cd0 --- /dev/null +++ b/scripts/frontendBuildArtifacts.ts @@ -0,0 +1,236 @@ +import { readFile, writeFile } from "node:fs/promises"; +import path from "node:path"; +import { brotliCompressSync, constants, gzipSync } from "node:zlib"; + +const COMPRESSIBLE_EXTENSIONS = new Set([ + ".css", + ".html", + ".js", + ".json", + ".svg", + ".txt", + ".webmanifest", + ".xml", +]); +const MINIMUM_COMPRESSION_BYTES = 512; + +export interface FrontendBundleMeasurements { + initialJavaScriptGzipBytes: number; + initialJavaScriptRawBytes: number; + initialStylesheetGzipBytes: number; + initialStylesheetRawBytes: number; + largestJavaScriptGzipBytes: number; + totalJavaScriptGzipBytes: number; + totalJavaScriptRawBytes: number; +} + +type FrontendBundleBudget = keyof Pick< + FrontendBundleMeasurements, + | "initialJavaScriptGzipBytes" + | "initialStylesheetGzipBytes" + | "largestJavaScriptGzipBytes" + | "totalJavaScriptGzipBytes" +>; + +export const FRONTEND_BUNDLE_BUDGETS: Readonly> = { + initialJavaScriptGzipBytes: 350 * 1024, + initialStylesheetGzipBytes: 25 * 1024, + largestJavaScriptGzipBytes: 75 * 1024, + totalJavaScriptGzipBytes: 850 * 1024, +}; + +interface MeasuredOutput { + gzipBytes: number; + outputPath: string; + rawBytes: number; +} + +export interface FrontendBundleMetrics { + budgets: Readonly>; + formatVersion: 1; + initialFiles: MeasuredOutput[]; + measurements: FrontendBundleMeasurements; +} + +function normalizedOutputKey(outputKey: string): string { + return outputKey.replaceAll("\\", "/").replace(/^\.\//u, ""); +} + +function outputFilePath(outdir: string, outputKey: string): string { + const resolvedOutdir = path.resolve(outdir); + const resolvedPath = path.resolve(resolvedOutdir, normalizedOutputKey(outputKey)); + if ( + resolvedPath !== resolvedOutdir && + !resolvedPath.startsWith(`${resolvedOutdir}${path.sep}`) + ) { + throw new Error(`Frontend build output escaped its directory: ${outputKey}`); + } + return resolvedPath; +} + +function isIndexEntryPoint(entryPoint?: string): boolean { + if (!entryPoint) return false; + const normalized = entryPoint.replaceAll("\\", "/").replace(/^\.\//u, ""); + return normalized === "index.html" || normalized.endsWith("/index.html"); +} + +/** + * Resolves the static startup graph while excluding route and feature + * `dynamic-import` edges. + */ +export function initialFrontendOutputKeys(metafile: Bun.BuildMetafile): Set { + const outputs = metafile.outputs; + const keyByNormalizedPath = new Map( + Object.keys(outputs).map((outputKey) => [ + normalizedOutputKey(outputKey), + outputKey, + ]) + ); + const resolveOutputKey = (candidate: string): string | undefined => + Object.hasOwn(outputs, candidate) + ? candidate + : keyByNormalizedPath.get(normalizedOutputKey(candidate)); + const pending = Object.entries(outputs) + .filter(([, output]) => isIndexEntryPoint(output.entryPoint)) + .map(([outputKey]) => outputKey); + const initialOutputKeys = new Set(); + + while (pending.length > 0) { + const outputKey = pending.pop(); + if (!outputKey || initialOutputKeys.has(outputKey)) continue; + const output = outputs[outputKey]; + if (!output) continue; + initialOutputKeys.add(outputKey); + + if (output.cssBundle) { + const cssOutputKey = resolveOutputKey(output.cssBundle); + if (cssOutputKey) pending.push(cssOutputKey); + } + const staticImports = output.imports.filter( + ({ kind }) => kind !== "dynamic-import" + ); + for (const imported of staticImports) { + const importedOutputKey = resolveOutputKey(imported.path); + if (importedOutputKey) pending.push(importedOutputKey); + } + } + + return initialOutputKeys; +} + +function sumOutputs( + outputs: Iterable, + field: "gzipBytes" | "rawBytes" +): number { + let total = 0; + for (const output of outputs) total += output[field]; + return total; +} + +/** Measures the complete and initial production JavaScript/CSS graphs. */ +export async function measureFrontendBundle( + metafile: Bun.BuildMetafile, + outdir: string +): Promise { + const measuredOutputs = new Map(); + for (const outputKey of Object.keys(metafile.outputs)) { + const extension = path.extname(outputKey); + if (extension !== ".css" && extension !== ".js") continue; + const contents = await readFile(outputFilePath(outdir, outputKey)); + measuredOutputs.set(outputKey, { + gzipBytes: gzipSync(contents, { level: 9 }).byteLength, + outputPath: normalizedOutputKey(outputKey), + rawBytes: contents.byteLength, + }); + } + + const initialOutputKeys = initialFrontendOutputKeys(metafile); + const initialFiles = [...initialOutputKeys] + .map((outputKey) => measuredOutputs.get(outputKey)) + .filter((output): output is MeasuredOutput => output !== undefined) + .toSorted((left, right) => left.outputPath.localeCompare(right.outputPath)); + const initialJavaScript = initialFiles.filter(({ outputPath }) => + outputPath.endsWith(".js") + ); + const initialStylesheets = initialFiles.filter(({ outputPath }) => + outputPath.endsWith(".css") + ); + const allJavaScript: MeasuredOutput[] = []; + for (const output of measuredOutputs.values()) { + if (output.outputPath.endsWith(".js")) allJavaScript.push(output); + } + if (initialJavaScript.length === 0) { + throw new Error( + "Frontend bundle metadata did not contain an initial JavaScript graph" + ); + } + + return { + budgets: FRONTEND_BUNDLE_BUDGETS, + formatVersion: 1, + initialFiles, + measurements: { + initialJavaScriptGzipBytes: sumOutputs(initialJavaScript, "gzipBytes"), + initialJavaScriptRawBytes: sumOutputs(initialJavaScript, "rawBytes"), + initialStylesheetGzipBytes: sumOutputs(initialStylesheets, "gzipBytes"), + initialStylesheetRawBytes: sumOutputs(initialStylesheets, "rawBytes"), + largestJavaScriptGzipBytes: Math.max( + 0, + ...allJavaScript.map(({ gzipBytes }) => gzipBytes) + ), + totalJavaScriptGzipBytes: sumOutputs(allJavaScript, "gzipBytes"), + totalJavaScriptRawBytes: sumOutputs(allJavaScript, "rawBytes"), + }, + }; +} + +/** Fails production builds that exceed the checked-in network-size budgets. */ +export function assertFrontendBundleBudgets( + measurements: FrontendBundleMeasurements +): void { + const exceeded = Object.entries(FRONTEND_BUNDLE_BUDGETS).filter( + ([budget, limit]) => measurements[budget as FrontendBundleBudget] > limit + ); + if (exceeded.length === 0) return; + + throw new Error( + [ + "Frontend bundle budget exceeded:", + ...exceeded.map(([budget, limit]) => { + const actual = measurements[budget as FrontendBundleBudget]; + return `- ${budget}: ${actual} bytes (limit ${limit})`; + }), + ].join("\n") + ); +} + +/** Writes deterministic Brotli and gzip sidecars for compressible build outputs. */ +export async function writePrecompressedFrontendAssets( + outputPaths: Iterable +): Promise { + let compressedFileCount = 0; + + for (const outputPath of outputPaths) { + if (!COMPRESSIBLE_EXTENSIONS.has(path.extname(outputPath))) continue; + const contents = await readFile(outputPath); + if (contents.byteLength < MINIMUM_COMPRESSION_BYTES) continue; + + const brotliContents = brotliCompressSync(contents, { + params: { + [constants.BROTLI_PARAM_QUALITY]: 11, + }, + }); + if (brotliContents.byteLength < contents.byteLength) { + await writeFile(`${outputPath}.br`, brotliContents); + compressedFileCount += 1; + } + + const gzipContents = gzipSync(contents, { level: 9 }); + if (gzipContents.byteLength < contents.byteLength) { + await writeFile(`${outputPath}.gz`, gzipContents); + compressedFileCount += 1; + } + } + + return compressedFileCount; +} diff --git a/src/components/features/chat/ChatMarkdown.tsx b/src/components/features/chat/ChatMarkdown.tsx index c1c33fd81..2c918a818 100644 --- a/src/components/features/chat/ChatMarkdown.tsx +++ b/src/components/features/chat/ChatMarkdown.tsx @@ -2,10 +2,10 @@ import ReactJsonView from "@microlink/react-json-view"; import JSON5 from "json5"; import { Children, isValidElement, type ReactNode } from "react"; import ReactMarkdown, { type Components } from "react-markdown"; -import SyntaxHighlighter from "react-syntax-highlighter"; -import { monokai } from "react-syntax-highlighter/dist/esm/styles/hljs"; +import { monokaiSublime } from "react-syntax-highlighter/dist/esm/styles/hljs"; import remarkGfm from "remark-gfm"; +import { CodeSyntaxHighlighter } from "../../../lib/syntaxHighlighter"; import { cn } from "../../../utils/cn"; const JSON_LANGUAGES = new Set(["json", "json5", "jsonc"]); @@ -131,9 +131,9 @@ function ChatCodeBlock({ code, language }: { code: string; language: string }) {

- {code} - + ); } diff --git a/src/components/features/chat/ChatMessagesList.tsx b/src/components/features/chat/ChatMessagesList.tsx index ea178cdd1..827a8be3e 100644 --- a/src/components/features/chat/ChatMessagesList.tsx +++ b/src/components/features/chat/ChatMessagesList.tsx @@ -11,8 +11,10 @@ import { } from "lucide-react"; import { type KeyboardEvent, + lazy, type PointerEvent, type RefObject, + Suspense, useEffect, useRef, useState, @@ -20,7 +22,6 @@ import { import { formatDate, formatSize } from "../../../utils/format"; import { EmptyState } from "../../ui/EmptyState"; -import { ChatMarkdown } from "./ChatMarkdown"; import { ChatMessageDetails } from "./ChatMessageDetails"; import type { ChatAttachmentDisplay, @@ -36,6 +37,11 @@ import { } from "./chatTypes"; import { chatErrorMessage } from "./chatUtilities"; +const ChatMarkdown = lazy(async () => { + const module = await import("./ChatMarkdown"); + return { default: module.ChatMarkdown }; +}); + const SCROLL_KEYS = new Set([ " ", "ArrowDown", @@ -685,7 +691,15 @@ export function ChatMessagesList({ ) : undefined} {shouldRenderPrimaryText ? ( - + + {row.message.text} + + } + > + + ) : undefined} - {content} - + ); } diff --git a/src/components/layout/Layout.tsx b/src/components/layout/Layout.tsx index 4a8d12320..be86322d5 100644 --- a/src/components/layout/Layout.tsx +++ b/src/components/layout/Layout.tsx @@ -110,6 +110,7 @@ export function Layout({ children }: LayoutProperties) { import("./pages/Agents"), "Agents"); +const Chat = lazyRouteComponent(() => import("./pages/Chat"), "Chat"); +const Dashboard = lazyRouteComponent(() => import("./pages/Dashboard"), "Dashboard"); +const Database = lazyRouteComponent(() => import("./pages/Database"), "Database"); +const Delivery = lazyRouteComponent(() => import("./pages/Delivery"), "Delivery"); +const Docker = lazyRouteComponent(() => import("./pages/Docker"), "Docker"); +const Files = lazyRouteComponent(() => import("./pages/Files"), "Files"); +const Jobs = lazyRouteComponent(() => import("./pages/Jobs"), "Jobs"); +const Login = lazyRouteComponent(() => import("./pages/Login"), "Login"); +const Logs = lazyRouteComponent(() => import("./pages/Logs"), "Logs"); +const Moltbook = lazyRouteComponent(() => import("./pages/Moltbook"), "Moltbook"); +const Reports = lazyRouteComponent(() => import("./pages/Reports"), "Reports"); +const Sessions = lazyRouteComponent(() => import("./pages/Sessions"), "Sessions"); +const Settings = lazyRouteComponent(() => import("./pages/Settings"), "Settings"); +const Tasks = lazyRouteComponent(() => import("./pages/Tasks"), "Tasks"); +const Terminal = lazyRouteComponent(() => import("./pages/Terminal"), "Terminal"); + const rootRoute = createRootRoute({ component: () => , }); diff --git a/src/test/frontendBuildArtifacts.test.ts b/src/test/frontendBuildArtifacts.test.ts new file mode 100644 index 000000000..95ec77fdf --- /dev/null +++ b/src/test/frontendBuildArtifacts.test.ts @@ -0,0 +1,172 @@ +import fs from "node:fs/promises"; +import os from "node:os"; +import path from "node:path"; +import { brotliDecompressSync, gunzipSync } from "node:zlib"; + +import { afterEach, describe, expect, it } from "bun:test"; + +import { + assertFrontendBundleBudgets, + FRONTEND_BUNDLE_BUDGETS, + initialFrontendOutputKeys, + measureFrontendBundle, + writePrecompressedFrontendAssets, +} from "../../scripts/frontendBuildArtifacts"; + +const temporaryRoots = new Set(); + +async function temporaryOutputRoot(): Promise { + const temporaryRoot = await fs.mkdtemp( + path.join(os.tmpdir(), "mira-frontend-build-test-") + ); + temporaryRoots.add(temporaryRoot); + await fs.mkdir(path.join(temporaryRoot, "assets"), { recursive: true }); + return temporaryRoot; +} + +afterEach(async () => { + for (const temporaryRoot of temporaryRoots) { + await fs.rm(temporaryRoot, { force: true, recursive: true }); + } + temporaryRoots.clear(); +}); + +describe("frontend build artifacts", () => { + it("measures only static imports in the initial bundle graph", async () => { + const outdir = await temporaryOutputRoot(); + const entryContents = "export const entry = true;\n"; + const sharedContents = "export const shared = true;\n"; + const lazyContents = "export const lazy = true;\n"; + const stylesheetContents = "body { color: white; }\n"; + await Promise.all([ + fs.writeFile(path.join(outdir, "assets", "entry.js"), entryContents), + fs.writeFile(path.join(outdir, "assets", "shared.js"), sharedContents), + fs.writeFile(path.join(outdir, "assets", "lazy.js"), lazyContents), + fs.writeFile(path.join(outdir, "assets", "styles.css"), stylesheetContents), + ]); + const metafile = { + inputs: {}, + outputs: { + "./assets/entry.js": { + bytes: entryContents.length, + cssBundle: "./assets/styles.css", + entryPoint: "index.html", + exports: [], + imports: [ + { + kind: "import-statement", + path: "./assets/shared.js", + }, + { + kind: "dynamic-import", + path: "./assets/lazy.js", + }, + ], + inputs: {}, + }, + "./assets/lazy.js": { + bytes: lazyContents.length, + exports: [], + imports: [], + inputs: {}, + }, + "./assets/shared.js": { + bytes: sharedContents.length, + exports: [], + imports: [], + inputs: {}, + }, + "./assets/styles.css": { + bytes: stylesheetContents.length, + exports: [], + imports: [], + inputs: {}, + }, + "./index.html": { + bytes: 0, + entryPoint: "index.html", + exports: [], + imports: [], + inputs: {}, + }, + }, + } satisfies Bun.BuildMetafile; + + expect(initialFrontendOutputKeys(metafile)).toEqual( + new Set([ + "./assets/entry.js", + "./assets/shared.js", + "./assets/styles.css", + "./index.html", + ]) + ); + + const metrics = await measureFrontendBundle(metafile, outdir); + expect(metrics.initialFiles.map(({ outputPath }) => outputPath)).toEqual([ + "assets/entry.js", + "assets/shared.js", + "assets/styles.css", + ]); + expect(metrics.measurements.initialJavaScriptRawBytes).toBe( + Buffer.byteLength(entryContents) + Buffer.byteLength(sharedContents) + ); + expect(metrics.measurements.initialStylesheetRawBytes).toBe( + Buffer.byteLength(stylesheetContents) + ); + expect(metrics.measurements.totalJavaScriptRawBytes).toBe( + Buffer.byteLength(entryContents) + + Buffer.byteLength(sharedContents) + + Buffer.byteLength(lazyContents) + ); + }); + + it("writes valid Brotli and gzip sidecars for compressible outputs", async () => { + const outdir = await temporaryOutputRoot(); + const outputPath = path.join(outdir, "assets", "entry.js"); + const contents = "export const repeated = true;\n".repeat(64); + await fs.writeFile(outputPath, contents); + + expect(await writePrecompressedFrontendAssets([outputPath])).toBe(2); + expect( + brotliDecompressSync(await fs.readFile(`${outputPath}.br`)).toString() + ).toBe(contents); + expect(gunzipSync(await fs.readFile(`${outputPath}.gz`)).toString()).toBe( + contents + ); + }); + + it("fails closed when build metadata has no initial JavaScript graph", async () => { + const outdir = await temporaryOutputRoot(); + const metafile = { + inputs: {}, + outputs: { + "./index.html": { + bytes: 0, + entryPoint: "index.html", + exports: [], + imports: [], + inputs: {}, + }, + }, + } satisfies Bun.BuildMetafile; + + await expect(measureFrontendBundle(metafile, outdir)).rejects.toThrow( + "initial JavaScript graph" + ); + }); + + it("reports the specific production budget that was exceeded", () => { + expect(() => + assertFrontendBundleBudgets({ + initialJavaScriptGzipBytes: + FRONTEND_BUNDLE_BUDGETS.initialJavaScriptGzipBytes + 1, + initialJavaScriptRawBytes: 0, + initialStylesheetGzipBytes: 0, + initialStylesheetRawBytes: 0, + largestJavaScriptGzipBytes: 0, + totalJavaScriptGzipBytes: 0, + totalJavaScriptRawBytes: 0, + }) + ).toThrow("initialJavaScriptGzipBytes"); + }); +}); From 4add2941c8b3484da9309f392b3bcea1efc6b223 Mon Sep 17 00:00:00 2001 From: mira-2026 Date: Tue, 28 Jul 2026 08:31:51 +0200 Subject: [PATCH 2/8] fix: recover lazy frontend content --- .../features/chat/ChatMessagesList.tsx | 20 ++- src/lib/lazyImportRecovery.ts | 105 +++++++++++ src/router.tsx | 81 +++++++-- src/test/componentBehavior.test.tsx | 1 + src/test/lazyImportRecovery.test.ts | 170 ++++++++++++++++++ 5 files changed, 359 insertions(+), 18 deletions(-) create mode 100644 src/lib/lazyImportRecovery.ts create mode 100644 src/test/lazyImportRecovery.test.ts diff --git a/src/components/features/chat/ChatMessagesList.tsx b/src/components/features/chat/ChatMessagesList.tsx index 827a8be3e..8a3e83415 100644 --- a/src/components/features/chat/ChatMessagesList.tsx +++ b/src/components/features/chat/ChatMessagesList.tsx @@ -16,10 +16,12 @@ import { type RefObject, Suspense, useEffect, + useLayoutEffect, useRef, useState, } from "react"; +import { loadLazyModule } from "../../../lib/lazyImportRecovery"; import { formatDate, formatSize } from "../../../utils/format"; import { EmptyState } from "../../ui/EmptyState"; import { ChatMessageDetails } from "./ChatMessageDetails"; @@ -38,10 +40,21 @@ import { import { chatErrorMessage } from "./chatUtilities"; const ChatMarkdown = lazy(async () => { - const module = await import("./ChatMarkdown"); + const module = await loadLazyModule("chat-markdown", () => import("./ChatMarkdown")); return { default: module.ChatMarkdown }; }); +function SettledChatMarkdown({ onLoad, text }: { onLoad: () => void; text: string }) { + const onLoadReference = useRef(onLoad); + onLoadReference.current = onLoad; + + useLayoutEffect(() => { + onLoadReference.current(); + }, []); + + return ; +} + const SCROLL_KEYS = new Set([ " ", "ArrowDown", @@ -698,7 +711,10 @@ export function ChatMessagesList({ } > - + ) : undefined} number; + reload?: () => void; + storage?: RecoveryStorage; +} + +const reloadAttempts = new Map(); + +function browserSessionStorage(): RecoveryStorage | undefined { + try { + return sessionStorage; + } catch { + return undefined; + } +} + +function storedReloadAt( + storage: RecoveryStorage | undefined, + storageKey: string +): number | undefined { + try { + const value = storage?.getItem(storageKey); + if (!value) return undefined; + const timestamp = Number(value); + return Number.isFinite(timestamp) ? timestamp : undefined; + } catch { + return undefined; + } +} + +function clearReloadAttempt( + storage: RecoveryStorage | undefined, + storageKey: string +): void { + reloadAttempts.delete(storageKey); + try { + storage?.removeItem(storageKey); + } catch { + // The in-memory guard still prevents a reload loop in this page. + } +} + +function recordReloadAttempt( + storage: RecoveryStorage | undefined, + storageKey: string, + timestamp: number +): void { + reloadAttempts.set(storageKey, timestamp); + try { + storage?.setItem(storageKey, String(timestamp)); + } catch { + // The in-memory guard still protects the current page. + } +} + +/** + * Reloads an already-open tab once when a deployment removes a lazy chunk + * referenced by its previous entry bundle. + */ +export async function loadLazyModule( + moduleKey: string, + load: () => Promise, + options: LazyImportRecoveryOptions = {} +): Promise { + const storage = + options.storage === undefined ? browserSessionStorage() : options.storage; + const storageKey = `${LAZY_IMPORT_RELOAD_KEY_PREFIX}${moduleKey}`; + + try { + const loaded = await load(); + clearReloadAttempt(storage ?? undefined, storageKey); + return loaded; + } catch (error) { + const now = (options.now ?? Date.now)(); + const lastReloadAt = + storedReloadAt(storage ?? undefined, storageKey) ?? + reloadAttempts.get(storageKey); + if ( + lastReloadAt !== undefined && + now - lastReloadAt < LAZY_IMPORT_RELOAD_COOLDOWN_MS + ) { + throw error; + } + + recordReloadAttempt(storage ?? undefined, storageKey, now); + try { + (options.reload ?? (() => location.reload()))(); + } catch { + throw error; + } + + return await new Promise(() => { + // Navigation replaces this document; keep Suspense pending meanwhile. + }); + } +} diff --git a/src/router.tsx b/src/router.tsx index 97265e343..44f349009 100644 --- a/src/router.tsx +++ b/src/router.tsx @@ -8,24 +8,73 @@ import { } from "@tanstack/react-router"; import { Layout } from "./components/layout/Layout"; +import { loadLazyModule } from "./lib/lazyImportRecovery"; import { authActions, authStore } from "./stores/authStore"; -const Agents = lazyRouteComponent(() => import("./pages/Agents"), "Agents"); -const Chat = lazyRouteComponent(() => import("./pages/Chat"), "Chat"); -const Dashboard = lazyRouteComponent(() => import("./pages/Dashboard"), "Dashboard"); -const Database = lazyRouteComponent(() => import("./pages/Database"), "Database"); -const Delivery = lazyRouteComponent(() => import("./pages/Delivery"), "Delivery"); -const Docker = lazyRouteComponent(() => import("./pages/Docker"), "Docker"); -const Files = lazyRouteComponent(() => import("./pages/Files"), "Files"); -const Jobs = lazyRouteComponent(() => import("./pages/Jobs"), "Jobs"); -const Login = lazyRouteComponent(() => import("./pages/Login"), "Login"); -const Logs = lazyRouteComponent(() => import("./pages/Logs"), "Logs"); -const Moltbook = lazyRouteComponent(() => import("./pages/Moltbook"), "Moltbook"); -const Reports = lazyRouteComponent(() => import("./pages/Reports"), "Reports"); -const Sessions = lazyRouteComponent(() => import("./pages/Sessions"), "Sessions"); -const Settings = lazyRouteComponent(() => import("./pages/Settings"), "Settings"); -const Tasks = lazyRouteComponent(() => import("./pages/Tasks"), "Tasks"); -const Terminal = lazyRouteComponent(() => import("./pages/Terminal"), "Terminal"); +const Agents = lazyRouteComponent( + () => loadLazyModule("route-agents", () => import("./pages/Agents")), + "Agents" +); +const Chat = lazyRouteComponent( + () => loadLazyModule("route-chat", () => import("./pages/Chat")), + "Chat" +); +const Dashboard = lazyRouteComponent( + () => loadLazyModule("route-dashboard", () => import("./pages/Dashboard")), + "Dashboard" +); +const Database = lazyRouteComponent( + () => loadLazyModule("route-database", () => import("./pages/Database")), + "Database" +); +const Delivery = lazyRouteComponent( + () => loadLazyModule("route-delivery", () => import("./pages/Delivery")), + "Delivery" +); +const Docker = lazyRouteComponent( + () => loadLazyModule("route-docker", () => import("./pages/Docker")), + "Docker" +); +const Files = lazyRouteComponent( + () => loadLazyModule("route-files", () => import("./pages/Files")), + "Files" +); +const Jobs = lazyRouteComponent( + () => loadLazyModule("route-jobs", () => import("./pages/Jobs")), + "Jobs" +); +const Login = lazyRouteComponent( + () => loadLazyModule("route-login", () => import("./pages/Login")), + "Login" +); +const Logs = lazyRouteComponent( + () => loadLazyModule("route-logs", () => import("./pages/Logs")), + "Logs" +); +const Moltbook = lazyRouteComponent( + () => loadLazyModule("route-moltbook", () => import("./pages/Moltbook")), + "Moltbook" +); +const Reports = lazyRouteComponent( + () => loadLazyModule("route-reports", () => import("./pages/Reports")), + "Reports" +); +const Sessions = lazyRouteComponent( + () => loadLazyModule("route-sessions", () => import("./pages/Sessions")), + "Sessions" +); +const Settings = lazyRouteComponent( + () => loadLazyModule("route-settings", () => import("./pages/Settings")), + "Settings" +); +const Tasks = lazyRouteComponent( + () => loadLazyModule("route-tasks", () => import("./pages/Tasks")), + "Tasks" +); +const Terminal = lazyRouteComponent( + () => loadLazyModule("route-terminal", () => import("./pages/Terminal")), + "Terminal" +); const rootRoute = createRootRoute({ component: () => , diff --git a/src/test/componentBehavior.test.tsx b/src/test/componentBehavior.test.tsx index 4d4903a9b..d0d898ab5 100644 --- a/src/test/componentBehavior.test.tsx +++ b/src/test/componentBehavior.test.tsx @@ -2615,6 +2615,7 @@ describe("shared component helpers", () => { expect( screen.getByText("Bash").closest("[class*='border-amber']") ).not.toContainElement(screen.getByText("answer")); + await waitFor(() => expect(onDynamicContentLoad).toHaveBeenCalled()); await user.click(screen.getByRole("button", { name: /follow/i })); expect(onUserScrollIntent).not.toHaveBeenCalled(); diff --git a/src/test/lazyImportRecovery.test.ts b/src/test/lazyImportRecovery.test.ts new file mode 100644 index 000000000..aa5a072b8 --- /dev/null +++ b/src/test/lazyImportRecovery.test.ts @@ -0,0 +1,170 @@ +import { describe, expect, it, jest } from "bun:test"; + +import { loadLazyModule } from "../lib/lazyImportRecovery"; + +function recoveryStorage(initialValue?: string) { + let value = initialValue; + return { + getItem: jest.fn(() => value), + removeItem: jest.fn(() => { + value = undefined; + }), + setItem: jest.fn((_key: string, nextValue: string) => { + value = nextValue; + }), + }; +} + +describe("lazy import recovery", () => { + it("clears the module reload guard after a successful import", async () => { + const storage = recoveryStorage("100"); + const routeModule = { Tasks: () => {} }; + + await expect( + loadLazyModule("route-tasks", async () => routeModule, { storage }) + ).resolves.toBe(routeModule); + expect(storage.removeItem).toHaveBeenCalledWith( + "mira-dashboard:lazy-import-reload:route-tasks" + ); + }); + + it("reloads once for a missing chunk and rejects a repeated failure", async () => { + const importError = new TypeError("Failed to fetch dynamically imported module"); + const storage = recoveryStorage(); + const reload = jest.fn(); + const firstImport = loadLazyModule( + "route-reports", + async () => { + throw importError; + }, + { + now: () => 10_000, + reload, + storage, + } + ); + + await Promise.resolve(); + await Promise.resolve(); + expect(reload).toHaveBeenCalledTimes(1); + expect(storage.setItem).toHaveBeenCalledWith( + "mira-dashboard:lazy-import-reload:route-reports", + "10000" + ); + void firstImport; + + await expect( + loadLazyModule( + "route-reports", + async () => { + throw importError; + }, + { + now: () => 10_001, + reload, + storage, + } + ) + ).rejects.toBe(importError); + expect(reload).toHaveBeenCalledTimes(1); + }); + + it("allows another recovery reload after the cooldown", async () => { + const importError = new TypeError("Importing a module script failed"); + const storage = recoveryStorage("10000"); + const reload = jest.fn(); + const importRequest = loadLazyModule( + "route-database", + async () => { + throw importError; + }, + { + now: () => 70_001, + reload, + storage, + } + ); + + await Promise.resolve(); + await Promise.resolve(); + expect(reload).toHaveBeenCalledTimes(1); + expect(storage.setItem).toHaveBeenCalledWith( + "mira-dashboard:lazy-import-reload:route-database", + "70001" + ); + void importRequest; + }); + + it("uses the in-memory loop guard when storage is unavailable", async () => { + const importError = new TypeError("error loading dynamically imported module"); + const storage = { + getItem: jest.fn(() => { + throw new Error("storage unavailable"); + }), + removeItem: jest.fn(() => { + throw new Error("storage unavailable"); + }), + setItem: jest.fn(() => { + throw new Error("storage unavailable"); + }), + }; + const reload = jest.fn(); + const firstImport = loadLazyModule( + "chat-markdown-storage-failure", + async () => { + throw importError; + }, + { + now: () => 20_000, + reload, + storage, + } + ); + + await Promise.resolve(); + await Promise.resolve(); + expect(reload).toHaveBeenCalledTimes(1); + void firstImport; + + await expect( + loadLazyModule( + "chat-markdown-storage-failure", + async () => { + throw importError; + }, + { + now: () => 20_001, + reload, + storage, + } + ) + ).rejects.toBe(importError); + expect(reload).toHaveBeenCalledTimes(1); + await expect( + loadLazyModule("chat-markdown-storage-failure", async () => "loaded", { + storage, + }) + ).resolves.toBe("loaded"); + }); + + it("surfaces the import error when the browser reload cannot start", async () => { + const importError = new TypeError("Failed to fetch dynamically imported module"); + const storage = recoveryStorage("invalid timestamp"); + + await expect( + loadLazyModule( + "route-delivery-reload-failure", + async () => { + throw importError; + }, + { + now: () => 30_000, + reload: () => { + throw new Error("navigation unavailable"); + }, + storage, + } + ) + ).rejects.toBe(importError); + }); +}); From 0a2d8765ceb8d058ca2f130bc153321f288acbf1 Mon Sep 17 00:00:00 2001 From: mira-2026 Date: Tue, 28 Jul 2026 09:13:50 +0200 Subject: [PATCH 3/8] fix: keep route preloads non-disruptive --- src/components/layout/Layout.tsx | 4 +- src/lib/routeModules.ts | 53 +++++++++++++++++++ ...axHighlighter.ts => syntaxHighlighter.tsx} | 30 +++++++++-- src/router.tsx | 33 ++++++------ src/test/componentBehavior.test.tsx | 9 +++- src/test/lazyImportRecovery.test.ts | 11 ++++ 6 files changed, 119 insertions(+), 21 deletions(-) create mode 100644 src/lib/routeModules.ts rename src/lib/{syntaxHighlighter.ts => syntaxHighlighter.tsx} (68%) diff --git a/src/components/layout/Layout.tsx b/src/components/layout/Layout.tsx index be86322d5..ddfee367c 100644 --- a/src/components/layout/Layout.tsx +++ b/src/components/layout/Layout.tsx @@ -25,6 +25,7 @@ import { } from "react"; import { DELIVERY_NAV_REFRESH_MS, useCacheEntry, usePullRequests } from "../../hooks"; +import { preloadRouteModule } from "../../lib/routeModules"; import { cn } from "../../utils/cn"; import { AppHeader } from "./AppHeader"; @@ -110,8 +111,9 @@ export function Layout({ children }: LayoutProperties) { preloadRouteModule(item.to)} + onMouseEnter={() => preloadRouteModule(item.to)} className={cn( "mb-1 flex min-h-11 items-center gap-2 rounded-lg px-3 py-2 transition-colors", isActive diff --git a/src/lib/routeModules.ts b/src/lib/routeModules.ts new file mode 100644 index 000000000..9046babab --- /dev/null +++ b/src/lib/routeModules.ts @@ -0,0 +1,53 @@ +type RouteModuleLoader = () => Promise; + +export const routeModules = { + agents: () => import("../pages/Agents"), + chat: () => import("../pages/Chat"), + dashboard: () => import("../pages/Dashboard"), + database: () => import("../pages/Database"), + delivery: () => import("../pages/Delivery"), + docker: () => import("../pages/Docker"), + files: () => import("../pages/Files"), + jobs: () => import("../pages/Jobs"), + login: () => import("../pages/Login"), + logs: () => import("../pages/Logs"), + moltbook: () => import("../pages/Moltbook"), + reports: () => import("../pages/Reports"), + sessions: () => import("../pages/Sessions"), + settings: () => import("../pages/Settings"), + tasks: () => import("../pages/Tasks"), + terminal: () => import("../pages/Terminal"), +}; + +const routeModulesByPath: Readonly> = { + "/": routeModules.dashboard, + "/agents": routeModules.agents, + "/chat": routeModules.chat, + "/database": routeModules.database, + "/delivery": routeModules.delivery, + "/docker": routeModules.docker, + "/files": routeModules.files, + "/jobs": routeModules.jobs, + "/logs": routeModules.logs, + "/moltbook": routeModules.moltbook, + "/reports": routeModules.reports, + "/sessions": routeModules.sessions, + "/settings": routeModules.settings, + "/tasks": routeModules.tasks, + "/terminal": routeModules.terminal, +}; + +/** Warms a module without turning a speculative preload failure into navigation. */ +export async function preloadModule(load: RouteModuleLoader): Promise { + try { + await load(); + } catch { + // A committed navigation retries through loadLazyModule and may recover. + } +} + +/** Preloads a registered route from hover/focus intent without reloading the page. */ +export function preloadRouteModule(pathname: string): void { + const load = routeModulesByPath[pathname]; + if (load) void preloadModule(load); +} diff --git a/src/lib/syntaxHighlighter.ts b/src/lib/syntaxHighlighter.tsx similarity index 68% rename from src/lib/syntaxHighlighter.ts rename to src/lib/syntaxHighlighter.tsx index 2fd2714bb..3378e17d2 100644 --- a/src/lib/syntaxHighlighter.ts +++ b/src/lib/syntaxHighlighter.tsx @@ -1,4 +1,8 @@ -import { Light as SyntaxHighlighter } from "react-syntax-highlighter"; +import type { SyntaxHighlighterProps } from "react-syntax-highlighter"; +import { + Light as HighlightJsSyntaxHighlighter, + PrismLight as PrismSyntaxHighlighter, +} from "react-syntax-highlighter"; import bash from "react-syntax-highlighter/dist/esm/languages/hljs/bash"; import c from "react-syntax-highlighter/dist/esm/languages/hljs/c"; import cpp from "react-syntax-highlighter/dist/esm/languages/hljs/cpp"; @@ -25,6 +29,8 @@ import swift from "react-syntax-highlighter/dist/esm/languages/hljs/swift"; import typescript from "react-syntax-highlighter/dist/esm/languages/hljs/typescript"; import xml from "react-syntax-highlighter/dist/esm/languages/hljs/xml"; import yaml from "react-syntax-highlighter/dist/esm/languages/hljs/yaml"; +import graphql from "react-syntax-highlighter/dist/esm/languages/prism/graphql"; +import { okaidia } from "react-syntax-highlighter/dist/esm/styles/prism"; const languages = { bash, @@ -55,9 +61,27 @@ const languages = { xml, yaml, }; +const prismLanguages = { graphql }; for (const [name, language] of Object.entries(languages)) { - SyntaxHighlighter.registerLanguage(name, language); + HighlightJsSyntaxHighlighter.registerLanguage(name, language); +} +for (const [name, language] of Object.entries(prismLanguages)) { + PrismSyntaxHighlighter.registerLanguage(name, language); } -export { Light as CodeSyntaxHighlighter } from "react-syntax-highlighter"; +/** + * Uses the smaller Highlight.js registry generally and Prism's GraphQL grammar + * only where Highlight.js has no equivalent language module. + */ +export function CodeSyntaxHighlighter({ + language, + style, + ...properties +}: SyntaxHighlighterProps) { + return language === "graphql" ? ( + + ) : ( + + ); +} diff --git a/src/router.tsx b/src/router.tsx index 44f349009..d9091efbd 100644 --- a/src/router.tsx +++ b/src/router.tsx @@ -9,70 +9,71 @@ import { import { Layout } from "./components/layout/Layout"; import { loadLazyModule } from "./lib/lazyImportRecovery"; +import { routeModules } from "./lib/routeModules"; import { authActions, authStore } from "./stores/authStore"; const Agents = lazyRouteComponent( - () => loadLazyModule("route-agents", () => import("./pages/Agents")), + () => loadLazyModule("route-agents", routeModules.agents), "Agents" ); const Chat = lazyRouteComponent( - () => loadLazyModule("route-chat", () => import("./pages/Chat")), + () => loadLazyModule("route-chat", routeModules.chat), "Chat" ); const Dashboard = lazyRouteComponent( - () => loadLazyModule("route-dashboard", () => import("./pages/Dashboard")), + () => loadLazyModule("route-dashboard", routeModules.dashboard), "Dashboard" ); const Database = lazyRouteComponent( - () => loadLazyModule("route-database", () => import("./pages/Database")), + () => loadLazyModule("route-database", routeModules.database), "Database" ); const Delivery = lazyRouteComponent( - () => loadLazyModule("route-delivery", () => import("./pages/Delivery")), + () => loadLazyModule("route-delivery", routeModules.delivery), "Delivery" ); const Docker = lazyRouteComponent( - () => loadLazyModule("route-docker", () => import("./pages/Docker")), + () => loadLazyModule("route-docker", routeModules.docker), "Docker" ); const Files = lazyRouteComponent( - () => loadLazyModule("route-files", () => import("./pages/Files")), + () => loadLazyModule("route-files", routeModules.files), "Files" ); const Jobs = lazyRouteComponent( - () => loadLazyModule("route-jobs", () => import("./pages/Jobs")), + () => loadLazyModule("route-jobs", routeModules.jobs), "Jobs" ); const Login = lazyRouteComponent( - () => loadLazyModule("route-login", () => import("./pages/Login")), + () => loadLazyModule("route-login", routeModules.login), "Login" ); const Logs = lazyRouteComponent( - () => loadLazyModule("route-logs", () => import("./pages/Logs")), + () => loadLazyModule("route-logs", routeModules.logs), "Logs" ); const Moltbook = lazyRouteComponent( - () => loadLazyModule("route-moltbook", () => import("./pages/Moltbook")), + () => loadLazyModule("route-moltbook", routeModules.moltbook), "Moltbook" ); const Reports = lazyRouteComponent( - () => loadLazyModule("route-reports", () => import("./pages/Reports")), + () => loadLazyModule("route-reports", routeModules.reports), "Reports" ); const Sessions = lazyRouteComponent( - () => loadLazyModule("route-sessions", () => import("./pages/Sessions")), + () => loadLazyModule("route-sessions", routeModules.sessions), "Sessions" ); const Settings = lazyRouteComponent( - () => loadLazyModule("route-settings", () => import("./pages/Settings")), + () => loadLazyModule("route-settings", routeModules.settings), "Settings" ); const Tasks = lazyRouteComponent( - () => loadLazyModule("route-tasks", () => import("./pages/Tasks")), + () => loadLazyModule("route-tasks", routeModules.tasks), "Tasks" ); const Terminal = lazyRouteComponent( - () => loadLazyModule("route-terminal", () => import("./pages/Terminal")), + () => loadLazyModule("route-terminal", routeModules.terminal), "Terminal" ); diff --git a/src/test/componentBehavior.test.tsx b/src/test/componentBehavior.test.tsx index d0d898ab5..50dba834b 100644 --- a/src/test/componentBehavior.test.tsx +++ b/src/test/componentBehavior.test.tsx @@ -2686,7 +2686,7 @@ describe("shared component helpers", () => { size: 5, }; - const { rerender } = render( + const { container, rerender } = render( { rerender(); expect(screen.getByText(/covered/)).toBeInTheDocument(); + + rerender( + + ); + expect( + container.querySelector(":scope code.language-graphql .token") + ).toHaveTextContent("query"); }); it("drives file explorer hook directory loading, JSON validation, and saves", async () => { diff --git a/src/test/lazyImportRecovery.test.ts b/src/test/lazyImportRecovery.test.ts index aa5a072b8..783b77fe9 100644 --- a/src/test/lazyImportRecovery.test.ts +++ b/src/test/lazyImportRecovery.test.ts @@ -1,6 +1,7 @@ import { describe, expect, it, jest } from "bun:test"; import { loadLazyModule } from "../lib/lazyImportRecovery"; +import { preloadModule } from "../lib/routeModules"; function recoveryStorage(initialValue?: string) { let value = initialValue; @@ -16,6 +17,16 @@ function recoveryStorage(initialValue?: string) { } describe("lazy import recovery", () => { + it("keeps speculative preload failures silent", async () => { + const importError = new TypeError("Failed to fetch dynamically imported module"); + const load = jest.fn(async () => { + throw importError; + }); + + await expect(preloadModule(load)).resolves.toBeUndefined(); + expect(load).toHaveBeenCalledTimes(1); + }); + it("clears the module reload guard after a successful import", async () => { const storage = recoveryStorage("100"); const routeModule = { Tasks: () => {} }; From 47953bc8e4b490f24cc3d4b6c521625b926f1289 Mon Sep 17 00:00:00 2001 From: mira-2026 Date: Tue, 28 Jul 2026 09:34:13 +0200 Subject: [PATCH 4/8] fix(frontend): address final bundle review findings --- .../features/chat/ChatMessagesList.tsx | 7 ++-- src/lib/lazyImportRecovery.ts | 7 ++-- src/lib/syntaxHighlighter.tsx | 33 +++++++++++++++++-- src/test/componentBehavior.test.tsx | 8 ++--- src/test/lazyImportRecovery.test.ts | 26 +++++++++++++++ 5 files changed, 71 insertions(+), 10 deletions(-) diff --git a/src/components/features/chat/ChatMessagesList.tsx b/src/components/features/chat/ChatMessagesList.tsx index 8a3e83415..9ca448904 100644 --- a/src/components/features/chat/ChatMessagesList.tsx +++ b/src/components/features/chat/ChatMessagesList.tsx @@ -46,11 +46,14 @@ const ChatMarkdown = lazy(async () => { function SettledChatMarkdown({ onLoad, text }: { onLoad: () => void; text: string }) { const onLoadReference = useRef(onLoad); - onLoadReference.current = onLoad; + + useLayoutEffect(() => { + onLoadReference.current = onLoad; + }, [onLoad]); useLayoutEffect(() => { onLoadReference.current(); - }, []); + }, [text]); return ; } diff --git a/src/lib/lazyImportRecovery.ts b/src/lib/lazyImportRecovery.ts index 1d3689c9d..99bd6315d 100644 --- a/src/lib/lazyImportRecovery.ts +++ b/src/lib/lazyImportRecovery.ts @@ -84,9 +84,12 @@ export async function loadLazyModule( const lastReloadAt = storedReloadAt(storage ?? undefined, storageKey) ?? reloadAttempts.get(storageKey); + const elapsedSinceReload = + lastReloadAt === undefined ? undefined : now - lastReloadAt; if ( - lastReloadAt !== undefined && - now - lastReloadAt < LAZY_IMPORT_RELOAD_COOLDOWN_MS + elapsedSinceReload !== undefined && + elapsedSinceReload >= 0 && + elapsedSinceReload < LAZY_IMPORT_RELOAD_COOLDOWN_MS ) { throw error; } diff --git a/src/lib/syntaxHighlighter.tsx b/src/lib/syntaxHighlighter.tsx index 3378e17d2..12b643390 100644 --- a/src/lib/syntaxHighlighter.tsx +++ b/src/lib/syntaxHighlighter.tsx @@ -30,7 +30,7 @@ import typescript from "react-syntax-highlighter/dist/esm/languages/hljs/typescr import xml from "react-syntax-highlighter/dist/esm/languages/hljs/xml"; import yaml from "react-syntax-highlighter/dist/esm/languages/hljs/yaml"; import graphql from "react-syntax-highlighter/dist/esm/languages/prism/graphql"; -import { okaidia } from "react-syntax-highlighter/dist/esm/styles/prism"; +import { monokaiSublime } from "react-syntax-highlighter/dist/esm/styles/hljs"; const languages = { bash, @@ -63,6 +63,31 @@ const languages = { }; const prismLanguages = { graphql }; +function monokaiStyle(name: string) { + return monokaiSublime[name] ?? {}; +} + +const prismMonokaiSublime: NonNullable = { + 'code[class*="language-"]': monokaiStyle("hljs"), + 'pre[class*="language-"]': monokaiStyle("hljs"), + "attr-name": monokaiStyle("hljs-attribute"), + "attr-value": monokaiStyle("hljs-string"), + boolean: monokaiStyle("hljs-number"), + builtin: monokaiStyle("hljs-built_in"), + "class-name": monokaiStyle("hljs-title"), + comment: monokaiStyle("hljs-comment"), + constant: monokaiStyle("hljs-number"), + function: monokaiStyle("hljs-title"), + keyword: monokaiStyle("hljs-keyword"), + number: monokaiStyle("hljs-number"), + operator: monokaiStyle("hljs"), + property: monokaiStyle("hljs-attr"), + punctuation: monokaiStyle("hljs-tag"), + string: monokaiStyle("hljs-string"), + tag: monokaiStyle("hljs-name"), + variable: monokaiStyle("hljs-variable"), +}; + for (const [name, language] of Object.entries(languages)) { HighlightJsSyntaxHighlighter.registerLanguage(name, language); } @@ -80,7 +105,11 @@ export function CodeSyntaxHighlighter({ ...properties }: SyntaxHighlighterProps) { return language === "graphql" ? ( - + ) : ( ); diff --git a/src/test/componentBehavior.test.tsx b/src/test/componentBehavior.test.tsx index 50dba834b..549ec9b5c 100644 --- a/src/test/componentBehavior.test.tsx +++ b/src/test/componentBehavior.test.tsx @@ -2686,7 +2686,7 @@ describe("shared component helpers", () => { size: 5, }; - const { container, rerender } = render( + const { rerender } = render( { rerender( ); - expect( - container.querySelector(":scope code.language-graphql .token") - ).toHaveTextContent("query"); + const graphQlKeyword = screen.getByText("query", { selector: ".token" }); + expect(graphQlKeyword).toHaveTextContent("query"); + expect(graphQlKeyword).toHaveStyle({ color: "#f92672" }); }); it("drives file explorer hook directory loading, JSON validation, and saves", async () => { diff --git a/src/test/lazyImportRecovery.test.ts b/src/test/lazyImportRecovery.test.ts index 783b77fe9..bfee9afc8 100644 --- a/src/test/lazyImportRecovery.test.ts +++ b/src/test/lazyImportRecovery.test.ts @@ -106,6 +106,32 @@ describe("lazy import recovery", () => { void importRequest; }); + it("recovers when a stored reload timestamp is later than the current clock", async () => { + const importError = new TypeError("Importing a module script failed"); + const storage = recoveryStorage("90000"); + const reload = jest.fn(); + const importRequest = loadLazyModule( + "route-clock-reset", + async () => { + throw importError; + }, + { + now: () => 30_000, + reload, + storage, + } + ); + + await Promise.resolve(); + await Promise.resolve(); + expect(reload).toHaveBeenCalledTimes(1); + expect(storage.setItem).toHaveBeenCalledWith( + "mira-dashboard:lazy-import-reload:route-clock-reset", + "30000" + ); + void importRequest; + }); + it("uses the in-memory loop guard when storage is unavailable", async () => { const importError = new TypeError("error loading dynamically imported module"); const storage = { From 4aec43f46bdccd38f5411433347930bb74e6e4fc Mon Sep 17 00:00:00 2001 From: mira-2026 Date: Tue, 28 Jul 2026 09:40:58 +0200 Subject: [PATCH 5/8] fix(frontend): harden lazy recovery and artifact paths --- scripts/frontendBuildArtifacts.ts | 27 ++++++++++++++++-------- src/lib/lazyImportRecovery.ts | 14 +++++++++++++ src/test/frontendBuildArtifacts.test.ts | 28 +++++++++++++++++++++++++ src/test/lazyImportRecovery.test.ts | 20 ++++++++++++++++++ 4 files changed, 80 insertions(+), 9 deletions(-) diff --git a/scripts/frontendBuildArtifacts.ts b/scripts/frontendBuildArtifacts.ts index 325318cd0..4ab93dc34 100644 --- a/scripts/frontendBuildArtifacts.ts +++ b/scripts/frontendBuildArtifacts.ts @@ -56,16 +56,24 @@ function normalizedOutputKey(outputKey: string): string { return outputKey.replaceAll("\\", "/").replace(/^\.\//u, ""); } -function outputFilePath(outdir: string, outputKey: string): string { +function isPathWithin(directory: string, candidate: string): boolean { + return candidate === directory || candidate.startsWith(`${directory}${path.sep}`); +} + +function resolvedOutput(outdir: string, outputKey: string) { const resolvedOutdir = path.resolve(outdir); - const resolvedPath = path.resolve(resolvedOutdir, normalizedOutputKey(outputKey)); - if ( - resolvedPath !== resolvedOutdir && - !resolvedPath.startsWith(`${resolvedOutdir}${path.sep}`) - ) { + const normalizedKey = normalizedOutputKey(outputKey); + const cwdRelativePath = path.resolve(normalizedKey); + const resolvedPath = isPathWithin(resolvedOutdir, cwdRelativePath) + ? cwdRelativePath + : path.resolve(resolvedOutdir, normalizedKey); + if (resolvedPath === resolvedOutdir || !isPathWithin(resolvedOutdir, resolvedPath)) { throw new Error(`Frontend build output escaped its directory: ${outputKey}`); } - return resolvedPath; + return { + filePath: resolvedPath, + relativePath: path.relative(resolvedOutdir, resolvedPath).replaceAll("\\", "/"), + }; } function isIndexEntryPoint(entryPoint?: string): boolean { @@ -136,10 +144,11 @@ export async function measureFrontendBundle( for (const outputKey of Object.keys(metafile.outputs)) { const extension = path.extname(outputKey); if (extension !== ".css" && extension !== ".js") continue; - const contents = await readFile(outputFilePath(outdir, outputKey)); + const output = resolvedOutput(outdir, outputKey); + const contents = await readFile(output.filePath); measuredOutputs.set(outputKey, { gzipBytes: gzipSync(contents, { level: 9 }).byteLength, - outputPath: normalizedOutputKey(outputKey), + outputPath: output.relativePath, rawBytes: contents.byteLength, }); } diff --git a/src/lib/lazyImportRecovery.ts b/src/lib/lazyImportRecovery.ts index 99bd6315d..32ceb5732 100644 --- a/src/lib/lazyImportRecovery.ts +++ b/src/lib/lazyImportRecovery.ts @@ -1,5 +1,11 @@ const LAZY_IMPORT_RELOAD_COOLDOWN_MS = 60_000; const LAZY_IMPORT_RELOAD_KEY_PREFIX = "mira-dashboard:lazy-import-reload:"; +const LAZY_IMPORT_FAILURE_MESSAGES = [ + "error loading dynamically imported module", + "failed to fetch dynamically imported module", + "failed to load module script", + "importing a module script failed", +] as const; interface RecoveryStorage { getItem(key: string): string | null | undefined; @@ -15,6 +21,12 @@ interface LazyImportRecoveryOptions { const reloadAttempts = new Map(); +function isLazyImportLoadFailure(error: unknown): boolean { + if (!(error instanceof Error) || error.name !== "TypeError") return false; + const message = error.message.toLowerCase(); + return LAZY_IMPORT_FAILURE_MESSAGES.some((candidate) => message.includes(candidate)); +} + function browserSessionStorage(): RecoveryStorage | undefined { try { return sessionStorage; @@ -80,6 +92,8 @@ export async function loadLazyModule( clearReloadAttempt(storage ?? undefined, storageKey); return loaded; } catch (error) { + if (!isLazyImportLoadFailure(error)) throw error; + const now = (options.now ?? Date.now)(); const lastReloadAt = storedReloadAt(storage ?? undefined, storageKey) ?? diff --git a/src/test/frontendBuildArtifacts.test.ts b/src/test/frontendBuildArtifacts.test.ts index 95ec77fdf..b06fff253 100644 --- a/src/test/frontendBuildArtifacts.test.ts +++ b/src/test/frontendBuildArtifacts.test.ts @@ -135,6 +135,34 @@ describe("frontend build artifacts", () => { ); }); + it("does not prepend outdir when metafile keys already include it", async () => { + const outdir = await temporaryOutputRoot(); + const entryContents = "export const entry = true;\n"; + await fs.writeFile(path.join(outdir, "assets", "entry.js"), entryContents); + const outdirKey = path.relative(process.cwd(), outdir).replaceAll("\\", "/"); + const outputKey = `${outdirKey}/assets/entry.js`; + const metafile = { + inputs: {}, + outputs: { + [outputKey]: { + bytes: entryContents.length, + entryPoint: "index.html", + exports: [], + imports: [], + inputs: {}, + }, + }, + } satisfies Bun.BuildMetafile; + + const metrics = await measureFrontendBundle(metafile, outdir); + expect(metrics.initialFiles).toEqual([ + expect.objectContaining({ + outputPath: "assets/entry.js", + rawBytes: Buffer.byteLength(entryContents), + }), + ]); + }); + it("fails closed when build metadata has no initial JavaScript graph", async () => { const outdir = await temporaryOutputRoot(); const metafile = { diff --git a/src/test/lazyImportRecovery.test.ts b/src/test/lazyImportRecovery.test.ts index bfee9afc8..01a288101 100644 --- a/src/test/lazyImportRecovery.test.ts +++ b/src/test/lazyImportRecovery.test.ts @@ -39,6 +39,26 @@ describe("lazy import recovery", () => { ); }); + it("surfaces module evaluation errors without reloading the page", async () => { + const evaluationError = new TypeError( + "Cannot read properties of undefined (reading 'route')" + ); + const storage = recoveryStorage(); + const reload = jest.fn(); + + await expect( + loadLazyModule( + "route-evaluation-failure", + async () => { + throw evaluationError; + }, + { reload, storage } + ) + ).rejects.toBe(evaluationError); + expect(reload).not.toHaveBeenCalled(); + expect(storage.setItem).not.toHaveBeenCalled(); + }); + it("reloads once for a missing chunk and rejects a repeated failure", async () => { const importError = new TypeError("Failed to fetch dynamically imported module"); const storage = recoveryStorage(); From 65d2078bcece1915563bfb9e1ae2013093cda2fd Mon Sep 17 00:00:00 2001 From: mira-2026 Date: Tue, 28 Jul 2026 09:54:59 +0200 Subject: [PATCH 6/8] fix(dev): recover empty preview worktree paths --- .../src/services/pullRequestPreviewHost.ts | 19 ++++++++++-- backend/test/pullRequestPreview.test.ts | 30 ++++++++++++++----- 2 files changed, 38 insertions(+), 11 deletions(-) diff --git a/backend/src/services/pullRequestPreviewHost.ts b/backend/src/services/pullRequestPreviewHost.ts index c16c1a984..971f72bdd 100644 --- a/backend/src/services/pullRequestPreviewHost.ts +++ b/backend/src/services/pullRequestPreviewHost.ts @@ -12,6 +12,7 @@ import { readSync, realpathSync, renameSync, + rmdirSync, rmSync, writeFileSync, } from "node:fs"; @@ -596,7 +597,7 @@ function previewWorktreePath(config: PullRequestPreviewConfig): string { return config.managedWorktreePath; } -async function unregisterMissingPreviewWorktree( +async function unregisterPreviewWorktreeIfRegistered( config: PullRequestPreviewConfig, worktreePath: string, signal?: AbortSignal @@ -641,7 +642,11 @@ async function removePreviewWorktree( throw new Error("Refusing to remove an unmanaged preview worktree"); } if (!existsSync(resolvedWorktreePath)) { - return unregisterMissingPreviewWorktree(config, resolvedWorktreePath, signal); + return unregisterPreviewWorktreeIfRegistered( + config, + resolvedWorktreePath, + signal + ); } if (!isRealDirectory(resolvedWorktreePath)) { throw new Error("Preview worktree path must be a real directory"); @@ -709,6 +714,14 @@ async function ensurePreviewWorktree( if (!isRealDirectory(worktreePath)) { throw new Error("Preview worktree path must be a real directory"); } + if (readdirSync(worktreePath).length === 0) { + await unregisterPreviewWorktreeIfRegistered(config, worktreePath, signal); + if (existsSync(worktreePath)) { + rmdirSync(worktreePath); + } + } + } + if (existsSync(worktreePath)) { const { stdout: registeredRoot } = await runCommand( "git", ["-C", worktreePath, "rev-parse", "--show-toplevel"], @@ -732,7 +745,7 @@ async function ensurePreviewWorktree( signal, }); } else { - await unregisterMissingPreviewWorktree(config, worktreePath, signal); + await unregisterPreviewWorktreeIfRegistered(config, worktreePath, signal); await runCommand( "git", [ diff --git a/backend/test/pullRequestPreview.test.ts b/backend/test/pullRequestPreview.test.ts index 940b48df3..7d58a5928 100644 --- a/backend/test/pullRequestPreview.test.ts +++ b/backend/test/pullRequestPreview.test.ts @@ -511,11 +511,12 @@ describe("managed pull request preview", () => { let didProxyReceiveDisposableToken = false; let didProxyReceiveUpstreamToken = false; let didProxyStartWithStartingRecord = false; - let isMissingWorktreeRegistered = true; + let isMissingWorktreeRegistered = false; const activeUnits = new Set(); const commands: string[] = []; mkdirSync(config.dashboardRoot, { recursive: true }); mkdirSync(config.gitCommonDirectory, { recursive: true }); + mkdirSync(worktreePath, { recursive: true }); chmodSync(root, 0o755); const processSpy = jest @@ -628,6 +629,13 @@ describe("managed pull request preview", () => { executable === "git" && commandArguments.includes("--show-toplevel") ) { + if (readdirSync(worktreePath).length === 0) { + return { + code: 128, + stderr: "fatal: not a git repository (or any of the parent directories): .git", + stdout: "", + }; + } return { code: 0, stderr: "", stdout: `${worktreePath}\n` }; } if (executable === "git" && commandArguments.includes("status")) { @@ -707,16 +715,10 @@ describe("managed pull request preview", () => { url: "https://preview-node.ts.net:5173", }); expect(statSync(root).mode & 0o777).toBe(0o755); - const staleRemovalIndex = commands.findIndex((command) => - command.includes( - `worktree remove --force --force ${config.managedWorktreePath}` - ) - ); const worktreeAddIndex = commands.findIndex((command) => command.includes(`worktree add --detach ${config.managedWorktreePath}`) ); - expect(staleRemovalIndex).toBeGreaterThanOrEqual(0); - expect(worktreeAddIndex).toBeGreaterThan(staleRemovalIndex); + expect(worktreeAddIndex).toBeGreaterThanOrEqual(0); expect(prepareStateSpy).toHaveBeenCalledTimes(1); expect(protectFromCancellation).toHaveBeenCalledTimes(1); expect(fetchSpy).toHaveBeenCalledWith( @@ -817,6 +819,8 @@ describe("managed pull request preview", () => { status: "stopped", }); + rmSync(worktreePath, { force: true, recursive: true }); + isMissingWorktreeRegistered = true; await expect( startPullRequestPreview(candidate, { config, @@ -826,6 +830,16 @@ describe("managed pull request preview", () => { commitSha: COMMIT, status: "running", }); + const staleRemovalIndex = commands.findIndex((command) => + command.includes( + `worktree remove --force --force ${config.managedWorktreePath}` + ) + ); + const recreatedWorktreeIndex = commands.findLastIndex((command) => + command.includes(`worktree add --detach ${config.managedWorktreePath}`) + ); + expect(staleRemovalIndex).toBeGreaterThanOrEqual(0); + expect(recreatedWorktreeIndex).toBeGreaterThan(staleRemovalIndex); expect(prepareStateSpy).toHaveBeenCalledTimes(3); await expect( startPullRequestPreview( From a4c21a436f4d0d5bb9070a4246d843a26cc065ff Mon Sep 17 00:00:00 2001 From: mira-2026 Date: Tue, 28 Jul 2026 10:18:26 +0200 Subject: [PATCH 7/8] fix(dev): ignore release manifests in source mode --- backend/src/releaseManifest.ts | 28 +++++++++++++++++++++------- backend/test/releaseManifest.test.ts | 18 ++++++++++++++++++ 2 files changed, 39 insertions(+), 7 deletions(-) diff --git a/backend/src/releaseManifest.ts b/backend/src/releaseManifest.ts index 6fa16524d..62aaf4d6f 100644 --- a/backend/src/releaseManifest.ts +++ b/backend/src/releaseManifest.ts @@ -736,11 +736,24 @@ function fallbackGitCommit(releaseRoot: string): string { } } +function developmentRuntimeReleaseIdentity(releaseRoot: string): RuntimeReleaseIdentity { + const commit = fallbackGitCommit(releaseRoot); + return { + backendCommit: commit, + frontendCommit: commit, + ready: true, + source: commit === "unknown" ? "unknown" : "git", + }; +} + export async function loadRuntimeReleaseIdentity( releaseRoot = PROCESS_RELEASE_ROOT, environment = process.env.NODE_ENV, backendBuildCommit = getBackendBuildCommit() ): Promise { + if (environment !== "production" && backendBuildCommit === "development") { + return developmentRuntimeReleaseIdentity(releaseRoot); + } try { const realReleaseRoot = await fsp.realpath(releaseRoot); const manifest = await loadReleaseManifest(realReleaseRoot); @@ -786,18 +799,19 @@ export async function loadRuntimeReleaseIdentity( source: "manifest", }; } catch (error) { - const commit = fallbackGitCommit(releaseRoot); const isMissing = (error as NodeJS.ErrnoException).code === "ENOENT"; const isDevelopmentFallback = environment !== "production" && isMissing; + if (isDevelopmentFallback) { + return developmentRuntimeReleaseIdentity(releaseRoot); + } + const commit = fallbackGitCommit(releaseRoot); return { backendCommit: commit, frontendCommit: commit, - ...(!isDevelopmentFallback && { - issue: isMissing - ? ("manifest-missing" as const) - : ("manifest-invalid" as const), - }), - ready: isDevelopmentFallback, + issue: isMissing + ? ("manifest-missing" as const) + : ("manifest-invalid" as const), + ready: false, source: commit === "unknown" ? "unknown" : "git", }; } diff --git a/backend/test/releaseManifest.test.ts b/backend/test/releaseManifest.test.ts index ade083904..d028be6c9 100644 --- a/backend/test/releaseManifest.test.ts +++ b/backend/test/releaseManifest.test.ts @@ -580,4 +580,22 @@ describe("Dashboard release manifest", () => { ready: true, }); }); + + it("uses the Git identity for source development when a generated manifest remains", async () => { + const root = temporaryReleaseRoot(); + await writeReleaseManifest(manifestOptions(root)); + runGit(root, ["init", "--initial-branch=main"]); + runGit(root, ["add", "."]); + runGit(root, ["commit", "-m", "Test development source"]); + const commit = runGit(root, ["rev-parse", "--short=8", "HEAD"]); + + await expect( + loadRuntimeReleaseIdentity(root, "development", "development") + ).resolves.toEqual({ + backendCommit: commit, + frontendCommit: commit, + ready: true, + source: "git", + }); + }); }); From a54ad87ff6351d99693bd4d8825bad43fed4a97a Mon Sep 17 00:00:00 2001 From: mira-2026 Date: Tue, 28 Jul 2026 10:39:22 +0200 Subject: [PATCH 8/8] fix(release): scope missing manifest fallback --- backend/src/releaseManifest.ts | 9 ++++++--- backend/test/releaseManifest.test.ts | 6 ++++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/backend/src/releaseManifest.ts b/backend/src/releaseManifest.ts index 62aaf4d6f..a32c8a765 100644 --- a/backend/src/releaseManifest.ts +++ b/backend/src/releaseManifest.ts @@ -754,9 +754,11 @@ export async function loadRuntimeReleaseIdentity( if (environment !== "production" && backendBuildCommit === "development") { return developmentRuntimeReleaseIdentity(releaseRoot); } + let isLoadingManifest = true; try { const realReleaseRoot = await fsp.realpath(releaseRoot); const manifest = await loadReleaseManifest(realReleaseRoot); + isLoadingManifest = false; await verifyReleaseArtifacts(realReleaseRoot, manifest); try { await verifyReleaseBuildIdentities(realReleaseRoot, manifest); @@ -799,8 +801,9 @@ export async function loadRuntimeReleaseIdentity( source: "manifest", }; } catch (error) { - const isMissing = (error as NodeJS.ErrnoException).code === "ENOENT"; - const isDevelopmentFallback = environment !== "production" && isMissing; + const isManifestMissing = + isLoadingManifest && (error as NodeJS.ErrnoException).code === "ENOENT"; + const isDevelopmentFallback = environment !== "production" && isManifestMissing; if (isDevelopmentFallback) { return developmentRuntimeReleaseIdentity(releaseRoot); } @@ -808,7 +811,7 @@ export async function loadRuntimeReleaseIdentity( return { backendCommit: commit, frontendCommit: commit, - issue: isMissing + issue: isManifestMissing ? ("manifest-missing" as const) : ("manifest-invalid" as const), ready: false, diff --git a/backend/test/releaseManifest.test.ts b/backend/test/releaseManifest.test.ts index d028be6c9..472d6bb4d 100644 --- a/backend/test/releaseManifest.test.ts +++ b/backend/test/releaseManifest.test.ts @@ -536,6 +536,12 @@ describe("Dashboard release manifest", () => { issue: "manifest-invalid", ready: false, }); + await expect( + loadRuntimeReleaseIdentity(root, "test", TEST_COMMIT) + ).resolves.toMatchObject({ + issue: "manifest-invalid", + ready: false, + }); }); it("coalesces readiness verification and revalidates after invalidation", async () => {