fix(install): use unsetPath for plugin entry removal

- Use openclaw config unset instead of get-modify-set
- Avoids triggering full plugins config validation
- Handles both added and replaced entries uniformly
This commit is contained in:
zhi
2026-03-03 18:23:01 +00:00
parent a177150554
commit cd0ce6a910

View File

@@ -280,11 +280,8 @@ else {
try { try {
// ── Handle ADDED entries: remove them ───────────────────────────────── // ── Handle ADDED entries: remove them ─────────────────────────────────
if (delta.added[PATH_PLUGIN_ENTRY] !== undefined) { if (delta.added[PATH_PLUGIN_ENTRY] !== undefined || delta.replaced[PATH_PLUGIN_ENTRY] !== undefined) {
const plugins = getJson("plugins") || {}; unsetPath(PATH_PLUGIN_ENTRY);
plugins.entries = plugins.entries || {};
delete plugins.entries.dirigent;
setJson("plugins", plugins);
console.log("[dirigent] removed plugins.entries.dirigent"); console.log("[dirigent] removed plugins.entries.dirigent");
} }
@@ -318,16 +315,7 @@ else {
} }
} }
// ── Handle REPLACED entries: for uninstall, we still delete (not restore) // ── Handle REPLACED provider: restore old value ───────────────────────
// because the user wants to remove the plugin, not restore the old broken config
if (delta.replaced[PATH_PLUGIN_ENTRY] !== undefined) {
const plugins = getJson("plugins") || {};
plugins.entries = plugins.entries || {};
delete plugins.entries.dirigent;
setJson("plugins", plugins);
console.log("[dirigent] removed plugins.entries.dirigent (had replaced previous config)");
}
if (delta.replaced[PATH_PROVIDER_ENTRY] !== undefined) { if (delta.replaced[PATH_PROVIDER_ENTRY] !== undefined) {
const providers = getJson(PATH_PROVIDERS) || {}; const providers = getJson(PATH_PROVIDERS) || {};
providers[NO_REPLY_PROVIDER_ID] = delta.replaced[PATH_PROVIDER_ENTRY]; providers[NO_REPLY_PROVIDER_ID] = delta.replaced[PATH_PROVIDER_ENTRY];