import fs from "node:fs/promises"; import path from "node:path"; import {
resolveControlUiDistIndexHealth,
resolveControlUiDistIndexPathForRoot,
} from "../infra/control-ui-assets.js"; import { resolveOpenClawPackageRoot } from "../infra/openclaw-root.js"; import { runCommandWithTimeout } from "../process/exec.js"; import type { RuntimeEnv } from "../runtime.js"; import { note } from "../terminal/note.js"; import type { DoctorPrompter } from "./doctor-prompter.js";
if (schemaStats && !uiStats) {
note(["- Control UI assets are missing.", "- Run: pnpm ui:build"].join("\n"), "UI");
// In slim/docker environments we may not have the UI source tree. Trying // to build would fail (and spam logs), so skip the interactive repair. const uiSourcesPath = path.join(root, "ui/package.json"); const uiSourcesExist = await fs.stat(uiSourcesPath).catch(() => null); if (!uiSourcesExist) {
note("Skipping UI build: ui/ sources not present.", "UI"); return;
}
if (shouldRepair) { const uiSourcesPath = path.join(root, "ui/package.json"); const uiSourcesExist = await fs.stat(uiSourcesPath).catch(() => null); if (!uiSourcesExist) {
note("Skipping UI rebuild: ui/ sources not present.", "UI"); return;
}
note("Rebuilding stale UI assets... (this may take a moment)", "UI"); // Use scripts/ui.js to build, assuming node is available as we are running in it. // We use the same node executable to run the script. const uiScriptPath = path.join(root, "scripts/ui.js"); const buildResult = await runCommandWithTimeout(
[process.execPath, uiScriptPath, "build"],
{
cwd: root,
timeoutMs: 120_000,
env: { ...process.env, FORCE_COLOR: "1" },
},
); if (buildResult.code === 0) {
note("UI rebuild complete.", "UI");
} else { const details = [
`UI rebuild failed (exit ${buildResult.code ?? "unknown"}).`,
buildResult.stderr.trim() ? buildResult.stderr.trim() : null,
]
.filter(Boolean)
.join("\n");
note(details, "UI");
}
}
}
}
} catch { // If files don't exist, we can't check. // If git fails, we silently skip. // runtime.debug(`UI freshness check failed: ${String(err)}`);
}
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.9 Sekunden
(vorverarbeitet am 2026-06-04)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.