From 18bea4ae38a681432bd8562b23b2c8b0a074ac99 Mon Sep 17 00:00:00 2001 From: stswangzhiping <59632378+stswangzhiping@users.noreply.github.com> Date: Thu, 23 Apr 2026 08:22:32 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20applyFullProviderFromVps=20=E6=97=A0?= =?UTF-8?q?=E5=8F=98=E5=8C=96=E6=97=B6=E8=B7=B3=E8=BF=87=E5=86=99=E7=9B=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit apiKey + 模型列表 MD5 均未变化时不写 openclaw.json, 避免 BOX 每次重连都触发不必要的 gateway 重启。 Made-with: Cursor --- lib/openclaw-provider.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/lib/openclaw-provider.js b/lib/openclaw-provider.js index 81b65be..4ff69fc 100644 --- a/lib/openclaw-provider.js +++ b/lib/openclaw-provider.js @@ -224,6 +224,21 @@ function applyFullProviderFromVps(provider, onDone) { if (err) { log.warn('openclaw-provider', `拉模型失败,使用空列表: ${err.message}`); } + + // 校验 apiKey + 模型列表是否有实际变化,无变化则跳过写盘,避免触发不必要的 gateway 重启 + try { + const existing = readJsonFile(configFile); + const cur = existing.models?.providers?.[name] || {}; + const curApiKey = cur.apiKey || ''; + const curMd5 = computeModelsMd5(cur.models || []); + const newMd5 = computeModelsMd5(list); + if (curApiKey === apiKey && curMd5 === newMd5) { + log.info('openclaw-provider', `provider 无变化(apiKey + 模型列表相同),跳过写盘`); + if (typeof onDone === 'function') { try { onDone(); } catch (e) { log.warn('openclaw-provider', `onDone: ${e.message}`); } } + return; + } + } catch (_) { /* 读取失败则继续写盘 */ } + addProviderSync(configFile, name, baseUrl, apiKey, list, defaultModel); if (typeof onDone === 'function') { try {