#!/usr/bin/env node import fs from "node:fs"; import path from "node:path"; import { fileURLToPath } from "node:url"; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const referencePath = path.join(__dirname, "reference-source.json"); function fail(message, details) { const payload = { error: message }; if (details) payload.details = details; process.stderr.write(`${JSON.stringify(payload)}\n`); process.exit(1); } async function main() { try { await import("cloakbrowser"); await import("playwright-core"); } catch (error) { fail( "Missing dependency/config: web-automation requires cloakbrowser and playwright-core.", error instanceof Error ? error.message : String(error) ); } const browsePath = path.join(__dirname, "browse.ts"); const browseSource = fs.readFileSync(browsePath, "utf8"); if (!/launchPersistentContext/.test(browseSource) || !/from ['"]cloakbrowser['"]/.test(browseSource)) { fail("browse.ts is not configured for CloakBrowser."); } const referenceSource = JSON.parse(fs.readFileSync(referencePath, "utf8")); if (!referenceSource.referenceRepo || !referenceSource.referenceCommit) { fail("Frozen reference metadata is missing from reference-source.json."); } process.stdout.write("OK: cloakbrowser + playwright-core installed\n"); process.stdout.write("OK: CloakBrowser integration detected in browse.ts\n"); process.stdout.write( `OK: frozen reference ${referenceSource.referenceRepo}@${referenceSource.referenceCommit}\n` ); } main().catch((error) => { fail("Install check failed.", error instanceof Error ? error.message : String(error)); });