


























@@ -431,13 +431,31 @@ function shouldFallbackBetaClawHubUpdate(result: { ok: false; code?: string }):
431431return shouldFallbackClawHubBridgeToNpm(result);
432432}
433433434-function shouldFallbackBetaNpmUpdate(result: { ok: false; code?: string; error: string }): boolean {
435-if (result.code === PLUGIN_INSTALL_ERROR_CODE.NPM_PACKAGE_NOT_FOUND) {
436-return true;
434+function describeBetaNpmFallback(params: {
435+pluginId: string;
436+betaSpec: string | undefined;
437+fallbackSpec: string;
438+result: { ok: false; code?: string; error: string };
439+}): string {
440+const betaSpec = params.betaSpec ?? "the beta npm release";
441+const missingBeta =
442+params.result.code === PLUGIN_INSTALL_ERROR_CODE.NPM_PACKAGE_NOT_FOUND ||
443+/\b(ETARGET|notarget)\b|No matching version found|dist-tag|tag .*not found/i.test(
444+params.result.error,
445+);
446+const reason = missingBeta ? "has no beta npm release" : "failed beta npm update";
447+return `Plugin "${params.pluginId}" ${reason} for ${betaSpec}; falling back to ${params.fallbackSpec}.`;
448+}
449+450+function npmUpdateFailureSpec(params: {
451+effectiveSpec: string | undefined;
452+fallbackSpec: string | undefined;
453+usedFallback: boolean;
454+}): string {
455+if (params.usedFallback && params.fallbackSpec) {
456+return params.fallbackSpec;
437457}
438-return /\b(ETARGET|notarget)\b|No matching version found|dist-tag|tag .*not found/i.test(
439-result.error,
440-);
458+return params.effectiveSpec ?? params.fallbackSpec ?? "unknown";
441459}
442460443461function isDefaultNpmSpecForBetaUpdate(spec: string): { name: string } | null {
@@ -1026,15 +1044,17 @@ export async function updateNpmInstalledPlugins(params: {
10261044});
10271045continue;
10281046}
1029-if (
1030-!probe.ok &&
1031-record.source === "npm" &&
1032-npmSpecs?.fallbackSpec &&
1033-shouldFallbackBetaNpmUpdate(probe)
1034-) {
1047+let usedNpmFallback = false;
1048+if (!probe.ok && record.source === "npm" && npmSpecs?.fallbackSpec) {
10351049logger.warn?.(
1036-`Plugin "${pluginId}" has no beta npm release for ${npmSpecs.fallbackLabel ?? effectiveSpec}; falling back to ${npmSpecs.fallbackSpec}.`,
1050+describeBetaNpmFallback({
1051+ pluginId,
1052+betaSpec: npmSpecs.fallbackLabel ?? effectiveSpec,
1053+fallbackSpec: npmSpecs.fallbackSpec,
1054+result: probe,
1055+}),
10371056);
1057+usedNpmFallback = true;
10381058probe = await installPluginFromNpmSpec({
10391059spec: npmSpecs.fallbackSpec,
10401060mode: "update",
@@ -1083,7 +1103,11 @@ export async function updateNpmInstalledPlugins(params: {
10831103record.source === "npm"
10841104 ? formatNpmInstallFailure({
10851105 pluginId,
1086-spec: effectiveSpec!,
1106+spec: npmUpdateFailureSpec({
1107+ effectiveSpec,
1108+fallbackSpec: npmSpecs?.fallbackSpec,
1109+usedFallback: usedNpmFallback,
1110+}),
10871111phase: "check",
10881112result: probe,
10891113})
@@ -1207,15 +1231,17 @@ export async function updateNpmInstalledPlugins(params: {
12071231});
12081232continue;
12091233}
1210-if (
1211-!result.ok &&
1212-record.source === "npm" &&
1213-npmSpecs?.fallbackSpec &&
1214-shouldFallbackBetaNpmUpdate(result)
1215-) {
1234+let usedNpmFallback = false;
1235+if (!result.ok && record.source === "npm" && npmSpecs?.fallbackSpec) {
12161236logger.warn?.(
1217-`Plugin "${pluginId}" has no beta npm release for ${npmSpecs.fallbackLabel ?? effectiveSpec}; falling back to ${npmSpecs.fallbackSpec}.`,
1237+describeBetaNpmFallback({
1238+ pluginId,
1239+betaSpec: npmSpecs.fallbackLabel ?? effectiveSpec,
1240+fallbackSpec: npmSpecs.fallbackSpec,
1241+ result,
1242+}),
12181243);
1244+usedNpmFallback = true;
12191245result = await installPluginFromNpmSpec({
12201246spec: npmSpecs.fallbackSpec,
12211247mode: "update",
@@ -1262,7 +1288,11 @@ export async function updateNpmInstalledPlugins(params: {
12621288record.source === "npm"
12631289 ? formatNpmInstallFailure({
12641290 pluginId,
1265-spec: effectiveSpec!,
1291+spec: npmUpdateFailureSpec({
1292+ effectiveSpec,
1293+fallbackSpec: npmSpecs?.fallbackSpec,
1294+usedFallback: usedNpmFallback,
1295+}),
12661296phase: "update",
12671297result: result,
12681298})
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。