
























@@ -15,6 +15,7 @@ import {
1515downloadClawHubPackageArchive,
1616fetchClawHubPackageArtifact,
1717fetchClawHubPackageDetail,
18+fetchClawHubPackageVersion,
1819normalizeClawHubSha256Integrity,
1920normalizeClawHubSha256Hex,
2021parseClawHubPluginSpec,
@@ -330,6 +331,38 @@ function mapClawHubRequestError(
330331return buildClawHubInstallFailure(formatErrorMessage(error));
331332}
332333334+function isMissingArtifactResolverRoute(error: unknown): boolean {
335+return (
336+error instanceof ClawHubRequestError &&
337+error.status === 404 &&
338+error.requestPath.endsWith("/artifact")
339+);
340+}
341+342+function buildArtifactResolverResponseFromVersion(params: {
343+detail: ClawHubPackageDetail;
344+versionDetail: ClawHubPackageVersion;
345+}): ClawHubPackageArtifactResolverResponse {
346+const packageDetail = params.detail.package;
347+const versionPackage = params.versionDetail.package;
348+return {
349+package: versionPackage
350+ ? {
351+name: versionPackage.name,
352+displayName: versionPackage.displayName,
353+family: versionPackage.family,
354+}
355+ : packageDetail
356+ ? {
357+name: packageDetail.name,
358+displayName: packageDetail.displayName,
359+family: packageDetail.family,
360+}
361+ : null,
362+version: params.versionDetail.version,
363+};
364+}
365+333366function formatClawHubClawPackDownloadError(params: {
334367error: unknown;
335368packageName: string;
@@ -783,7 +816,7 @@ async function resolveCompatiblePackageVersion(params: {
783816CLAWHUB_INSTALL_ERROR_CODE.NO_INSTALLABLE_VERSION,
784817);
785818}
786-let artifactResponse;
819+let artifactResponse: ClawHubPackageArtifactResolverResponse;
787820try {
788821artifactResponse = await fetchClawHubPackageArtifact({
789822name: params.detail.package?.name ?? "",
@@ -793,11 +826,33 @@ async function resolveCompatiblePackageVersion(params: {
793826timeoutMs: params.timeoutMs,
794827});
795828} catch (error) {
796-return mapClawHubRequestError(error, {
797-stage: "version",
798-name: params.detail.package?.name ?? "unknown",
799-version: requestedVersion,
800-});
829+if (isMissingArtifactResolverRoute(error)) {
830+try {
831+const versionDetail = await fetchClawHubPackageVersion({
832+name: params.detail.package?.name ?? "",
833+version: requestedVersion,
834+baseUrl: params.baseUrl,
835+token: params.token,
836+timeoutMs: params.timeoutMs,
837+});
838+artifactResponse = buildArtifactResolverResponseFromVersion({
839+detail: params.detail,
840+ versionDetail,
841+});
842+} catch (versionError) {
843+return mapClawHubRequestError(versionError, {
844+stage: "version",
845+name: params.detail.package?.name ?? "unknown",
846+version: requestedVersion,
847+});
848+}
849+} else {
850+return mapClawHubRequestError(error, {
851+stage: "version",
852+name: params.detail.package?.name ?? "unknown",
853+version: requestedVersion,
854+});
855+}
801856}
802857const artifactVersion = readArtifactResolverVersion(artifactResponse, requestedVersion);
803858const resolvedVersion = normalizeOptionalString(artifactVersion.version) ?? requestedVersion;
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。