#!/usr/bin/env node import fs from "node:fs"; import path from "node:path"; import os from "node:os"; import { execSync } from "node:child_process"; const args = process.argv.slice(2); const mode = args.includes("--install") ? "install" : args.includes("--uninstall") ? "uninstall" : null; const profileIndex = args.indexOf("--openclaw-profile-path"); const profilePath = profileIndex >= 0 ? args[profileIndex + 1] : path.join(os.homedir(), ".openclaw"); if (!mode) { console.error("Usage: node scripts/install.mjs --install|--uninstall [--openclaw-profile-path ]"); process.exit(1); } const repoRoot = path.resolve(import.meta.dirname, ".."); const pluginId = "yonexus-server"; const sourceDist = path.join(repoRoot, "dist"); const targetDir = path.join(profilePath, "plugins", pluginId); function oc(cmd) { try { return execSync(`openclaw ${cmd}`, { encoding: "utf8", stdio: ["pipe", "pipe", "pipe"] }).trim(); } catch (e) { console.error(` ⚠ openclaw ${cmd}: ${e.stderr?.trim() || e.message}`); return null; } } function ensureInArray(configKey, value) { const raw = oc(`config get ${configKey}`); if (!raw) return; const arr = JSON.parse(raw); if (!arr.includes(value)) { arr.push(value); oc(`config set ${configKey} '${JSON.stringify(arr)}' --json`); console.log(` ✓ ${configKey} includes ${value}`); } else { console.log(` ✓ ${configKey} already includes ${value}`); } } function removeFromArray(configKey, value) { const raw = oc(`config get ${configKey}`); if (!raw) return; const arr = JSON.parse(raw); const filtered = arr.filter(v => v !== value); if (filtered.length !== arr.length) { oc(`config set ${configKey} '${JSON.stringify(filtered)}' --json`); console.log(` ✓ Removed ${value} from ${configKey}`); } } if (mode === "install") { if (!fs.existsSync(sourceDist)) { console.error(`Build output not found: ${sourceDist}`); process.exit(1); } fs.mkdirSync(path.dirname(targetDir), { recursive: true }); fs.rmSync(targetDir, { recursive: true, force: true }); fs.cpSync(sourceDist, path.join(targetDir, "dist"), { recursive: true }); fs.copyFileSync(path.join(repoRoot, "plugin", "openclaw.plugin.json"), path.join(targetDir, "openclaw.plugin.json")); fs.copyFileSync(path.join(repoRoot, "package.json"), path.join(targetDir, "package.json")); console.log(` ✓ Plugin files → ${targetDir}`); ensureInArray("plugins.load.paths", targetDir); ensureInArray("plugins.allow", pluginId); console.log(`Installed ${pluginId} to ${targetDir}`); process.exit(0); } // uninstall fs.rmSync(targetDir, { recursive: true, force: true }); removeFromArray("plugins.load.paths", targetDir); removeFromArray("plugins.allow", pluginId); console.log(`Removed ${pluginId} from ${targetDir}`);