fix(install): fix uninstall order to satisfy config validation

- Remove from plugins.allow BEFORE deleting plugins.entries.dirigent
- OpenClaw validates that allow[] entries must exist in entries{}
- New order: allow → entry → paths → provider
This commit is contained in:
zhi
2026-03-03 18:28:44 +00:00
parent cd0ce6a910
commit 92799176bf

View File

@@ -279,19 +279,25 @@ else {
const delta = rec.delta || { added: {}, replaced: {}, removed: {} }; const delta = rec.delta || { added: {}, replaced: {}, removed: {} };
try { try {
// ── Handle ADDED entries: remove them ───────────────────────────────── // ── IMPORTANT: Order matters for OpenClaw config validation ────────────
// 1. First remove from allow (before deleting entry, otherwise validation fails)
if (delta.added[PATH_PLUGINS_ALLOW] !== undefined) {
const allowList = getJson(PATH_PLUGINS_ALLOW) || [];
const idx = allowList.indexOf("dirigent");
if (idx !== -1) {
allowList.splice(idx, 1);
setJson(PATH_PLUGINS_ALLOW, allowList);
console.log("[dirigent] removed 'dirigent' from plugins.allow");
}
}
// 2. Then remove entry
if (delta.added[PATH_PLUGIN_ENTRY] !== undefined || delta.replaced[PATH_PLUGIN_ENTRY] !== undefined) { if (delta.added[PATH_PLUGIN_ENTRY] !== undefined || delta.replaced[PATH_PLUGIN_ENTRY] !== undefined) {
unsetPath(PATH_PLUGIN_ENTRY); unsetPath(PATH_PLUGIN_ENTRY);
console.log("[dirigent] removed plugins.entries.dirigent"); console.log("[dirigent] removed plugins.entries.dirigent");
} }
if (delta.added[PATH_PROVIDER_ENTRY] !== undefined) { // 3. Then remove plugin path (after entry is gone)
const providers = getJson(PATH_PROVIDERS) || {};
delete providers[NO_REPLY_PROVIDER_ID];
setJson(PATH_PROVIDERS, providers);
console.log(`[dirigent] removed models.providers.${NO_REPLY_PROVIDER_ID}`);
}
if (delta.added[PATH_PLUGINS_LOAD] !== undefined) { if (delta.added[PATH_PLUGINS_LOAD] !== undefined) {
const plugins = getJson("plugins") || {}; const plugins = getJson("plugins") || {};
const paths = plugins.load?.paths || []; const paths = plugins.load?.paths || [];
@@ -304,15 +310,12 @@ else {
} }
} }
// ── Handle plugins.allow ────────────────────────────────────────────── // 4. Finally remove provider
if (delta.added[PATH_PLUGINS_ALLOW] !== undefined) { if (delta.added[PATH_PROVIDER_ENTRY] !== undefined) {
const allowList = getJson(PATH_PLUGINS_ALLOW) || []; const providers = getJson(PATH_PROVIDERS) || {};
const idx = allowList.indexOf("dirigent"); delete providers[NO_REPLY_PROVIDER_ID];
if (idx !== -1) { setJson(PATH_PROVIDERS, providers);
allowList.splice(idx, 1); console.log(`[dirigent] removed models.providers.${NO_REPLY_PROVIDER_ID}`);
setJson(PATH_PLUGINS_ALLOW, allowList);
console.log("[dirigent] removed 'dirigent' from plugins.allow");
}
} }
// ── Handle REPLACED provider: restore old value ─────────────────────── // ── Handle REPLACED provider: restore old value ───────────────────────