






















@@ -541,6 +541,22 @@ function matchWildcardComparator(token: string): "any" | "none" | null {
541541return operator === ">" || operator === "<" ? "none" : "any";
542542}
543543544+function shouldPreservePluginApiPrereleaseFloor(target: string): boolean {
545+return Boolean(
546+parseComparableSemver(normalizePartialComparableVersion(target).version)?.prerelease?.length,
547+);
548+}
549+550+function normalizePluginApiVersionForComparator(version: string, target: string): string {
551+const normalizedCorrection = normalizeCalVerNumericCorrectionForPluginApi(version);
552+if (normalizedCorrection) {
553+return normalizedCorrection;
554+}
555+return shouldPreservePluginApiPrereleaseFloor(target)
556+ ? version
557+ : normalizeCalVerCorrectionForPluginApi(version);
558+}
559+544560function satisfiesComparator(version: string, token: string): boolean {
545561const trimmed = token.trim();
546562if (!trimmed) {
@@ -553,8 +569,9 @@ function satisfiesComparator(version: string, token: string): boolean {
553569if (trimmed.startsWith("^")) {
554570const base = trimmed.slice(1).trim();
555571const upperBound = upperBoundForCaret(base);
556-const lowerCmp = compareSemver(version, base);
557-const upperCmp = upperBound ? compareSemver(version, upperBound) : null;
572+const comparableVersion = normalizePluginApiVersionForComparator(version, base);
573+const lowerCmp = compareSemver(comparableVersion, base);
574+const upperCmp = upperBound ? compareSemver(comparableVersion, upperBound) : null;
558575return lowerCmp != null && upperCmp != null && lowerCmp >= 0 && upperCmp < 0;
559576}
560577@@ -567,8 +584,9 @@ function satisfiesComparator(version: string, token: string): boolean {
567584if (!target) {
568585return false;
569586}
587+const comparableVersion = normalizePluginApiVersionForComparator(version, target);
570588const normalizedTarget = normalizePartialComparableVersion(target);
571-const cmp = compareSemver(version, normalizedTarget.version);
589+const cmp = compareSemver(comparableVersion, normalizedTarget.version);
572590if (cmp == null) {
573591return false;
574592}
@@ -595,7 +613,15 @@ function satisfiesSemverRange(version: string, range: string): boolean {
595613return tokens.every((token) => satisfiesComparator(version, token));
596614}
597615598-const OPENCLAW_CALVER_STABLE_CORRECTION_PATTERN = /^[vV]?(\d{4}\.\d{1,2}\.\d{1,2})-\d+$/;
616+const OPENCLAW_CALVER_STABLE_CORRECTION_PATTERN =
617+/^[vV]?(\d{4}\.\d{1,2}\.\d{1,2})(?:-\d+|-(?:alpha|beta|rc)\.\d+)$/i;
618+const OPENCLAW_CALVER_NUMERIC_CORRECTION_PATTERN = /^[vV]?(\d{4}\.\d{1,2}\.\d{1,2})-\d+$/;
619+620+function normalizeCalVerNumericCorrectionForPluginApi(
621+pluginApiVersion: string,
622+): string | undefined {
623+return OPENCLAW_CALVER_NUMERIC_CORRECTION_PATTERN.exec(pluginApiVersion.trim())?.[1];
624+}
599625600626function normalizeCalVerCorrectionForPluginApi(pluginApiVersion: string): string {
601627const match = OPENCLAW_CALVER_STABLE_CORRECTION_PATTERN.exec(pluginApiVersion.trim());
@@ -1263,10 +1289,7 @@ export function satisfiesPluginApiRange(
12631289if (!pluginApiRange) {
12641290return true;
12651291}
1266-return satisfiesSemverRange(
1267-normalizeCalVerCorrectionForPluginApi(pluginApiVersion),
1268-pluginApiRange,
1269-);
1292+return satisfiesSemverRange(pluginApiVersion, pluginApiRange);
12701293}
1271129412721295export function satisfiesGatewayMinimum(
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。