fix(installer): write providers map by object key to avoid quoted provider id and restore providers atomically on uninstall
This commit is contained in:
@@ -34,7 +34,7 @@ const RECORD_PATH = path.join(STATE_DIR, `whispergate-${ts}.json`);
|
|||||||
|
|
||||||
const PATH_PLUGINS_LOAD = "plugins.load.paths";
|
const PATH_PLUGINS_LOAD = "plugins.load.paths";
|
||||||
const PATH_PLUGIN_ENTRY = "plugins.entries.whispergate";
|
const PATH_PLUGIN_ENTRY = "plugins.entries.whispergate";
|
||||||
const PROVIDER_PATH = `models.providers["${NO_REPLY_PROVIDER_ID}"]`;
|
const PATH_PROVIDERS = "models.providers";
|
||||||
|
|
||||||
function runOpenclaw(args, { allowFail = false } = {}) {
|
function runOpenclaw(args, { allowFail = false } = {}) {
|
||||||
try {
|
try {
|
||||||
@@ -127,7 +127,7 @@ if (mode === "install") {
|
|||||||
const before = {
|
const before = {
|
||||||
[PATH_PLUGINS_LOAD]: getJson(PATH_PLUGINS_LOAD),
|
[PATH_PLUGINS_LOAD]: getJson(PATH_PLUGINS_LOAD),
|
||||||
[PATH_PLUGIN_ENTRY]: getJson(PATH_PLUGIN_ENTRY),
|
[PATH_PLUGIN_ENTRY]: getJson(PATH_PLUGIN_ENTRY),
|
||||||
[PROVIDER_PATH]: getJson(PROVIDER_PATH),
|
[PATH_PROVIDERS]: getJson(PATH_PROVIDERS),
|
||||||
};
|
};
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@@ -154,7 +154,9 @@ if (mode === "install") {
|
|||||||
};
|
};
|
||||||
setJson("plugins", plugins);
|
setJson("plugins", plugins);
|
||||||
|
|
||||||
setJson(PROVIDER_PATH, {
|
const providersNow = getJson(PATH_PROVIDERS).value || {};
|
||||||
|
const providers = typeof providersNow === "object" ? providersNow : {};
|
||||||
|
providers[NO_REPLY_PROVIDER_ID] = {
|
||||||
baseUrl: NO_REPLY_BASE_URL,
|
baseUrl: NO_REPLY_BASE_URL,
|
||||||
apiKey: NO_REPLY_API_KEY,
|
apiKey: NO_REPLY_API_KEY,
|
||||||
api: "openai-completions",
|
api: "openai-completions",
|
||||||
@@ -169,7 +171,8 @@ if (mode === "install") {
|
|||||||
maxTokens: 4096,
|
maxTokens: 4096,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
});
|
};
|
||||||
|
setJson(PATH_PROVIDERS, providers);
|
||||||
|
|
||||||
runOpenclaw(["gateway", "restart"]);
|
runOpenclaw(["gateway", "restart"]);
|
||||||
validateNoReplyModelAvailable();
|
validateNoReplyModelAvailable();
|
||||||
@@ -177,7 +180,7 @@ if (mode === "install") {
|
|||||||
const after = {
|
const after = {
|
||||||
[PATH_PLUGINS_LOAD]: getJson(PATH_PLUGINS_LOAD),
|
[PATH_PLUGINS_LOAD]: getJson(PATH_PLUGINS_LOAD),
|
||||||
[PATH_PLUGIN_ENTRY]: getJson(PATH_PLUGIN_ENTRY),
|
[PATH_PLUGIN_ENTRY]: getJson(PATH_PLUGIN_ENTRY),
|
||||||
[PROVIDER_PATH]: getJson(PROVIDER_PATH),
|
[PATH_PROVIDERS]: getJson(PATH_PROVIDERS),
|
||||||
};
|
};
|
||||||
writeRecord("install", before, after);
|
writeRecord("install", before, after);
|
||||||
console.log("[whispergate] install ok");
|
console.log("[whispergate] install ok");
|
||||||
@@ -215,16 +218,13 @@ if (mode === "install") {
|
|||||||
|
|
||||||
setJson("plugins", plugins);
|
setJson("plugins", plugins);
|
||||||
|
|
||||||
for (const k of Object.keys(target)) {
|
if (target[PATH_PROVIDERS]?.exists) setJson(PATH_PROVIDERS, target[PATH_PROVIDERS].value);
|
||||||
if (!k.startsWith("models.providers[")) continue;
|
else unsetPath(PATH_PROVIDERS);
|
||||||
if (target[k]?.exists) setJson(k, target[k].value);
|
|
||||||
else unsetPath(k);
|
|
||||||
}
|
|
||||||
|
|
||||||
const after = {
|
const after = {
|
||||||
[PATH_PLUGINS_LOAD]: getJson(PATH_PLUGINS_LOAD),
|
[PATH_PLUGINS_LOAD]: getJson(PATH_PLUGINS_LOAD),
|
||||||
[PATH_PLUGIN_ENTRY]: getJson(PATH_PLUGIN_ENTRY),
|
[PATH_PLUGIN_ENTRY]: getJson(PATH_PLUGIN_ENTRY),
|
||||||
[PROVIDER_PATH]: getJson(PROVIDER_PATH),
|
[PATH_PROVIDERS]: getJson(PATH_PROVIDERS),
|
||||||
};
|
};
|
||||||
writeRecord("uninstall", before, after);
|
writeRecord("uninstall", before, after);
|
||||||
console.log("[whispergate] uninstall ok");
|
console.log("[whispergate] uninstall ok");
|
||||||
|
|||||||
Reference in New Issue
Block a user