From 7640e803735ae7a9c4e9818d672709c55564cf63 Mon Sep 17 00:00:00 2001 From: orion Date: Sun, 8 Mar 2026 06:25:07 +0000 Subject: [PATCH] refactor(installer): detect existing install via plugins.entries.dirigent registration --- scripts/install-dirigent-openclaw.mjs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/scripts/install-dirigent-openclaw.mjs b/scripts/install-dirigent-openclaw.mjs index 7669627..18aeb88 100755 --- a/scripts/install-dirigent-openclaw.mjs +++ b/scripts/install-dirigent-openclaw.mjs @@ -232,14 +232,21 @@ function clone(v) { return JSON.parse(JSON.stringify(v)); } +function isDirigentRegistered() { + const entry = getJson(PATH_PLUGIN_ENTRY); + return !!(entry && typeof entry === "object"); +} + // ═══════════════════════════════════════════════════════════════════════════ // INSTALL // ═══════════════════════════════════════════════════════════════════════════ if (mode === "install") { - // Check if already installed - if so, uninstall first + // Check if plugin is already registered in config. + // Prefer record-based uninstall when record exists; otherwise continue with in-place overwrite. + const registered = isDirigentRegistered(); const existingRecord = findLatestInstallRecord(); - if (existingRecord) { - console.log("[dirigent] existing installation detected, uninstalling first..."); + if (registered && existingRecord) { + console.log("[dirigent] existing plugin registration detected (with install record), uninstalling first..."); process.env.RECORD_FILE = existingRecord; const result = spawnSync(process.execPath, [import.meta.filename, "--uninstall"], { env: { ...process.env, OPENCLAW_DIR }, @@ -250,6 +257,8 @@ if (mode === "install") { process.exit(1); } console.log("[dirigent] previous installation removed, proceeding with fresh install..."); + } else if (registered) { + console.log("[dirigent] existing plugin registration detected (no install record). Proceeding with in-place reinstall..."); } // 1. Build dist