



























@@ -51,6 +51,7 @@ import {
5151resolveGlobalInstallSpec,
5252} from "../../infra/update-global.js";
5353import { runGatewayUpdate, type UpdateRunResult } from "../../infra/update-runner.js";
54+import { normalizePluginsConfig, resolveEffectiveEnableState } from "../../plugins/config-state.js";
5455import {
5556loadInstalledPluginIndexInstallRecords,
5657withoutPluginInstallRecords,
@@ -184,16 +185,33 @@ async function pathExists(filePath: string): Promise<boolean> {
184185185186export async function collectMissingPluginInstallPayloads(params: {
186187records: Record<string, PluginInstallRecord>;
188+config?: OpenClawConfig;
189+skipDisabledPlugins?: boolean;
187190env?: NodeJS.ProcessEnv;
188191}): Promise<MissingPluginInstallPayload[]> {
189192const env = params.env ?? process.env;
193+const normalizedPluginConfig =
194+params.skipDisabledPlugins && params.config
195+ ? normalizePluginsConfig(params.config.plugins)
196+ : undefined;
190197const missing: MissingPluginInstallPayload[] = [];
191198for (const [pluginId, record] of Object.entries(params.records).toSorted(([left], [right]) =>
192199left.localeCompare(right),
193200)) {
194201if (!isTrackedPackageInstallRecord(record)) {
195202continue;
196203}
204+if (normalizedPluginConfig && params.config) {
205+const enableState = resolveEffectiveEnableState({
206+id: pluginId,
207+origin: "global",
208+config: normalizedPluginConfig,
209+rootConfig: params.config,
210+});
211+if (!enableState.enabled) {
212+continue;
213+}
214+}
197215const rawInstallPath = normalizeOptionalString(record.installPath);
198216if (!rawInstallPath) {
199217missing.push({ pluginId, reason: "missing-install-path" });
@@ -1091,7 +1109,11 @@ async function updatePluginsAfterCoreUpdate(params: {
10911109const repairMissingPayloads = async (
10921110records: Record<string, PluginInstallRecord>,
10931111): Promise<readonly string[]> => {
1094-const missing = await collectMissingPluginInstallPayloads({ records });
1112+const missing = await collectMissingPluginInstallPayloads({
1113+ records,
1114+config: pluginConfig,
1115+skipDisabledPlugins: true,
1116+});
10951117if (missing.length === 0) {
10961118return [];
10971119}
@@ -1110,6 +1132,8 @@ async function updatePluginsAfterCoreUpdate(params: {
11101132pluginIds: missingIds,
11111133timeoutMs: params.timeoutMs,
11121134updateChannel: params.channel,
1135+skipDisabledPlugins: true,
1136+disableOnFailure: true,
11131137logger: pluginLogger,
11141138onIntegrityDrift: onPluginIntegrityDrift,
11151139});
@@ -1130,6 +1154,7 @@ async function updatePluginsAfterCoreUpdate(params: {
11301154updateChannel: params.channel,
11311155skipIds: new Set([...syncResult.summary.switchedToNpm, ...repairedMissingPayloadIds]),
11321156skipDisabledPlugins: true,
1157+disableOnFailure: true,
11331158logger: pluginLogger,
11341159onIntegrityDrift: onPluginIntegrityDrift,
11351160});
@@ -1140,6 +1165,8 @@ async function updatePluginsAfterCoreUpdate(params: {
1140116511411166const remainingMissingPayloads = await collectMissingPluginInstallPayloads({
11421167records: pluginConfig.plugins?.installs ?? {},
1168+config: pluginConfig,
1169+skipDisabledPlugins: true,
11431170});
11441171pluginUpdateOutcomes.push(
11451172 ...remainingMissingPayloads.map(
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。