Use api.pluginConfig directly for Dirigent runtime config #20
@@ -113,6 +113,39 @@ function setJson(pathKey, value) {
|
|||||||
runOpenclaw(["config", "set", pathKey, JSON.stringify(value), "--json"]);
|
runOpenclaw(["config", "set", pathKey, JSON.stringify(value), "--json"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function isPlainObject(value) {
|
||||||
|
return !!value && typeof value === "object" && !Array.isArray(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
function mergePreservingExisting(base, updates) {
|
||||||
|
if (!isPlainObject(updates)) return updates;
|
||||||
|
const out = isPlainObject(base) ? { ...base } : {};
|
||||||
|
for (const [key, nextValue] of Object.entries(updates)) {
|
||||||
|
const currentValue = out[key];
|
||||||
|
if (nextValue === undefined) continue;
|
||||||
|
if (isPlainObject(nextValue)) {
|
||||||
|
out[key] = mergePreservingExisting(currentValue, nextValue);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (nextValue === null) {
|
||||||
|
if (currentValue === undefined) out[key] = null;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (typeof nextValue === "string") {
|
||||||
|
if (nextValue === "" && currentValue !== undefined) continue;
|
||||||
|
out[key] = nextValue;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (Array.isArray(nextValue)) {
|
||||||
|
if (nextValue.length === 0 && Array.isArray(currentValue) && currentValue.length > 0) continue;
|
||||||
|
out[key] = nextValue;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
out[key] = nextValue;
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
function unsetPath(pathKey) {
|
function unsetPath(pathKey) {
|
||||||
runOpenclaw(["config", "unset", pathKey], true);
|
runOpenclaw(["config", "unset", pathKey], true);
|
||||||
}
|
}
|
||||||
@@ -185,7 +218,8 @@ if (mode === "install") {
|
|||||||
plugins.load.paths = loadPaths;
|
plugins.load.paths = loadPaths;
|
||||||
|
|
||||||
plugins.entries = plugins.entries || {};
|
plugins.entries = plugins.entries || {};
|
||||||
plugins.entries.dirigent = {
|
const existingDirigentEntry = isPlainObject(plugins.entries.dirigent) ? plugins.entries.dirigent : {};
|
||||||
|
const desiredDirigentEntry = {
|
||||||
enabled: true,
|
enabled: true,
|
||||||
config: {
|
config: {
|
||||||
enabled: true,
|
enabled: true,
|
||||||
@@ -201,6 +235,7 @@ if (mode === "install") {
|
|||||||
noReplyPort: NO_REPLY_PORT,
|
noReplyPort: NO_REPLY_PORT,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
plugins.entries.dirigent = mergePreservingExisting(existingDirigentEntry, desiredDirigentEntry);
|
||||||
setJson("plugins", plugins);
|
setJson("plugins", plugins);
|
||||||
|
|
||||||
step(5, 6, "configure no-reply provider");
|
step(5, 6, "configure no-reply provider");
|
||||||
|
|||||||
Reference in New Issue
Block a user