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_PLUGIN_ENTRY = "plugins.entries.whispergate";
|
||||
const PROVIDER_PATH = `models.providers["${NO_REPLY_PROVIDER_ID}"]`;
|
||||
const PATH_PROVIDERS = "models.providers";
|
||||
|
||||
function runOpenclaw(args, { allowFail = false } = {}) {
|
||||
try {
|
||||
@@ -127,7 +127,7 @@ if (mode === "install") {
|
||||
const before = {
|
||||
[PATH_PLUGINS_LOAD]: getJson(PATH_PLUGINS_LOAD),
|
||||
[PATH_PLUGIN_ENTRY]: getJson(PATH_PLUGIN_ENTRY),
|
||||
[PROVIDER_PATH]: getJson(PROVIDER_PATH),
|
||||
[PATH_PROVIDERS]: getJson(PATH_PROVIDERS),
|
||||
};
|
||||
|
||||
try {
|
||||
@@ -154,7 +154,9 @@ if (mode === "install") {
|
||||
};
|
||||
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,
|
||||
apiKey: NO_REPLY_API_KEY,
|
||||
api: "openai-completions",
|
||||
@@ -169,7 +171,8 @@ if (mode === "install") {
|
||||
maxTokens: 4096,
|
||||
},
|
||||
],
|
||||
});
|
||||
};
|
||||
setJson(PATH_PROVIDERS, providers);
|
||||
|
||||
runOpenclaw(["gateway", "restart"]);
|
||||
validateNoReplyModelAvailable();
|
||||
@@ -177,7 +180,7 @@ if (mode === "install") {
|
||||
const after = {
|
||||
[PATH_PLUGINS_LOAD]: getJson(PATH_PLUGINS_LOAD),
|
||||
[PATH_PLUGIN_ENTRY]: getJson(PATH_PLUGIN_ENTRY),
|
||||
[PROVIDER_PATH]: getJson(PROVIDER_PATH),
|
||||
[PATH_PROVIDERS]: getJson(PATH_PROVIDERS),
|
||||
};
|
||||
writeRecord("install", before, after);
|
||||
console.log("[whispergate] install ok");
|
||||
@@ -215,16 +218,13 @@ if (mode === "install") {
|
||||
|
||||
setJson("plugins", plugins);
|
||||
|
||||
for (const k of Object.keys(target)) {
|
||||
if (!k.startsWith("models.providers[")) continue;
|
||||
if (target[k]?.exists) setJson(k, target[k].value);
|
||||
else unsetPath(k);
|
||||
}
|
||||
if (target[PATH_PROVIDERS]?.exists) setJson(PATH_PROVIDERS, target[PATH_PROVIDERS].value);
|
||||
else unsetPath(PATH_PROVIDERS);
|
||||
|
||||
const after = {
|
||||
[PATH_PLUGINS_LOAD]: getJson(PATH_PLUGINS_LOAD),
|
||||
[PATH_PLUGIN_ENTRY]: getJson(PATH_PLUGIN_ENTRY),
|
||||
[PROVIDER_PATH]: getJson(PROVIDER_PATH),
|
||||
[PATH_PROVIDERS]: getJson(PATH_PROVIDERS),
|
||||
};
|
||||
writeRecord("uninstall", before, after);
|
||||
console.log("[whispergate] uninstall ok");
|
||||
|
||||
Reference in New Issue
Block a user