




















@@ -58,6 +58,8 @@ import {
5858withPluginInstallRecords,
5959} from "../../plugins/installed-plugin-index-records.js";
6060import {
61+resolveTrustedSourceLinkedOfficialClawHubSpec,
62+resolveTrustedSourceLinkedOfficialNpmSpec,
6163syncPluginsForUpdateChannel,
6264updateNpmInstalledPlugins,
6365type PluginUpdateIntegrityDriftParams,
@@ -190,6 +192,7 @@ export async function collectMissingPluginInstallPayloads(params: {
190192records: Record<string, PluginInstallRecord>;
191193config?: OpenClawConfig;
192194skipDisabledPlugins?: boolean;
195+syncOfficialPluginInstalls?: boolean;
193196env?: NodeJS.ProcessEnv;
194197}): Promise<MissingPluginInstallPayload[]> {
195198const env = params.env ?? process.env;
@@ -204,14 +207,20 @@ export async function collectMissingPluginInstallPayloads(params: {
204207if (!isTrackedPackageInstallRecord(record)) {
205208continue;
206209}
210+const officialNpmSpec = params.syncOfficialPluginInstalls
211+ ? resolveTrustedSourceLinkedOfficialNpmSpec({ pluginId, record })
212+ : undefined;
213+const officialClawHubSpec = params.syncOfficialPluginInstalls
214+ ? resolveTrustedSourceLinkedOfficialClawHubSpec({ pluginId, record })
215+ : undefined;
207216if (normalizedPluginConfig && params.config) {
208217const enableState = resolveEffectiveEnableState({
209218id: pluginId,
210219origin: "global",
211220config: normalizedPluginConfig,
212221rootConfig: params.config,
213222});
214-if (!enableState.enabled) {
223+if (!enableState.enabled && !officialNpmSpec && !officialClawHubSpec) {
215224continue;
216225}
217226}
@@ -1168,6 +1177,7 @@ async function updatePluginsAfterCoreUpdate(params: {
11681177 records,
11691178config: pluginConfig,
11701179skipDisabledPlugins: true,
1180+syncOfficialPluginInstalls: true,
11711181});
11721182if (missing.length === 0) {
11731183return [];
@@ -1188,6 +1198,21 @@ async function updatePluginsAfterCoreUpdate(params: {
11881198defaultRuntime.log(theme.warn(warning.message));
11891199}
11901200}
1201+const repairResult = await updateNpmInstalledPlugins({
1202+config: pluginConfig,
1203+pluginIds: missingIds,
1204+timeoutMs: params.timeoutMs,
1205+updateChannel: params.channel,
1206+skipDisabledPlugins: true,
1207+syncOfficialPluginInstalls: true,
1208+disableOnFailure: true,
1209+logger: pluginLogger,
1210+onIntegrityDrift: onPluginIntegrityDrift,
1211+});
1212+pluginConfig = repairResult.config;
1213+pluginsChanged ||= repairResult.changed;
1214+npmPluginsChanged ||= repairResult.changed;
1215+pluginUpdateOutcomes.push(...repairResult.outcomes);
11911216return missingIds;
11921217};
11931218@@ -1199,6 +1224,8 @@ async function updatePluginsAfterCoreUpdate(params: {
11991224updateChannel: params.channel,
12001225skipIds: new Set([...syncResult.summary.switchedToNpm, ...missingPayloadIds]),
12011226skipDisabledPlugins: true,
1227+syncOfficialPluginInstalls: true,
1228+disableOnFailure: true,
12021229logger: pluginLogger,
12031230onIntegrityDrift: onPluginIntegrityDrift,
12041231});
@@ -1217,6 +1244,7 @@ async function updatePluginsAfterCoreUpdate(params: {
12171244records: pluginConfig.plugins?.installs ?? {},
12181245config: pluginConfig,
12191246skipDisabledPlugins: true,
1247+syncOfficialPluginInstalls: true,
12201248});
12211249pluginUpdateOutcomes.push(
12221250 ...remainingMissingPayloads
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。