Files
claw3d/scripts/cleanup-ux-artifacts.mjs
Luke The Dev 4fa4f13558 First Release of Claw3D (#11)
Co-authored-by: iamlukethedev <iamlukethedev@users.noreply.github.com>
2026-03-19 23:14:04 -05:00

89 lines
2.4 KiB
JavaScript

import { constants as fsConstants, promises as fs } from "node:fs";
import { spawnSync } from "node:child_process";
import os from "node:os";
import path from "node:path";
import { fileURLToPath } from "node:url";
const scriptDir = path.dirname(fileURLToPath(import.meta.url));
const repoRoot = path.resolve(scriptDir, "..");
const uxAuditDir = path.join(repoRoot, "output", "playwright", "ux-audit");
const transientFiles = [
path.join(repoRoot, ".agent", "ux-audit.md"),
path.join(repoRoot, ".agent", "execplan-pending.md"),
];
async function ensureDir(dir) {
await fs.mkdir(dir, { recursive: true });
}
async function clearDirContents(dir) {
await ensureDir(dir);
const entries = await fs.readdir(dir);
await Promise.all(
entries.map((entry) =>
fs.rm(path.join(dir, entry), { recursive: true, force: true }),
),
);
}
async function removeIfPresent(filePath) {
try {
await fs.unlink(filePath);
} catch (error) {
if (error && typeof error === "object" && "code" in error && error.code === "ENOENT") {
return;
}
throw error;
}
}
function run(command, args) {
return spawnSync(command, args, { encoding: "utf8" });
}
async function stopPlaywrightSessions() {
const codeHome = process.env.CODEX_HOME ?? path.join(os.homedir(), ".codex");
const pwcli = path.join(codeHome, "skills", "playwright", "scripts", "playwright_cli.sh");
try {
await fs.access(pwcli, fsConstants.X_OK);
} catch {
return;
}
const result = run(pwcli, ["session-stop-all"]);
if (result.status === 0) return;
if (result.error) {
throw result.error;
}
}
function killPattern(pattern) {
const result = run("pkill", ["-f", pattern]);
if (result.status === 0 || result.status === 1) return;
if (result.error && result.error.code === "ENOENT") return;
if (result.error) throw result.error;
}
function cleanupPlaywrightProcesses() {
killPattern("ms-playwright/daemon");
killPattern("playwright/cli.js run-mcp-server");
killPattern("chrome-headless-shell");
killPattern("Google Chrome --headless");
killPattern("Chromium --headless");
}
async function main() {
await stopPlaywrightSessions();
cleanupPlaywrightProcesses();
await clearDirContents(uxAuditDir);
for (const transientFile of transientFiles) {
await removeIfPresent(transientFile);
}
console.log("cleanup:ux-artifacts complete");
}
main().catch((error) => {
console.error("cleanup:ux-artifacts failed");
console.error(error);
process.exit(1);
});